Android Studio-尝试从Android设备上的音乐目录中读取MP3文件

问题描述

下面有一个功能,我从这里的帖子中获得了该功能,我正尝试从设备中读取音乐文件

   public List<AudioModel> getAllAudioFromDevice(final Context context) {
        final List<AudioModel> tempAudioList = new ArrayList<>();
        Cursor c = getAllTracks(this);


        if (c != null) {
            Log.d("Count :",String.valueOf(c.getCount()));
            while (c.movetoNext()) {
                AudioModel audioModel = new AudioModel();
                String path = c.getString(0);
                String name = c.getString(1);
                String album = c.getString(4);

                audioModel.setaAlbum(album);
                audioModel.setaArtist(artist);
       
                Log.e("Name :" + name," Album :" + album);
                Log.e("Path :" + path," Artist :" + artist);

                tempAudioList.add(audioModel);
            }
            c.close();
        } else {
            Log.d("Name :","No Music");
        }

        return tempAudioList;
    }

    public Cursor getAllTracks(Context context) {
        // gets all tracks
        if (context != null) {
            ContentResolver cr = context.getContentResolver();
            final String[] columns = {track_id,track_no,artist,track_name,album,duration,path,year,composer};
            return cr.query(uri,columns,null,null);
        } else {
            return null;
        }
    }

当我运行该应用程序时,它没有列出任何MP3文件,但会拾取oog文件。我上传到模拟器的mp3文件如下所示:

Emulator storage image one

Emulator storage image two

我也尝试过EXTERNAL_CONTENT_URI,但是不会显示它们。

这是Theo建议的“播放列表管理器”应用中的

enter image description here

抱歉,我是Android Studio的新手,可能缺少一些非常明显的东西。有人可以帮忙吗?

解决方法

您的问题是

Uri uri = MediaStore.Audio.Media.INTERNAL_CONTENT_URI;

将此更改为

Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;

,并从中删除.DATA位 游标c = context.getContentResolver()。query(uri,projection,MediaStore.Audio.Media.DATA,null,null) 当您在此处输入标准时。查找查询的语法。将其设置为null即可使用

,

这是我的方法,请注意

的语法
return cr.query(uri,columns,null,null)

您有

  Cursor c = context.getContentResolver().query(uri,projection,MediaStore.Audio.Media.DATA,null);



 private final String track_id = MediaStore.Audio.Media._ID;
    private final String track_no = MediaStore.Audio.Media.TRACK;
    private final String track_name = MediaStore.Audio.Media.TITLE;
    private final String artist = MediaStore.Audio.Media.ARTIST;
    private final String artist_id = MediaStore.Audio.Media.ARTIST_ID;
    private final String duration = MediaStore.Audio.Media.DURATION;
    private final String album = MediaStore.Audio.Media.ALBUM;
    private final String composer = MediaStore.Audio.Media.COMPOSER;
    private final String year = MediaStore.Audio.Media.YEAR;
    private final String path = MediaStore.Audio.Media.DATA;
    private final String date_added = MediaStore.Audio.Media.DATE_ADDED;
    private final Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;


        public Cursor getAllTracks(Context context) {
        // gets all tracks
        if (context != null) {
            ContentResolver cr = context.getContentResolver();
            final String[] columns = {track_id,track_no,artist,track_name,album,duration,path,year,composer};
            return cr.query(uri,null);
        } else {
            return null;
        }
    }