Я использую Android P и отображаю Действия в уведомлении.
У меня есть BroadcastReceiver, который зарегистрирован в манифесте:
receiver android:name=".MyService$NotificationActionReceiver"></receiver>
Этот приемник выглядит так:
public static class NotificationActionReceiver extends BroadcastReceiver {
public static final String LOG_TAG = "NotificationActionReceiver";
public static final String ACTION_YES = "ACTION_YES";
public static final String ACTION_NO = "ACTION_NO";
public NotificationActionReceiver() {
super();
Log.d(LOG_TAG, "NotificationActionReceiver");
}
@Override
public void onReceive(Context context, Intent intent) {
Log.d(LOG_TAG, "onReceive");
}
}
Я запускаю уведомление:
...
Intent yesIntent = new Intent(mServiceLink, myService.NotificationActionReceiver.class);
yesIntent.setAction(myService.NotificationActionReceiver.ACTION_YES);
yesIntent.putExtra("NOTIFICATION_ID", notificationID);
PendingIntent yesPendingIntent = PendingIntent.getBroadcast(mServiceLink, new Random().nextInt(), yesIntent, 0);
Notification.Action yesAction = new Notification.Action.Builder(0, mServiceLink.getString(R.string.notification_action_yes), yesPendingIntent).build();
Intent noIntent = new Intent(mServiceLink, myService.NotificationActionReceiver.class);
noIntent.setAction(myService.NotificationActionReceiver.ACTION_NO);
noIntent.putExtra("NOTIFICATION_ID", notificationID);
PendingIntent noPendingIntent = PendingIntent.getBroadcast(mServiceLink, new Random().nextInt(), noIntent, 0);
Notification.Action noAction = new Notification.Action.Builder(0, mServiceLink.getString(R.string.notification_action_no), noPendingIntent).build();
Notification.Builder lBuilder = new Builder(mServiceLink, mServiceLink.getBaseContext().getString(R.string.notificationUserActionsID));
Notification notification = lBuilder.setTicker(tTicker)
.setSmallIcon(R.drawable.ic_warning_sign_notification)
.setContentTitle(tTitle)
.setContentText(tText)
.setContentIntent(contentIntent)
.setDeleteIntent(deletePendingIntent)
.addAction(yesAction)
.addAction(noAction)
.setWhen(System.currentTimeMillis())
.setAutoCancel(true)
.build();
NotificationManager mgr = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
mgr.notify(notificationID, notification);
Это работает - в основном - все время. Однако, если приложение работает в течение длительного времени (дни или более дней), просто случается, что уведомление приходит, но действия не запускаются. (то есть: действия есть, но если я коснусь их, я не смогу получить сообщение «NotificationActionReceiver» или «onReceive» в logcat.)
Видите ли вы что-нибудь, что может случайно вызвать это в приведенных выше кодах?
Спасибо!