0
我知道媒體藝術品存儲在相冊下,並且要獲取它們,您需要擁有相冊ID才能訪問它。我已經能夠使用專輯ID獲取曲目和專輯的圖像。從Android MediaStore中加載藝術家以及藝術品
但是對於藝術家表格沒有專輯ID字段。 Play Music和Poweramp等其他應用程序可以獲取曲目圖片並將其添加到相應的藝術家。
我該如何做到這一點?
我知道媒體藝術品存儲在相冊下,並且要獲取它們,您需要擁有相冊ID才能訪問它。我已經能夠使用專輯ID獲取曲目和專輯的圖像。從Android MediaStore中加載藝術家以及藝術品
但是對於藝術家表格沒有專輯ID字段。 Play Music和Poweramp等其他應用程序可以獲取曲目圖片並將其添加到相應的藝術家。
我該如何做到這一點?
我這樣做是讓所有專輯的藝術家,然後使用RND函數返回一個ALBUMID方式:
String artist_id = c.getString(c.getColumnIndex(MediaStore.Audio.Artists._ID));
Cursor crs = album.getArtistsAlbumcursor(mContext, artist_id);
if(crs!=null && crs.moveToFirst()) {
Random rn = new Random();
int rnd = rn.nextInt(crs.getCount());
crs.moveToPosition(rnd);
album_id = crs.getLong(crs.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
crs.close();
}
其中getArtistsAlbumcursor是:
public Cursor getArtistsAlbumcursor(Context context, String artistId) {
ContentResolver cr = context.getContentResolver();
final String _id = MediaStore.Audio.Media._ID;
final String album_id = MediaStore.Audio.Media.ALBUM_ID;
final String artistid = MediaStore.Audio.Media.ARTIST_ID;
final String[] columns = { _id, album_id, artistid };
String where = artistid +" =?";
String[] aId = {artistId};
return cr.query(uri, columns, where, aId, null);
}
一旦你有一個albumid你可以使用你原來的方法來獲得你的albumart。
或者
如果你想從MP3的albumart跟蹤本身,你將需要實現一個libary如jaudiotagger或org.blinkenlights.jid3.v2。
生活變得更復雜一些,但低於如何從使用JID3庫中的MP3標籤albumart得到:
try {
bmp = getmp3AlbumArt(sourceFile);
} catch (Exception e) {
e.printStackTrace();
}
其中getmp3Albumart是:
public Bitmap getmp3AlbumArt(File SourceFile) throws Exception {
Bitmap bmp = null;
arrayByte = null;
APICID3V2Frame frames[];
MediaFile MediaFile = new MP3File(SourceFile);
try {
Object obj = null;
obj = MediaFile.getID3V2Tag();
if (obj != null) {
tagImage = (org.blinkenlights.jid3.v2.ID3V2_3_0Tag) obj;
if ((tagImage != null) && (arrayByte == null) && (tagImage.getAPICFrames() != null) && (tagImage.getAPICFrames().length > 0)) {
frames = tagImage.getAPICFrames();
for (int i = 0; i < tagImage.getAPICFrames().length; i++) {
if (frames[i] != null) {
arrayByte = frames[i].getPictureData();
break;
}
}
}
}
} catch (ID3Exception | OutOfMemoryError e) {
e.printStackTrace();
}
if (arrayByte != null) {
try {
bmp = BitmapFactory.decodeByteArray(arrayByte, 0, arrayByte.length);
} catch (Exception|OutOfMemoryError e) {
e.printStackTrace();
}
}
return bmp;
}