Wednesday, January 7, 2015

再生状態変化によるアプリ連携について

AppWidget等にわたすIntentに以下のような値を設定するようにしました。

Intent broadcast = new Intent(AppWidget1.ACTION_CALL_UPDATEWIDGET);
            broadcast.putExtra("play.state", mIsPlaying);
            broadcast.putExtra("artist", mTrack.getArtist());
            broadcast.putExtra("title", mTrack.getTitle());
            broadcast.putExtra("album", mTrack.getAlbum());
            broadcast.putExtra("duration", mTrack.getDuration());
            broadcast.putExtra("albumArt", mTrack.getAlbumArt());
            broadcast.putExtra("data", mTrack.getUri());
            if(notificationIconBitmap!=null) {
                broadcast.putExtra("artImage", notificationIconBitmap);
            }

            //AppWidget
            Intent broadcast = new Intent(AppWidget1.ACTION_CALL_UPDATEWIDGET);
            broadcast.putExtra("play.state", mIsPlaying);
            broadcast.putExtra("artist", mTrack.getArtist());
            broadcast.putExtra("title", mTrack.getTitle());
            broadcast.putExtra("album", mTrack.getAlbum());
            broadcast.putExtra("duration", mTrack.getDuration());
            broadcast.putExtra("data", mTrack.getUri());
            if(notificationIconBitmap!=null) {
                Uri albumUri = makeAlbumImage(notificationIconBitmap);
                if(albumUri!=null) {
                    broadcast.putExtra("albumArt", albumUri);
                }
            }

このIntentは再生開始時と再生停止時に呼ばれます。
play.stateにtrueがはいっているときは再生中、falseは再生停止です。
それと、"artImage"に設定されたBitmapはNotificaitonに設定されたBitmapです。
albumArtはそのイメージへのURIですがHTTPではなく独自スキーマがはいっているのでご注意ください。

Bitmapを設定すると、サイズが大きいとエラーになったので、一旦テンポラリに保存してそのUriを渡すようにしました。キーの値はalbumArtなのでご注意。テンポラリの画像は次の再生とかキャッシュのクリアなので削除されるのでそのつもりで。

「べ、別におまえに渡すために設定したんじゃないからねーからな!
せっかく取得したのに、もったいねーから設定しておいただけ勘違いすんな。
と、とにかくだ、 artImageを取得すれば簡単に曲のBitmapが取得できるってことだけ覚えてくれたらいいんだよ。
あと、artImageはいま実装したばっかりだからベータ版(2142000090 2142000091)でないとつけないかんな。」




1 comment:

  1. これ、画像がおおきすぎると怒られるみたいなので一旦保存してURIを渡すようにします。

    ReplyDelete