我正试图从uri那里得到路径.它适用于kitkat以下的设备.我用Google搜索,发现我需要获取文档ID,然后使用库项目查询它.它有效.但我面临视频问题.当我从视频部分选择视频时,它可以正常工作.但是当我从Gallery中选择它时,我的应用程序崩溃了,给出了Illegal Argument异常 - 不是文档类型.我知道为什么会这样.这是因为我在Gallery部分中寻找文档类型的视频.但是如何防止这种情况.这样我就可以从图库和视频部分中选择视频.
这是我的代码:
public static String getRealPathFromURI(Context context, Uri contentUri,String type) {
if(isKitkatBelow()) {
String[] proj = { MediaStore.Images.Media.DATA };
Cursor 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);
}else{
String docId= DocumentsContract.getDocumentId(contentUri);
String id= docId.split(":")[1];
if(type== TYPE_IMAGE){
String[] proj = { MediaStore.Images.Media.DATA };
String whereClause=MediaStore.Images.Media._ID + "=?";
Cursor cursor=context.getContentResolver().query(getUri(type),proj,whereClause,new String[]{id},null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}else{
String[] proj = { MediaStore.Video.Media.DATA };
String whereClause=MediaStore.Video.Media._ID + "=?";
Cursor cursor=context.getContentResolver().query(getUri(type),proj,whereClause,new String[]{id},null); …Run Code Online (Sandbox Code Playgroud)