如何在 Android 中获取视频的位置数据?

ful*_*fic 5 video android geolocation

我正在尝试获取存储在我的应用程序用户手机上的视频文件的元数据。我可以获得文件名、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;
}
Run Code Online (Sandbox Code Playgroud)

此处描述的方法:对捕获的视频进行地理标记会产生类似的结果(METADATA_KEY_LOCATION 列中的空值)。

那么,我的问题是:内置的Android视频工具在创建视频时会记录位置数据吗?答案似乎是否定的,但我不明白如果是这种情况,为什么会有位置数据列。如果不是这种情况,我如何访问视频位置数据?我需要已拍摄的视频文件的位置。

提前致谢!

roy*_*oyB 2

好吧,我刚刚测试了您的假设,即谷歌在录制视频时不会保留位置数据,这是不正确的。

例如:使用 5.1 版本的 Nexus 5,我能够在我刚刚拍摄的视频上获得地理标签。你可以自己尝试一下,如果你的手机已经root,只需MediaStore使用一些浏览外部数据库(com.android.providers.media)SQLITE viewer

但假设谷歌不保留GeoTag。他们保留这样一个专栏的原因有很多:

  • 支持其他想要保留地理标记的视频库
  • 允许使用视频录像机的用户保存当前位置(使用 FusedLocation 或类似的东西)。一种方法是更新数据库中的相关行,例如:

    getContentResolver().update(MediaStore.Video.Media.EXTERNAL_CONTENT_URI.buildUpon().appendPath("2152").build(), cv, null, null);
    
    Run Code Online (Sandbox Code Playgroud)
  • 支持以前支持标记的版本