美文网首页
Android Q获取Camera录制的视频的地理位置

Android Q获取Camera录制的视频的地理位置

作者: 老子爱吃荷包蛋 | 来源:发表于2022-12-06 10:56 被阅读0次

    本文章在此基础上得补充 https://www.jianshu.com/p/ff6623351614

    安卓Q一下获取地理位置没问题,安卓Q以上获取地理位置为null,也就是metadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_LOCATION)会返回null,
    我们需要用video的uri设置setDataSource才能获取到

    获取视频的uri

    private static Uri getVideoContentUri(Context context, File videoFile) {
            String filePath = videoFile.getAbsolutePath();
            Cursor cursor = context.getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
                    new String[]{MediaStore.Video.Media._ID}, MediaStore.Video.Media.DATA + "=? ",
                    new String[]{filePath}, null);
            if (cursor != null && cursor.moveToFirst()) {
                int id = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID));
                Uri baseUri = Uri.parse("content://media/external/video/media");
                return Uri.withAppendedPath(baseUri, "" + id);
            } else {
                if (videoFile.exists()) {
                    ContentValues values = new ContentValues();
                    values.put(MediaStore.Video.Media.DATA, filePath);
                    return context.getContentResolver().insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);
                } else {
                    return null;
                }
            }
        }
    

    获取视频的位置信息 后面可能会有一个/,处理的时候需要考虑一下

        /**
         * get video location info
         *
         * @return +31.2826+121.5048/
         */
        public static String getVideoLocationInfo(Uri videoUri) {
            MediaMetadataRetriever metadataRetriever = new MediaMetadataRetriever();
            try {
                metadataRetriever.setDataSource(GalleryAppImpl.globalContext,videoUri);
            } catch (Exception e) {
                e.printStackTrace();
                return "";
            }
            return metadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_LOCATION);
        }
    
        public static float[] getVideoLocation(Uri videoUri) {
            String s = getVideoLocationInfo(videoUri);
            float[] location = new float[]{0f, 0f};
            if (!TextUtils.isEmpty(s)) {
                String locationInfoString = s.trim().replaceAll("/", "");
                char[] chars = locationInfoString.toCharArray();
                String latitude = "0";
                String longitude = "0";
                for (int i = 0; i < chars.length; i++) {
                    if ((chars[i] == '+' || chars[i] == '-') && i > 0) {
                        latitude = locationInfoString.substring(0, i);
                        longitude = locationInfoString.substring(i, chars.length);
                        break;
                    }
                }
                location[0] = Float.parseFloat(latitude);
                location[1] = Float.parseFloat(longitude);
            }
            return location;
        }
    

    相关文章

      网友评论

          本文标题:Android Q获取Camera录制的视频的地理位置

          本文链接:https://www.haomeiwen.com/subject/yinbfdtx.html