ContentProvideで取得したアルバムアートのパスから画像を表示したい

970 views
Skip to first unread message

raipon

unread,
May 27, 2012, 1:39:59 AM5/27/12
to android-g...@googlegroups.com
こちらのトピックを参考にさせていただいてアルバムアートのパスの取得まではいけたんですが
1,メディアスキャン
2,ContentProviderでアルバムアートのパスを取得
3,パスからbitmapを作り、ImageViewにset
とやってもアルバムアートは表示されません

http://techbooster.org/android/multimedia/3125/のサイトのやり方に変えようとも思ったのですがAndroid2.3以上しか使えないので諦めました

どうにかアルバムアートを取得する方法はないでしようか?

MORIHIRO

unread,
May 27, 2012, 8:30:09 AM5/27/12
to android-g...@googlegroups.com
どのくらいまで古いバージョンで動作する方法なのか未確認ですが、
以下のFroyo(Android 2.2)のMusicアプリのソースコードを参考にしてみては?

 http://tools.oesf.biz/android-2.2_r1.1/xref/packages/apps/Music/src/com/android/music/MusicUtils.java
 private static Bitmap getArtworkFromFile(Context context, long songid, long albumid)


2012年5月27日日曜日 14時39分59秒 UTC+9 raipon:

raipon

unread,
May 27, 2012, 9:00:57 AM5/27/12
to android-g...@googlegroups.com
ありがとうございます

使ってみようと思いますがこのsongidはMediaStore.Audio.Media._IDだと思うんですが
albumidは下の2つのどちらなのでしょうか?

MediaStore.Audio.Media.ALBUM_ID
MediaStore.Audio.Albums.ALBUM_ID

2012年5月27日日曜日 21時30分09秒 UTC+9 MORIHIRO:

MORIHIRO

unread,
May 27, 2012, 10:56:43 AM5/27/12
to android-g...@googlegroups.com
すいません、どうも私は質問の内容を勘違いしていたようです。
アルバムアートのパスは取得できていたんですね。

それでアルバムアートが表示されとなると、、、
以下のようなパスが取得できていると思いますが、
 /sdcard/Android/data/com.android.providers.media/albumthumbs/...
ファイルは実際に存在しますか?(念のため)

存在しているならあとは、
 Bitmapの作成方法は?
 ImageViewへの設定方法は?
といったところが確認ポイントになりますが、どんな感じでしょうか?


2012年5月27日日曜日 22時00分57秒 UTC+9 raipon:

raipon

unread,
May 28, 2012, 3:20:45 AM5/28/12
to android-g...@googlegroups.com
スキャン直後に見ましたがLogに出したのと同じファイルの位置に同じファイル名でありました
でもアストロで開く形式を指定しギャラリー(標準の画像表示アプリ)で開いたところ
ログにSkImageDecoder::Factory returned nullと出続けて読み込み中がずっと続きました

セットのし方は
             albumArtIndex = albumCursor.getColumnIndexOrThrow(MediaStore.Audio.Albums.ALBUM_ART);
            albumArt = albumCursor.getString(albumArtIndex);
            Log.v("bb", albumArt);
            mHandler.post(new Runnable() {
public void run() {
                        if(albumArt != null){
                        Log.v("aa", albumArt);
                        aap = new File(albumArt);
                        if(aap.exists()){
                        runnable2 = new Runnable() {
@Override
                                   public void run() {
                                       //2.繰り返し処理
                                    bm = BitmapFactory.decodeFile( albumArt  )
                                    im.setImageBitmap(bm);
                                       //3.次回処理をセット
                                        im.setImageResource(R.drawable.loading);
                                       handler2.postDelayed(this, 100);
                                   }
                               };
                               handler2.postDelayed(runnable2, 100);
                        }
                        }
                        }
                      });
です
いろいろやりすぎてごちゃごちゃしてますが


2012年5月27日日曜日 23時56分43秒 UTC+9 MORIHIRO:

MORIHIRO

unread,
May 28, 2012, 10:55:51 AM5/28/12
to android-g...@googlegroups.com
Bitmapの作成方法やImageViewへの設定方法に問題があるようには見えませんので、
画像ファイルがGalleryアプリで表示できないのがポイントですね。

DDMSのFile Explorerかadb pullで画像ファイルをPC側にコピーすれば
表示できるんでしょうか?
(そもそも作成元のMusicアプリでは表示できているんでしょうか?)

2012年5月28日月曜日 16時20分45秒 UTC+9 raipon:

MORIHIRO

unread,
May 28, 2012, 12:20:29 PM5/28/12
to android-g...@googlegroups.com
追記です。

> Bitmapの作成方法やImageViewへの設定方法に問題があるようには見えませんので、
> 画像ファイルがGalleryアプリで表示できないのがポイントですね。

標準のGalleryアプリで表示できないのは、adbコマンドで表現するところの
以下のNGのような形でIntentが投げられているからかもしれません。
 NG: adb shell am start -a android.intent.action.VIEW -t image/* -d /sdcard/~
 OK: adb shell am start -a android.intent.action.VIEW -t image/* -d file:///sdcard/~

> im.setImageBitmap(bm);
> //3.次回処理をセット
> im.setImageResource(R.drawable.loading);

このsetImageBitmap()の直後に呼び出されているsetImageResource()ですが、
コピペのミスですよね?

あと100ms間隔で繰り返し処理してますけど、このへんは意図的な実装でしょうか?


2012年5月28日月曜日 23時55分51秒 UTC+9 MORIHIRO:

raipon

unread,
May 29, 2012, 8:13:34 AM5/29/12
to android-g...@googlegroups.com
スキャンしたばかりだとファイル名は表示されてても.exists()で確認するとファイルがないのが原因っぽいです

このファイルの生成って何分もかかるものなのでしょうか?

2012年5月29日火曜日 1時20分29秒 UTC+9 MORIHIRO:

raipon

unread,
May 29, 2012, 8:31:39 AM5/29/12
to android-g...@googlegroups.com
追記

ファイルがないのではなくつくられなくなってしまっていただけでした

powerAMPなどはうまく表示しているんですが他にアルバムアートを取得剃る方法ってあるんでしょうか?

MORIHIRO

unread,
May 29, 2012, 12:07:57 PM5/29/12
to android-g...@googlegroups.com
MediaScannerConnection.scanFile()を呼び出して、
onScanCompleted()が呼び出された後ならアルバムアートが作成されていると
思っていたのですが、必ずしもそうではないんですね。

API Levelに関係なくアルバムアートを自前で取得(作成)する方法は分かりません。


2012年5月29日火曜日 21時31分39秒 UTC+9 raipon:
追記

ファイルがないのではなくつくられなくなってしまっていただけでした

powerAMPなどはうまく表示しているんですが他にアルバムアートを取得剃る方法ってあるんでしょうか?
Reply all
Reply to author
Forward
0 new messages