lkf181 2023-05-20 01:18 采纳率: 86.5%
浏览 30
已结题

到底下载到哪个目录的视频音频才能被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;
    }

  • 写回答

1条回答 默认 最新

  • @晓码自在 2023-05-23 01:05
    关注

    该回答引用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等。如果格式不支持,需要另寻解决方案。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月6日
  • 已采纳回答 7月6日
  • 修改了问题 5月20日
  • 修改了问题 5月20日
  • 展开全部

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测