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,这是否意味着它甚至没有找到任何可以检索列的内容?