小编and*_*ner的帖子

在Android Kitkat中从Uri获取路径会引发非法参数异常

我正试图从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)

video android cursor mediastore android-contentresolver

2
推荐指数
1
解决办法
2016
查看次数