到底下载到哪个目录的视频音频才能被MediaStore读出来?

我是小米手机,最近在研究读取下载的音视频文件。
me是个大老粗,平时也不听歌什么的,写程序是临时通过微信的“文件传输助手”下载了几个mp3,结果什么也没读出来。

权限我写的是

  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

读取文件的代码如下

   @SuppressLint("Range")
    private void loadLocalMusicData() {
        /* 加载本地存储当中的音乐mp3文件到集合当中*/
//        1.获取ContentResolver对象
        ContentResolver resolver = getContentResolver();
//        2.获取本地音乐存储的Uri地址
//        MediaStore.Video.Media.EXTERNAL_CONTENT_URI 获取视频
//        MediaStore.Images.Media.EXTERNAL_CONTENT_URI //获取图片
        Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
//        3 开始查询地址
        Cursor cursor = resolver.query(uri, null, null, null, null);
//        4.遍历Cursor
        int id = 0;
        Log.d("LKFTAG", "loadLocalMusicData");
        while (cursor.moveToNext()) {
            Log.d("LKFTAG", "cursor.moveToNext():");

            String song = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));//歌曲标题
            String singer = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));//歌手
            String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));//专辑
            id++;
            String sid = String.valueOf(id);
            String path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));//路径
            long duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));//时长
            SimpleDateFormat sdf = new SimpleDateFormat("mm:ss");
            String time = sdf.format(new Date(duration));
//          获取专辑图片主要是通过album_id进行查询
            String album_id = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
            String albumArt = getAlbumArt(album_id);
//            将一行当中的数据封装到对象当中
            LocalMusicBean bean = new LocalMusicBean(sid, song, singer, album, time, path,albumArt);
            mDatas.add(bean);
        }
//        数据源变化,提示适配器更新
        adapter.notifyDataSetChanged();
    }
    private String getAlbumArt(String album_id) {
        String mUriAlbums = "content://media/external/audio/albums";
        String[] projection = new String[]{"album_art"};
        Cursor cur = this.getContentResolver().query(
                Uri.parse(mUriAlbums + "/" + album_id),
                projection, null, null, null);
        String album_art = null;
        if (cur.getCount() > 0 && cur.getColumnCount() > 0) {
            cur.moveToNext();
            album_art = cur.getString(0);
        }
        cur.close();
        cur = null;
        return album_art;
    }

该回答引用GPT与博主@晓码自在合作编写:
根据您提供的代码和描述,读取本地音乐文件失败的原因可能有:

  1. 权限设置不正确。虽然您申请了WRITE_EXTERNAL_STORAGE权限,但还需要同时申请READ_EXTERNAL_STORAGE权限才能读取外部存储文件。
  2. ContentProvider查询不正确。查询MediaStore的时候,需要指定正确的uri、projection等参数,否则无法获取音乐文件信息。
  3. 文件路径不正确。通过ContentProvider查询得到的文件路径可能不正确或不完整,导致无法使用该路径读取文件。
  4. 文件格式不支持。如果尝试读取的音乐文件格式不支持,也会导致读取失败。
    要解决这个问题,您可以:
  5. 同时申请READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限。如:
xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

  1. 查看MediaStore的uri和projection参数是否正确。例如:
java
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;  
String[] projection = {MediaStore.Audio.Media._ID, MediaStore.Audio.Media.TITLE};  

  1. 获取文件的路径时,调用getFile()确认路径完整性,如:
java
String filePath = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
File file = new File(filePath);
if (file.exists()) {
    // 路径正确,可以读取文件
} else {
    // 路径不正确,结束流程
}

  1. 确认尝试读取的音乐文件格式是否支持,常见格式 mp3、aac等。如果格式不支持,需要另寻解决方案。