我正在测试nexus 5上的app,它有marshmallow版本的android。我看了几个方法来从uri获取文件路径,但它一直返回null。这种方法适用于果冻豆和kitkat,但不适用于棉花糖。
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;
}
我也尝试了this this以及其他许多人,但是从uri获取文件路径始终为空。
Uri从Intent返回:content:// com.android.providers.media.documents / document / image%3A2304`
答案 0 :(得分:3)
我研究了几种从uri获取文件路径的方法,但它总是返回null
没有文件路径。 Uri
不是文件。
使用ContentResolver
和openInputStream()
获取InputStream
标识的内容Uri
。要么直接使用InputStream
,要么在您控制的某个文件上使用FileOutputStream
(例如,在getCacheDir()
中)将内容复制到文件中,然后使用生成的文件。