小编典典

从URI获取真实路径,Android KitKat新的存储访问框架

all

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 卡上的真实路径?


阅读 67

收藏
2022-06-25

共1个答案

小编典典

您可以使用 URI 来获取documentid,然后查询MediaStore.Images.Media.EXTERNAL_CONTENT_URIMediaStore.Images.Media.INTERNAL_CONTENT_URI(取决于
SD 卡的情况)。

要获取文档 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();

参考:我无法找到该解决方案的来源。我想请原始海报在这里投稿。今晚会再看一些。

2022-06-25