对码当歌,猿生几何?

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

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

new Thread(new Runnable() {@Overridepublic 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));
                    }//记得关闭cursorcursor.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 {//获取数据}

           

阅读更多