У меня есть служба 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;
}