获取Android设备上的视频及音乐

本文介绍如何使用ContentResolver从Android设备上获取音频和视频文件,包括实现步骤和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想要获取当前Android设备上的音频或视频文件,需要用到ContentResolver(内容解析器),系统通过ContentProvider(内容提供者)对外开放了这些数据。一般我们获取到这些数据需要进行如下操作:

new Thread(new Runnable() {
            @Override
            public void run() {
                array = new ArrayList<>();
                //获取ContentResolver实例
                ContentResolver resolver = getContentResolver();
                //需要查询的内容,名称,时长,大小,路径,演唱者等
                String[] strs = {MediaStore.Video.Media.DISPLAY_NAME, MediaStore.Video.Media.DURATION,
                        MediaStore.Video.Media.SIZE, MediaStore.Video.Media.DATA, MediaStore.Video.Media.ARTIST};
                //查询路径(此处为外部路径)
                Uri uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
                //开始查询,查询结果是一个cursor对象
                Cursor cursor = resolver.query(uri, strs, null, null, null);
                //若查询的Uri不存在,则cursor为空,所以要做非空判断
                if (cursor != null) {
                    while (cursor.moveToNext()) {
                        //MediaItem 用来存储这些信息的数据模型
                        MediaItem item = new MediaItem();
                        array.add(item);
                        item.setName(cursor.getString(0));
                        item.setDuration(cursor.getLong(1));
                        item.setSize(cursor.getLong(2));
                        item.setData(cursor.getString(3));
                        item.setArtist(cursor.getString(4));
                    }
                    //记得关闭cursor
                    cursor.close();
                }
                //通知UI线程更新列表
                mHandler.sendEmptyMessage(1);
            }
        }).start();
特别注意
  • 查询操作是一个耗时操作,所以需要把它放到子线程中,查询完成后通过Handler发送给主线程更新UI
  • Android6.0需要动态请求权限 Manifest.permission.WRITE_EXTERNAL_STORAGE
if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
        } else {
            //获取数据
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值