Подтвердить что ты не робот

Уведомление setAutoCancel (true) не работает

Я пытаюсь показать уведомление, которое нужно удалить, когда пользователь нажимает на него. Я использую класс NotificationCompat для создания моего уведомления, и я вызываю setAutoCancel(true) на мой builder. Это фрагмент кода:

    NotificationCompat.Builder mBuilder= new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.ic_launcher)
        .setContentTitle("title")
        .setAutoCancel(true)
        .setContentText("content");
    NotificationManager notificationManager= (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(0, mBuilder.build());

Уведомление правильно добавлено, но когда я нажимаю на него, ничего не происходит! Где я ошибаюсь?

4b9b3361

Ответ 1

Использование setContentIntent должно решить вашу проблему:

.setContentIntent(PendingIntent.getActivity(this, 0, new Intent(), 0));

В вашем примере:

NotificationCompat.Builder mBuilder= new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("title")
        .setAutoCancel(true)
        .setContentText("content")
        .setContentIntent(PendingIntent.getActivity(this, 0, new Intent(), 0));
NotificationManager notificationManager= (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, mBuilder.build());

Часто вы можете направить пользователя к соответствующему контенту и, таким образом, заменить "новый Intent()" на что-то еще.

Я загрузил demo в github.

Ответ 2

Я знаю, что ответ уже принят, но у меня была та же проблема с другим решением, поэтому я расскажу об этом здесь.

Для меня я использовал один и тот же объект NotificationCompat.Builder для создания уведомления, которое называется setOngoing(true). Это было для уведомления о ходе загрузки, которое не должно быть удалено во время работы.

В любом случае, после завершения задачи, я позвонил setAutoCancel(true), но уведомление все еще не исчезло. Мне также нужно было позвонить setOngoing(false).

Теперь это выглядит довольно очевидно, но в будущем это может спасти кого-то еще.