音楽情報を通知領域へ表示
通知領域へ音楽情報を表示するには
独自にNotificationのレイアウトを作成し
音楽の再生、停止、のタイミングでNotificationに設定する
ServiceへNotificationを設定
この処理のタイミングは
音声データの再生のタイミングにする
まず、Notificationの登録
startForeground(1, generateNotification());
generateNotification()の中身は以下のようになる
//通知領域タップ時のPendingIntent作成 Intent actionIntent = new Intent(getApplicationContext(), MainActivity.class); PendingIntent pi = PendingIntent.getActivity(getApplicationContext(), 0, actionIntent, PendingIntent.FLG_UPDATE_CURRENT); //独自レイアウトのRemoteView作成 RemoteViews notificationView = new RemoteViews(getPackageName(), R.layout.status_bar); //Notification生成 NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext()); //アイコン設定 builder.setSmallIcon(R.drawable.ic_start_media); //独自レイアウトをNotificationへ設定 builder.setContent(notificationView); //設定をtrueにして常時表示 builder.setOngoing(true); //通知領域に初期表示のときの設定 builder.setTicker("sample title を設定"); builder.setContentIntent(pi); //statusbar のアイコン設定 notificationView.setImageResource(R.id.imageIcon, R.drawable.ic_launcher); //status barへタイトル設定 notificationView.setTextViewText(R.id.textTitle, "Sample title"); //status barへアーティスト名表示 notificationView.setTextViewText(R.id.textArtist, "Sample Artist"); //イメージアイコンボタンを押したときのIntentの設定 PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), Intent.FLAG_ACTIVITY_NEW_TASK); notificationView.setOnClickPendingIntent(R.id.imageIcon, contentIntent); //再生、一時停止を押したときのIntentの設定 notificationView.setOnClickPendingIntent(R.id.play, createPendingIntent("playpause")); //次へボタンを押したときのIntent設定 notificationView.setOnClickPendingIntent(R.id.next, createPendingIntent("next")); return builder.build();
サービスが終了すると
自動的にNotificationは終了するけど
明示的に通知領域から解除するには
stopForeground(true);
とする
startForeground()を使うと
Serviceは、システムから強制停止できなくなる
音楽の再生や動画再生みたいに長時間バックグラウンドで動作するサービスの場合
Notificationなどを使って通知領域へサービスの有無を表示するのが一般的
残念ながら、現時点では、表示領域からのアイコンによる操作は
標準ではサポートされてないため
Notificationの独自レイアウトを作成し
そこへ各機能のボタンなどを配置して
RemoteViews経由でIntentを設定していく