Android P, Notification Action не запускается - случайное происшествие - PullRequest
0 голосов
/ 19 июня 2019

Я использую 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.)

Видите ли вы что-нибудь, что может случайно вызвать это в приведенных выше кодах?

Спасибо!

...