Android Oreo 如何从 uri 获取真实路径?

标签 android android-8.0-oreo file-sharing file-copying android-8.1-oreo

我正在使用此代码从 URI 获取真实路径。它在工作 棉花糖但不是奥利奥:

private String getPathNew(Activity activity, Uri uri) { 
    if (isDownloadsDocument(uri)) {
        final String id = DocumentsContract.getDocumentId(uri);
        final Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
        return getDataColumn(activity, contentUri, null, null);
    }
    return null;
}

public static String getDataColumn(Context context, Uri uri, String 
selection, String[] selectionArgs) {
    Cursor cursor = null;
    final String column = "_data";
    final String[] projection = {column};
    try {
        cursor = context.getContentResolver().query(uri, projection, selection, 
selectionArgs, null);
        if (cursor != null && cursor.moveToFirst()) {
            final int column_index = cursor.getColumnIndexOrThrow(column);
            return cursor.getString(column_index);
        }
    } finally {
        if (cursor != null)
            cursor.close();
    }
    return null;
}

我做错了什么?

最佳答案

 public static String getRealPathFromURI(Context context, Uri contentUri) {
    String[] proj = {MediaStore.Images.Media.DATA};
    Cursor cursor = context.getContentResolver().query(contentUri, proj, null, null, 
                                                                               null);
    if (cursor != null) {
        int column_index = 
        cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }
    return null;
}

关于Android Oreo 如何从 uri 获取真实路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52621451/

相关文章:

java - 从Handler迁移到ScheduledExecutorService进行调度

java - 在 Recyclerview 中显示来自具有多个值的 JSONobject 单个字符串的数据

iphone - 允许 iPhone 应用程序与 iTunes 同步

java - Android Oreo,wifiManager.getScanResults() 在 Doze 中返回空列表

android - Oreo (8.0) - 以编程方式删除短信

macos - Docker:OS X上不存在导出路径

git - 如何与团队共享 .env

android - 如何在不删除其 _ID 列值的情况下删除行?

android - flutter 如何检查 Map 是否为空?

java - MediaSessionCompat NullPointerException 仅适用于 Android 8