AndroidでアルバムThumbnailsを入手するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/3438809

  •  27-09-2019
  •  | 
  •  

質問

私はこれを使用したアルバムのリストを持っています:

private List<Album> getAlbums() {
Cursor cur = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, null);
  List<Album> albums = new ArrayList<Album>();

  if (cur.moveToFirst()) {
   do {
    int albumIdIndex = cur.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID);
    int albumIndex = cur.getColumnIndex(MediaStore.Audio.Media.ALBUM);
    int artistIndex = cur.getColumnIndex(MediaStore.Audio.Media.ARTIST);
    int albumId = cur.getInt(albumIdIndex);
    String name = cur.getString(albumIndex);
    String artist = cur.getString(artistIndex);
    LogUtil.i(TAG, "albumid= " + albumId + ", album= " + name + ", artist=" + artist);

    Album album = new Album(albumId, name, artist);
    if (!albums.contains(album)) {
     albums.add(album);
    }    
   } while (cur.moveToNext());

  }

  return albums;
 }

私はこのアルバムのリストをListActivityで使用していますが、アルバムのサムネイルも入手したいと思っています。

次のコードを使用して実際のアートワークを取得できることは知っていますが、リストアクティビティで完全な画像を使用するとメモリから抜け出すため、サムネイルが必要です。

Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");
Uri uri = ContentUris.withAppendedId(sArtworkUri, album_id);

私はこの投稿を見ました:Androidメディアサムネイル。深刻な問題?しかし、私はImageIdを持っていない、アルバムのみを持っているので、それが役立つとは思わない。

役に立ちましたか?

解決

各アルバムアートを取得し、bitmap.createScaledBitmap()を使用して新しいバージョンを作成し、それを使用して、古いビットマップを使用してメモリを消去し、次の画像に移動します。 Hashmapなどを保持して、同じアルバムアートを2回以上ロードしないようにします(複数のトラックが同じアルバムArt ID、Cache itを使用します。

うまく機能するはずです。 (私のために働く)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top