ブロードキャストメカニズムを使用して、音楽再生サービスが実行されている間に通知を作成し、通知を使用してサービスと対話(再生、一時停止、停止)しようとしています。サービスの通知によるブロードキャストサービス内のBroadcastReceiverで処理されない処理
(私は通知でアクションボタンとしてPendingIntent.getService()を使用する可能性もある知っているが、これはonStartCommandを(引き金になるので、私は、このアイデアを好きではない)とI Intentオブジェクトを解析して解析してアクションを取る必要があります。これは、以下で説明するBroadcastReceiverのアプローチほどきれいではないようです)。
これまでにいくつかの(切り捨てられた)コードを使って説明してきました。
私たちは、アクションボタンを追加し、サービスのライフサイクル内で通知オブジェクトを作成であり、
startForeground()
を使用して通知を示します。... Intent i = new Intent(getBaseContext(), PlayerService.class); PendingIntent piStop = PendingIntent.getBroadcast(getBaseContext(), 1, i, PendingIntent.FLAG_ONE_SHOT); NotificationCompat.Action actionStopPlayback = new NotificationCompat.Action(R.drawable.ic_stop_white_36dp, "Stop playback", piStop); notification.addAction(actionStopPlayback); ...
その後、我々はサービスの内部のonCreate BroadcastReceiver()に登録されている(そしてもちろんのonDestroyでそれを登録解除し、これは、より単純化した例です)。
IntentFilter intentFilter = new IntentFilter(); registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Log.d(getClass().toString(), "Broadcast received"); } }, intentFilter);
そして、最終的な結果は、受信機のonReceive()が呼び出されることはありませんということです。サービスは連続したもので、通知アクションがブロードキャストを送信するとアクティブになります。私はその性質上、放送をデバッグする方法がないので、私はここでブロックされています。
私は、NotificationがBroadcastReceiver 'A'にブロードキャストを送信するメカニズムを使用しました。このBroadcastReceiver 'A'は、内部(内部サービス)のBroadcastReceiver 'B'にブロードキャストを送信します。 BのonReceive()では、私はそのタスクを処理します。ここでは、[サンプルgithub repo](https://github.com/rupinderjeet/NotificationActionButtonExample/tree/master/app/src/main/java/com/rupinderjeet/notificationactionbuttonexample)です。私は別の答えを求めました。 **マイクの答えを見てください**。 – rupinderjeet