2017-03-03 6 views
0

メディアアートワークはアルバムの下に保存されており、アルバムにアクセスするにはアルバムIDを取得する必要があることを知っています。アルバムIDを使ってトラックとアルバムの画像を取得できました。アートワークと一緒にAndroid MediaStoreからアーティストをロードする

ただし、アーティストテーブルの場合、アルバムIDフィールドはありません。 Play MusicやPowerampなどの他のアプリは、トラックアートワークを手に入れてそれぞれのアーティストに追加することができます。

これはどのように達成できますか?

答えて

0

私はそれを行う方法は、アーティストのすべてのアルバムを取得し、ALBUMIDを返すためにRnd関数を使用することです:

getArtistsAlbumcursorがある
  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(); 
    } 

 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を取得したい場合、あなたは、このようなjaudiotaggerやorg.blinkenlights.jid3.v2などlibaryを実装する必要があります。

  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; 
} 
JID3ライブラリを使用してmp3タグからalbumart取得する方法を

人生はもう少し複雑なく、下になります

関連する問題