Идентификатор уведомления не будет отображаться на startforground - PullRequest
0 голосов
/ 09 октября 2018

У меня есть служба startforeground (), которая запускается при загрузке.Я вызываю startForeground(NOTIFICATION, notification);, и иногда он не отображается, и в результате служба не вызывает ошибку startForeground.

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

Поэтому я добавил проверку, если уведомление существует, и если нет, добавьте 1 к номеру идентификатора уведомления, пока он не появится в диспетчере уведомлений.Теперь это работает, но уведомление не отображается, пока я не увеличу идентификатор, иногда до 2, иногда до 9.

Мой вопрос: почему это происходит?В моем приложении только 3 уведомления, и я уверен, что идентификаторы не конфликтуют.Идентификатор конфликтует с чем-то?

У меня есть все необходимые идентификаторы каналов уведомлений, и уведомление завершено, я просто изменяю идентификатор уведомления, пока он не появится.

Вот соответствующий код:

private void showNotification() {

    // code

    startForeground(NOTIFICATION, notification);

    while(!isNoticationExist(NOTIFICATION)){
        NOTIFICATION += 1;
        startForeground(NOTIFICATION, notification);
    }
}

public boolean isNoticationExist(int NotificationID) {
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
        StatusBarNotification[] notifications = notificationManager.getActiveNotifications();
        for (StatusBarNotification notification : notifications) {
            if (notification.getId() == NotificationID) {
                Timber.d("notification ID exist true: " + NotificationID);
                return true;
            }
        }
        Timber.d("notification ID exist false: " + NotificationID);
        return false;
    }
    return true;
}
...