您需要使用內容解析器。
Uri uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
// Perform a query on the content resolver. The URI we're passing specifies that we
// want to query for all audio media on external storage (e.g. SD card)
Cursor cur = contentResolver.query(uri, null,
MediaStore.Audio.Media.IS_MUSIC + " = 1", null, null);
if (cur == null) {
Log.e(TAG, "Failed to retrieve music: cursor is null :-(");
subscriber.onError(new Throwable("Failed to retrieve music: cursor is null :-("));
return;
}
if (!cur.moveToFirst()) {
subscriber.onError(new Throwable("No results. :(Add some tracks!"));
Log.e(TAG, "Failed to move cursor to first row (no query results).");
return;
}
int artistColumn = cur.getColumnIndex(MediaStore.Audio.Media.ARTIST);
int titleColumn = cur.getColumnIndex(MediaStore.Audio.Media.TITLE);
int albumColumn = cur.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID);
int durationColumn = cur.getColumnIndex(MediaStore.Audio.Media.DURATION);
int idColumn = cur.getColumnIndex(MediaStore.Audio.Media._ID);
int dataColumn = cur.getColumnIndex(MediaStore.Audio.Media.DATA);
ArrayList<LocalTrack> tracks = new ArrayList<>();
do {
Log.i(TAG, "ID: " + cur.getString(idColumn) + " Title: " + cur.getString(titleColumn));
tracks.add(new LocalTrack(
cur.getLong(idColumn),
cur.getString(artistColumn),
cur.getString(titleColumn),
cur.getLong(albumColumn),
cur.getLong(durationColumn),
cur.getString(dataColumn)));
} while (cur.moveToNext());
Log.i(TAG, "Done querying media. MusicRetriever is ready.");
cur.close();
for (LocalTrack localTrack : tracks) {
localTrack.setArtPath(findAlbumArt(localTrack));
}
subscriber.onNext(tracks);
public String findAlbumArt(LocalTrack localTrack) {
Cursor cursor = contentResolver.query(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
new String[]{MediaStore.Audio.Albums._ID, MediaStore.Audio.Albums.ALBUM_ART},
MediaStore.Audio.Albums._ID + "=?",
new String[]{String.valueOf(localTrack.getAlbum())},
null);
String path = null;
if (cursor != null) {
if (cursor.moveToFirst()) {
path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART));
// do whatever you need to do
cursor.close();
}
}
return path;
}
謝謝。我會嘗試 –
如果你想看到所有的項目:https://github.com/joxad/zikobot 你可以使用的部分:https://github.com/joxad/zikobot/blob/master/ app/src/main/java/com/startogamu/zikobot/module/content_resolver/manager/LocalMusicManager.java 它使用匕首2,但您應該可以將其更新爲您的需要 – Joxad
謝謝。我會盡力 –