系统资源管理器选择文件返回URI 7.0以上cursor查询报错

Cursor cursor = cr.query(suri, projection, selection, selectionArgs, null);

查询不能直接传入返回的URI, 否则报错查询不到.   此次方案为通过id查询 .

先编辑好搜索语句

                     Uri suri = null;
                    String selection = null;
                    String[] selectionArgs = null;
                    String column = "_data";;
                    String[] projection = null;

                    if (DocumentsContract.isDocumentUri(this, uri)) {
                        String docId = DocumentsContract.getDocumentId(uri);
                        suri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
                        String[] split = docId.split(":");
                        String type = split[0];
                        selection = "_id=?";
                        selectionArgs = new String[]{
                                split[1]
                        };
//                        projection = new String[]{
//                                column
//                        };
                    } else {
                        suri = uri;
                    }

通过查询返回的id键位查询其他参数

                    ContentResolver cr = this.getContentResolver();
                    Cursor cursor = cr.query(suri, projection, selection, selectionArgs, null);
                    if (cursor != null) {
                        if (cursor.moveToFirst()) {
                            cursor.getString(cursor.getColumnIndexOrThrow(column));
                            // 视频ID:MediaStore.Audio.Media._ID
//                            videoId = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media._ID));
                            // 视频名称:MediaStore.Audio.Media.TITLE
                            title = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.TITLE));
                            // 视频路径:MediaStore.Audio.Media.DATA
                            videoPath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA));
                            // 视频时长:MediaStore.Audio.Media.DURATION
                            duration = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION));
                            // 视频大小:MediaStore.Audio.Media.SIZE
//                            size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE));

//                            // 视频缩略图路径:MediaStore.Images.Media.DATA
//                            String imagePath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA));
//                            // 缩略图ID:MediaStore.Audio.Media._ID
//                            int imageId = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID));
//                            // 方法一 Thumbnails 利用createVideoThumbnail 通过路径得到缩略图,保持为视频的默认比例
//                            // 第一个参数为 ContentResolver,第二个参数为视频缩略图ID, 第三个参数kind有两种为:MICRO_KIND和MINI_KIND 字面意思理解为微型和迷你两种缩略模式,前者分辨率更低一些。
//                            Bitmap bitmap1 = MediaStore.Video.Thumbnails.getThumbnail(cr, imageId, MediaStore.Video.Thumbnails.MICRO_KIND, null);
//                            // 方法二 ThumbnailUtils 利用createVideoThumbnail 通过路径得到缩略图,保持为视频的默认比例
//                            // 第一个参数为 视频/缩略图的位置,第二个依旧是分辨率相关的kind
//                            Bitmap bitmap2 = ThumbnailUtils.createVideoThumbnail(imagePath, MediaStore.Video.Thumbnails.MICRO_KIND);
//                            // 如果追求更好的话可以利用 ThumbnailUtils.extractThumbnail 把缩略图转化为的制定大小
                        ThumbnailUtils.extractThumbnail(bitmap, width,height ,ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
                        }
                        cursor.close();
                    }

参考链接https://blog.csdn.net/tracydragonlxy/article/details/103510083?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_v2~rank_aggregation-9-103510083.pc_agg_rank_aggregation&utm_term=android+column+does+exist+not&spm=1000.2123.3001.4430

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值