音楽プレーヤーであるアプリに通知アクション アイテムを追加しようとしています。ストリームが開始されると、通知がトリガーされ、ストリームの停止ボタンが通知に表示される必要があります。これまでのところ通知は正常に機能していますが、停止アクション アイテムに問題があります。ストリームを開始するサービスで宣言する方法は次のとおりです。
Intent stopIntent = new Intent(this, MusicPlayerNew.class);
stopIntent.putExtra("STOP", "STOP");
PendingIntent stopPendingIntent = PendingIntent.getActivity(this, 0,
stopIntent, PendingIntent.FLAG_UPDATE_CURRENT, null);
mBuilder.addAction(R.drawable.ic_stat_stop, "Stop", stopPendingIntent);
アクティビティの onResume() メソッドで、「STOP」エクストラを getIntent().getStringExtra() でチェックしますが、getIntent() を介して取得したインテントにはエクストラが設定されていません:(
また、ブロードキャストを送信することを確認しようとしました(サービスからアクティビティに通信するために動作するブロードキャストレシーバーがあります)
Intent stopIntent2 = new Intent(MusicPlayerNew.STOP_MEDIAPLAYER);
PendingIntent stopPendingIntent2 = PendingIntent.getBroadcast(this, 0,
stopIntent2, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.addAction(R.drawable.ic_stat_stop, "Stop", stopPendingIntent2);
これは、アクティビティが現在フォアグラウンドにある場合に機能します。アクティビティがバックグラウンドにある場合、停止ボタンは何もしません:(
編集: アクティビティに BroadcastReceiver をプライベート クラスとして持っています
private class DataUpdateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
..
}}
onResume() で、このレシーバーにアプリを登録します。
intentFilter = new IntentFilter(STOP_MEDIAPLAYER);
registerReceiver(dataUpdateReceiver, intentFilter);
onPause()
unregisterReceiver(dataUpdateReceiver);
onPause() メソッドから登録解除を削除すると、アプリ/アクティビティがフォアグラウンドになくてもブロードキャストが受信されます。しかし、これは正しい方法ですか?私はこの登録/登録解除のものをウェブ上のチュートリアルから入手したと思います..