簡體   English   中英

從 data.getData() 類型的 URI 獲取真實路徑 file:///storage/emulated/0/LenovoReaper/did

[英]get real path from URI of type data.getData() file:///storage/emulated/0/LenovoReaper/did

當我選擇文件並嘗試獲取其真實路徑時,我的應用程序將進入ANR 我的

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

但如果我選擇任何媒體文件(如圖像),同樣的事情也能正常工作。

適用於data.getData() = content://media/external/images/media/22555 real path

真實路徑是/storage/emulated/0/DCIM/20150406_210053.jpg

對於非媒體文件,它會轉到ANR

data.getData() file:///storage/emulated/0/LenovoReaper/did

沒有返回任何內容,應用程序轉到ANR 有人可以建議如何獲取此類URI真實路徑,還是我應該從data.getData()刪除file://

要打開圖庫,請使用以下代碼:

Intent intent = new Intent();
                        intent.setType("image/*");
                        intent.setAction("android.intent.action.PICK");
                        startActivityForResult(intent, PICK_IMAGE_REQUEST);

在 onActivityResult 中:

if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK
                && data != null && data.getData() != null) {  
   String absolutePath = "file://" + getPath(this,data.getData());  
            
        }

和 getPath 函數:

public static String getPath( Context context, Uri uri ) {
    String result = null;
    String[] proj = { MediaStore.Images.Media.DATA };
    Cursor cursor = context.getContentResolver( ).query( uri, proj, null, null, null );
    if(cursor != null){
        if ( cursor.moveToFirst( ) ) {
            int column_index = cursor.getColumnIndexOrThrow( proj[0] );
            result = cursor.getString( column_index );
        }
        cursor.close( );
    }
    if(result == null) {
        result = "Not found";
    }
    Log.d(TAG, "onActivityResult: file://"+result);
    return result;
}

它將為您提供圖像的絕對路徑,例如“file:///storage/emulated/0/LenovoReaper/did”

有人可以建議如何獲取此類 URI 的真實路徑

除了Uri本身之外,沒有“真正的路徑”。

我應該從 data.getData() 中刪除 file://

那對你沒有任何好處。

一個Uri不是一個File 不需要任何Uri必須指向您可以訪問的文件。 如果您想訪問由Uri表示的數據,請使用ContentResolver方法,例如openInputStream()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM