如何获取 Android 中视频的位置数据?
How can I get the location data of a video in Android?
我正在尝试获取存储在我的应用程序用户 phone 上的视频文件的元数据。我可以获得文件名、ID、拍摄日期等。但是,纬度和经度数据始终 returns 为 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视频工具在创建视频时会记录位置数据吗?似乎答案是否定的,但我不明白为什么在这种情况下会有位置数据列。如果不是这种情况,我如何访问视频位置数据?我需要已经拍摄的视频文件的位置。
提前致谢!
好吧,我刚刚测试了您的假设,即 google 在录制视频时不保留位置数据,这是不正确的。
例如: 使用我的 nexus 5 版本 5.1 我能够在我刚刚拍摄的视频上获得地理标签。您可以自己尝试,如果您的 phone 已 root,只需使用 SQLITE viewer
浏览 MediaStore
外部数据库 (com.android.providers.media)
但假设 google 不保留 GeoTag。他们保留这样一个专栏的原因有很多:
- 支持其他想要保留地理标记的视频库
允许使用录像机的用户保存当前位置(使用 FusedLocation 或类似的东西)。一种方法是更新数据库中的相关行,例如:
getContentResolver().update(MediaStore.Video.Media.EXTERNAL_CONTENT_URI.buildUpon().appendPath("2152").build(), cv, null, null);
支持以前支持标记的版本
我正在尝试获取存储在我的应用程序用户 phone 上的视频文件的元数据。我可以获得文件名、ID、拍摄日期等。但是,纬度和经度数据始终 returns 为 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视频工具在创建视频时会记录位置数据吗?似乎答案是否定的,但我不明白为什么在这种情况下会有位置数据列。如果不是这种情况,我如何访问视频位置数据?我需要已经拍摄的视频文件的位置。
提前致谢!
好吧,我刚刚测试了您的假设,即 google 在录制视频时不保留位置数据,这是不正确的。
例如: 使用我的 nexus 5 版本 5.1 我能够在我刚刚拍摄的视频上获得地理标签。您可以自己尝试,如果您的 phone 已 root,只需使用 SQLITE viewer
MediaStore
外部数据库 (com.android.providers.media)
但假设 google 不保留 GeoTag。他们保留这样一个专栏的原因有很多:
- 支持其他想要保留地理标记的视频库
允许使用录像机的用户保存当前位置(使用 FusedLocation 或类似的东西)。一种方法是更新数据库中的相关行,例如:
getContentResolver().update(MediaStore.Video.Media.EXTERNAL_CONTENT_URI.buildUpon().appendPath("2152").build(), cv, null, null);
支持以前支持标记的版本