Я хочу показать уведомление, когда работает моя служба записи. Пользователь должен иметь возможность приостанавливать или останавливать рекордер непосредственно из уведомления. Поэтому я добавил две кнопки в «Уведомление» и реализовал BroadcastReceiver, который обрабатывает нажатия кнопок.Уведомления на Android: начните действие на кнопку
Он работает почти как я хочу, но есть одна проблема, которую я не могу решить. Когда пользователь нажимает кнопку, я хочу показать действие. Вот мой код:
private void showNotification() {
int requestID = (int) System.currentTimeMillis();
IntentFilter filter = new IntentFilter();
filter.addAction("STOP_RECORDING");
filter.addAction("PAUSE_RECORDING");
filter.addAction("SHOW_ACTIVITY");
this.broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
switch (intent.getAction()) {
case "STOP_RECORDING": onStopClick(); break;
case "PAUSE_RECORDING": onPauseClick(); break;
case "SHOW_ACTITIVY": break;
default: Log.i(T, "UNKNOWN ACTION IN NOTIFICATION INTENT");
}
}
};
Intent stdIntent = new Intent(getApplicationContext(), MyActivityClass.class);
stdIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), requestID, stdIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Intent intent1 = new Intent();
intent1.setAction("STOP_RECORDING");
PendingIntent stopIntent = PendingIntent.getBroadcast(getApplicationContext(), requestID, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
Intent intent2 = new Intent();
intent2.setAction("PAUSE_RECORDING");
PendingIntent pauseIntent = PendingIntent.getBroadcast(getApplicationContext(), requestID, intent2, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder notificationBuilder;
notificationBuilder = new NotificationCompat.Builder(this);
// ... configure notification (title, text, icon)
notificationBuilder.addAction(R.drawable.ic_pause_white_48dp, "Pause", pauseIntent);
notificationBuilder.addAction(R.drawable.ic_stop_white_48dp, "Stop", stopIntent);
registerReceiver(this.broadcastReceiver, filter);
((NotificationManager) getSystemService(NOTIFICATION_SERVICE)).notify(this.notificationID, notificationBuilder.build());
}
В настоящее время правильное действие для каждой кнопки выполняется, но если приложение не отображается, когда пользователь щелкает, приложение не отображается. Как я могу это достичь?
Нужно ли вообще использовать BroadcastReceiver здесь? Есть ли возможность использовать getActivity вместо getBroadcast и определить, какая кнопка была нажата другим способом?