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

本文章在此基础上得补充 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录制的视频的地理位置)