2017-10-21 335 views
1

我正在測試nexus 5上的應用程序,它有Android的棉花糖版本。我看了幾種方法從uri獲取文件路徑,但一直返回null。這種方法適用於果凍豆,也適用於kitkat,但不適用於棉花糖。無法從android中獲取URI的文件路徑M

public String getPath(Uri uri) { 
     Log.d(TAG,"Uri GET PATH "+uri); 
     String[] projection = {MediaStore.Images.Media.DATA}; 
     Cursor cursor = context.getContentResolver().query(uri, projection, null, null, null); 
     Log.d(TAG,"Cursor value "+cursor); 
     int Column_Index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
     Log.d(TAG,"Column Index "+Column_Index); 
     cursor.moveToFirst(); 
     String ImagePath = cursor.getString(Column_Index); 
     Log.d(TAG,"ImagePath of "+ImagePath); 
     cursor.close(); 
     return ImagePath; 
    } 

我也試過thisthis也這麼多的人,但是從URI獲取文件路徑始終爲空。

從意向

烏里回報:內容:// com.android.providers.media.documents /文檔/圖片%3A2304`

+0

你想要什麼文件Uri?從相機?從畫廊? –

+0

從相機,也從畫廊 – Ritu

回答

3

我看着幾個方法從URI獲取文件路徑,但所有的它返回空值

沒有文件路徑。 A Uri不是一個文件。

使用ContentResolveropenInputStream()得到Uri標識的內容InputStream。直接使用InputStream,或者在您控制的某個文件(如getCacheDir())上使用它和FileOutputStream將內容複製到文件中,然後使用生成的文件。

+0

但我正在越來越文件路徑kitkat和以下的Android版本 – Ritu

+0

@Ritu:對於一些設備型號,以及在這些設備型號的一些應用程序,也許。但是,您的方法從來不可靠,而且在較新的設備上不常用。 – CommonsWare

+0

那麼我怎樣才能使代碼適合所有設備和操作系統版本 – Ritu