Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android Studio-尝试从Android设备上的音乐目录读取MP3文件_Java_Android Studio_Mediastore - Fatal编程技术网

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

Java Android Studio-尝试从Android设备上的音乐目录读取MP3文件,java,android-studio,mediastore,Java,Android Studio,Mediastore,我在下面有一个函数,我是从这里的一篇文章中得到的,我正在尝试从设备读取音乐文件 public List<AudioModel> getAllAudioFromDevice(final Context context) { final List<AudioModel> tempAudioList = new ArrayList<>(); Cursor c = getAllTracks(this); if

我在下面有一个函数,我是从这里的一篇文章中得到的,我正在尝试从设备读取音乐文件

   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, null);
        } else {
            return null;
        }
    }
公共列表

我也尝试了外部内容URI,但没有显示它们

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

对不起,我对Android Studio非常陌生,可能错过了一些非常明显的东西。有人能帮忙吗?

你的问题是

Uri uri = MediaStore.Audio.Media.INTERNAL_CONTENT_URI;
将此更改为

Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
并从中删除.DATA位 游标c=context.getContentResolver().query(uri、投影、MediaStore.Audio.Media.DATA、null、null)
当你把标准放在那里。查找查询的语法。将其设置为null,它将工作

这是我的方法,请注意

return cr.query(uri, columns, null, null, null)
而你有

  Cursor c = context.getContentResolver().query(uri, projection, MediaStore.Audio.Media.DATA, null, 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, columns, null, null, null);
        } else {
            return null;
        }
    }

我还添加到了清单文件。看起来不错,请尝试重新启动avd,因为这将确保新的媒体扫描。如果你只是上传了它们,那么设备可能不知道新的mediaHi-Theo,我已经尝试过了,但它仍然没有接收到它们。在模拟器上,我可以看到存储中的音乐文件,因此看起来设备正在检测它们。也可以查询BUCKET\u NAME。将一些文件直接放入music dir。不幸的是,这也不起作用。后来我对代码做了很多修改,并将用我现在的代码进行更新,这些代码基本上是从其他人的博客上获取的。我用不同的功能进行了编辑,我在不同的博客文章中尝试了不同的功能。这与我最初发布的内容不同,但也不起作用。“Music count”日志始终为0,无论它是内部的还是外部的。如果Music count=0,则数据库中没有.mp3文件。你试过我的播放列表管理器建议了吗?这肯定会告诉你媒体数据库中是否有曲目。我的代码在过去的5年里一直运行良好,所以如果你坚持使用它,它会工作的。我修改了我的代码以反映你的答案,并编辑了这篇文章以显示它现在的样子。我很抱歉,因为我对Android开发非常、非常陌生。我不知道你说的“播放列表管理器”是什么意思。对不起,这是我对Android开发缺乏了解,我在业余时间才做了一个月。如果可以的话,你能举例说明吗?播放列表管理器是我在谷歌play上的应用程序。它是免费的,所以下载它,看看它生产了什么希西奥,非常感谢,我会试试,让你知道它是否有效。希望明天我能更新,我会让你保持更新。嗨,西奥,我已经修改了代码,加入了你的建议,但仍然是一样的。我已经更新了我的问题,以反映根据您的建议所做的更改。记录时计数的值仍然是“showing 2020-09-04 07:24:39.559 15448-15448/com.example.musicbox D/count::0”。不过,我不确定我是否正确地执行了你的建议。我是Java和Android Studio的新手,所以我可能没有得到您的正确答案。您没有检索到正确的列。路径不是位置0,名称不是位置1。使用colmnindex而不是hardcodingI将尝试,但由于计数值为0,这是否意味着它甚至没有找到任何可以检索列的内容?