我正在尝试获取手机上所有歌曲的所有音乐文件。我正在使用mediastore来获取所有歌曲标题,艺术家等。我应该如何获取所有音乐文件? 活动类:
public void getSongList() {
//query external audio
ContentResolver musicResolver = getContentResolver();
Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null);
//iterate over results if valid
if (musicCursor != null && musicCursor.moveToFirst()) {
//get columns
int titleColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media.TITLE);
int idColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media._ID);
int artistColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media.ARTIST);
//add songs to list
do {
long thisId = musicCursor.getLong(idColumn);
String thisTitle = musicCursor.getString(titleColumn);
String thisArtist = musicCursor.getString(artistColumn);
songList.add(new Song(thisId, thisTitle, thisArtist));
}
while (musicCursor.moveToNext());
}
}
答案 0 :(得分:3)
我也遇到了和你一样的问题。现在我只用下面的代码来解决这个问题。
/**
* It Not used AnyWhere in Project but it's Helpful while you need to get all mp3 file in sdcard.
* it's nothing but just for future used
*
*/
public void getAllSongs() {
Uri allsongsuri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";
String[] STAR=null;
Cursor cursor = getActivity().managedQuery(allsongsuri, STAR, selection, null, null);
//or
//Cursor cursor = getActivity().getContentResolver().query(allsongsuri, null, null, null, selection);
if (cursor != null) {
if (cursor.moveToFirst()) {
do {
String song_name = cursor
.getString(cursor
.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
int song_id = cursor.getInt(cursor
.getColumnIndex(MediaStore.Audio.Media._ID));
String fullpath = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
String Duration = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));
Log.e(TAG, "Song Name ::"+song_name+" Song Id :"+song_id+" fullpath ::"+fullpath+" Duration ::"+Duration);
} while (cursor.moveToNext());
}
cursor.close();
}
}
此代码在我的应用程序中工作正常。在此代码中,我们只在日志中打印整个歌曲路径及其名称。但您太聪明,因此您可以根据您的要求更改此代码。
我希望你清楚我的想法。 最好的运气