如何从 FileProvider URI 获取真实路径?

pro*_*lav 6 java android uri

我有这个解码content://URI的代码:

Cursor cursor = null;
try {
    cursor = context.getContentResolver().query(contentUri,
                     new String[] { MediaStore.Files.FileColumns.DATA },
                     null, null, null);

    int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATA);
    cursor.moveToFirst();

    return cursor.getString(columnIndex);

} finally {
    if (cursor != null) {cursor.close()};
}
Run Code Online (Sandbox Code Playgroud)

但它不适用于FileProviderURI(例如下载文件的 Chrome Dev URI:)content://com.chrome.dev.FileProvider/downloads/。有没有办法获得真正的路径?

Son*_*pta 0

尝试这个:

@TargetApi(19)
 private static String generatePath(Uri uri,Context context){
    String filePath = null;
    if(DocumentsContract.isDocumentUri(context, uri)){
        String wholeID = DocumentsContract.getDocumentId(uri);

        String id = wholeID.split(":")[1];

        String[] column = { MediaStore.Video.Media.DATA };
        String sel = MediaStore.Video.Media._ID + "=?";

        Cursor cursor = context.getContentResolver().
                query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
                        column, sel, new String[]{ id }, null);



        int columnIndex = cursor.getColumnIndex(column[0]);

        if (cursor.moveToFirst()) {
            filePath = cursor.getString(columnIndex);
        }

        cursor.close();
    }
    return filePath;
}
Run Code Online (Sandbox Code Playgroud)