2017-10-21 156 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