微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从 Android 11 和 targetApi 30 上的文档 uri 获取真实文件路径或文件名

如何解决如何从 Android 11 和 targetApi 30 上的文档 uri 获取真实文件路径或文件名

Android 11
targetApi 30
不要请求 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE
使用 SAF api 获得这样的 uri:
“content://com.android.providers.media.documents/document/document%3”
并像这样解析 uri:

public static String getRealPath(uri) {
    String docId = DocumentsContract.getDocumentId(uri);
    String[] split = docId.split(":");
    String type = split[0];
    Uri contentUri;
    switch (type) {
        case "image":
            contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
            break;
        case "video":
            contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
            break;
        case "audio":
            contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
            break;
        default:
            contentUri = MediaStore.Files.getContentUri("external");
    }
    String selection = "_id=?";
    String[] selectionArgs = new String[]{
            split[1]
    };

    return getDataColumn(getContext(),contentUri,selection,selectionArgs);
}

public static String getDataColumn(Context context,Uri uri,String selection,String[] selectionArgs) {
    Cursor cursor = null;
    String column = "_data";
    String[] projection = {
            column
    };
    try {
        cursor = context.getContentResolver().query(uri,projection,selectionArgs,null);
        if (cursor != null && cursor.movetoFirst()) {
            int column_index = cursor.getColumnIndexOrThrow(column);
            String value = cursor.getString(column_index);
            if (value.startsWith("content://") || !value.startsWith("/") && !value.startsWith("file://")) {
                return null;
            }
            return value;
        }
    } catch (Exception e) {
        e.printstacktrace();
    } finally {
        if (cursor != null) {
            cursor.close();
        }
    }
    return null;
}

我在 android 11 以下的手机上得到正常值,但在 android 11 手机上得到空值

好吧,我想获取文件的真实路径或名称

有人可以帮我吗?
谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。