我正在尝试将应用程序的内部存储和外部存储中的所有歌曲列为列表视图。我使用以下代码来获取歌曲
firstname
上述代码成功获取外部存储器中的所有歌曲,但未获取存储在内部存储器中的歌曲。这是三星Galaxy S8等没有外部存储设备的问题。 我也用下面的uri
尝试了光标ContentResolver musicResolver = getContentResolver();
Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null);
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);
int durationColumn=musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.DURATION);
do {
try {
long thisId = musicCursor.getLong(idColumn);
String thisTitle = musicCursor.getString(titleColumn);
String thisArtist = musicCursor.getString(artistColumn);
String duration = musicCursor.getString(durationColumn);
if (!thisArtist.equalsIgnoreCase("<unknown>")) {
//save track
}
} catch (Exception e) {
}
}
while (musicCursor.moveToNext());
这会让我获取设备铃声和短信铃声,这不是我需要的。
我在StackOverflow中遇到过类似的问题,那里的答案并没有为我解决这个问题。
请帮忙。 感谢。
答案 0 :(得分:0)
我认为EXTERNAL这个词令人困惑。它用于解决内部存储器问题 扫描过程会将您的所有音乐输入媒体数据库,无论是在内部媒体还是外部媒体上(只需确保文件夹中没有隐藏的.nomedia文件)。下面的代码应该返回所有音乐。如果没有,那么我怀疑你的媒体数据库没有完全填充。
public Cursor getAllTracks(Context context) {
// gets all tracks
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
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);
}
答案 1 :(得分:0)
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String selection = MediaStore.Audio.Media.IS_MUSIC + "!=0";
Cursor cursor = getContentResolver().query(uri, null, selection, null, null);
if (cursor != null) {
if (cursor.moveToFirst()) {
do {
String name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
String url = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
SongInfo s = new SongInfo(name, artist, url);
_songs.add(s);
} while (cursor.moveToNext());
}
cursor.close(); }