Проблема с уведомлениями в Oreo - PullRequest
0 голосов
/ 02 июля 2018

Google сделал огромное критическое изменение в Oreo - они перестали работать с уведомлениями во всех приложениях. Сейчас я занимаюсь изменением всех своих приложений, но у меня остались пара проблем. , .

Уведомление теперь публикуется, и когда пользователь касается уведомления, оно правильно запускает приложение. Однако , (1) уведомление не исчезает. Чтобы избавиться от него, пользователь должен удалить его. Кроме того (2) точки на значке моего приложения остаются в One после публикации нескольких уведомлений.

Я использую следующий класс помощников по уведомлениям, который я нашел опубликованным Бипином Пандей:

public class NotificationHelper {

    private Context mContext;
    private NotificationManager mNotificationManager;
    private NotificationCompat.Builder mBuilder;
    public static final String NOTIFICATION_CHANNEL_ID = "10001";

    public NotificationHelper(Context context) {
        mContext = context;
    }

    /**
     * Create and push the notification
     */
    public void createNotification(String title, String message)
    {
        /**Creates an explicit intent for an Activity in your app**/
        Intent resultIntent = new Intent(mContext , MainActivity.class);
        resultIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        PendingIntent resultPendingIntent = PendingIntent.getActivity(mContext,
                0 /* Request code */, resultIntent,
                PendingIntent.FLAG_UPDATE_CURRENT);

        mBuilder = new NotificationCompat.Builder(mContext);
        mBuilder.setSmallIcon(R.drawable.ticon);
        mBuilder.setContentTitle(title)
                .setContentText(message)
                .setAutoCancel(false)
                .setSound(Settings.System.DEFAULT_NOTIFICATION_URI)
                .setContentIntent(resultPendingIntent);

        mNotificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);

        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O)
        {
            int importance = NotificationManager.IMPORTANCE_HIGH;
            NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "NOTIFICATION_CHANNEL_NAME", importance);
            notificationChannel.enableLights(true);
            notificationChannel.setLightColor(Color.RED);
            notificationChannel.enableVibration(true);
            notificationChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
            assert mNotificationManager != null;
            mBuilder.setChannelId(NOTIFICATION_CHANNEL_ID);
            mNotificationManager.createNotificationChannel(notificationChannel);
        }
        assert mNotificationManager != null;
        mNotificationManager.notify(0 /* Request Code */, mBuilder.build());
    }


}

Следующий код выполняет этот вспомогательный класс

NotificationHelper myNotify = new NotificationHelper(context);
myNotify.createNotification("New Message",mesText);

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Вы сохранили свойство setAutoCancel как false. Таким образом, уведомление не будет отклонено, когда пользователь прикасается к нему. Это для ситуаций, когда вы хотите обработать удаление уведомления на своем собственном конце.

Удалите эту строку из вашего NotificationBuilder, и ваша логика должна работать как положено.

Описание метода:

общедоступное уведомление. SetuAutoCancel (булево autoCancel)

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

Подробнее об автоматической отмене уведомлений здесь:

https://developer.android.com/reference/android/app/Notification.Builder.html#setAutoCancel(boolean)

0 голосов
/ 02 июля 2018

Вы установили setAutoCancel(false), поэтому уведомление автоматически не отменяется при его запуске. Удалите эту строку, если вы хотите нажать на уведомление, чтобы удалить уведомление (и точки, связанные с уведомлениями).

...