在Android 4.4 (KitKat) 中的新图库访问之前,我使用这种方法在 SD 卡上获得了我的真实路径:
public String getPath(Uri uri) { String[] projection = { MediaStore.Images.Media.DATA }; Cursor cursor = managedQuery(uri, projection, null, null, null); startManagingCursor(cursor); int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); }
现在,Intent.ACTION_GET_CONTENT 返回不同的数据:
前:
content://media/external/images/media/62
现在:
content://com.android.providers.media.documents/document/image:62
我怎样才能设法获得 SD 卡上的真实路径?
您可以使用 URI 来获取documentid,然后查询MediaStore.Images.Media.EXTERNAL_CONTENT_URI或MediaStore.Images.Media.INTERNAL_CONTENT_URI(取决于 SD 卡的情况)。
documentid
MediaStore.Images.Media.EXTERNAL_CONTENT_URI
MediaStore.Images.Media.INTERNAL_CONTENT_URI
要获取文档 ID:
// Will return "image:x*" String wholeID = DocumentsContract.getDocumentId(uriThatYouCurrentlyHave); // Split at colon, use second item in the array String id = wholeID.split(":")[1]; String[] column = { MediaStore.Images.Media.DATA }; // where id is equal to String sel = MediaStore.Images.Media._ID + "=?"; Cursor cursor = getContentResolver(). query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, column, sel, new String[]{ id }, null); String filePath = ""; int columnIndex = cursor.getColumnIndex(column[0]); if (cursor.moveToFirst()) { filePath = cursor.getString(columnIndex); } cursor.close();
参考:我无法找到该解决方案的来源。我想请原始海报在这里投稿。今晚会再看一些。