我正在尝试获取存储在应用用户手机上的视频文件的元数据.我可以获取文件名,ID,日期等.但是,纬度和经度数据始终返回0.0.我一直在指这个:
developer.android.com/reference/android/provider/MediaStore.Video.VideoColumns.html
是的,我已经在我的设置中启用了使用位置.我有一个非常类似的功能,图像工作正常.
public void getLocalVideoFiles(Context context) {
ContentResolver videoResolver = context.getContentResolver();
Uri videoUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
String test = getRealPathFromURI(context, videoUri);
Cursor videoCursor = videoResolver.query(videoUri, null, null, null, null);
if(videoCursor!=null && videoCursor.movetoFirst()){
//get columns
int latColumn = videoCursor.getColumnIndex
(MediaStore.Video.Media.LATITUDE);
int lonColumn = videoCursor.getColumnIndex
(MediaStore.Video.Media.LONGITUDE);
do {
String thisLat = Double.toString(videoCursor.getDouble(latColumn));
String thisLon = Double.toString(videoCursor.getDouble(lonColumn));
Log.d("video Latitude",thisLat);
Log.d("video Longitude",thisLon);
}
while (videoCursor.movetoNext());
}
return localClips;
}
此处描述的方法:Geotagging a captured video产生类似的结果(MetaDATA_KEY_LOCATION列中的空值).
所以,我的问题是:内置的Android视频工具是否在创建视频时记录位置数据?似乎答案是否定的,但我不明白为什么有位置数据的列,如果是这种情况.如果不是这样,我该如何访问视频位置数据?我需要已经拍摄的视频文件的位置.
提前致谢!
解决方法:
好吧,我刚刚测试了你的假设,谷歌在录制视频时没有保留位置数据,这是不正确的.
例如:使用我的nexus 5与版本5.1,我能够获得我刚拍摄的视频的地理标记.您可以自己尝试,如果您的手机已植根,只需使用一些sqlITE查看器浏览MediaStore外部数据库(com.android.providers.media)
但是,让我们说谷歌不保留GeoTag.他们保留这样一个专栏的原因有很多:
>支持其他想要保留地理标记的视频库
>允许正在实施录像机的用户保存当前位置(使用FusedLocation或类似的东西).这样做的方法就是更新数据库中的相关行,例如:
getContentResolver().update(MediaStore.Video.Media.EXTERNAL_CONTENT_URI.buildUpon().appendpath("2152").build(), cv, null, null);