我想从Uri获取视频的文件路径。在使用真实设备进行测试时,以下方法可以正常工作,但是,在模拟器上进行测试时,它会失败(返回null)。
public String getRealPathFromURI(Context context, Uri contentUri) {
Cursor cursor = null;
try {
String[] proj = {MediaStore.Video.Media.DATA};
cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (cursor != null) {
cursor.close();
}
}
return null;
}
在模拟器上从uri获取文件路径的正确方法是什么?
答案 0 :(得分:2)
使用真实设备进行测试时,以下方法可以正常工作
仅适用于您尝试过的设备,仅适用于您尝试过的应用。特别是在Android 4.4+上,您的方法将不可靠。那是因为a Uri
is not a file。在旧版Android上,对于Uri
中的MediaStore
,您的方法可能会有效。
如今,请勿尝试获取Uri
的文件。按照Uri
上的方法使用ContentResolver
上的方法获取InputStream
,MIME类型等。{/ p>
在模拟器上从uri获取文件路径的正确方法是什么?
没有。没有与Uri
关联的文件路径,更不用说应用程序能够使用Java文件I / O访问的路径。
答案 1 :(得分:1)
正如CommonsWare所提到的,Uri不是文件。处理Uri的一般方法是使用输入流并将内容保存为文件(假设这是您正在寻找的)。我通常做的是
在此页面上查看“检查文档元数据”和“获取输入流”:https://developer.android.com/guide/topics/providers/document-provider.html