NotificationManager не может отобразить уведомление с предупреждением «уведомить: id поврежден: отправлено 1, назад 0»

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

У меня очень простой сервис, который в данный момент ничего не делает. Он просто должен отображать уведомление:

public class UpdateService extends Service { private static final String TAG = "UpdateService"; private static int NOTIFICATION_ID = 1; private UpdateServiceBinder binder = new UpdateServiceBinder(); @Override public void onCreate() { Log.i(TAG, "Service created"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i(TAG, "Service started"); sendNotification(100); return Service.START_NOT_STICKY; } private void sendNotification(int updatedItems) { NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext()) .setSmallIcon(R.drawable.icon) .setContentTitle("Sync") .setContentText("Updated " + updatedItems); Intent resultIntent = new Intent(getBaseContext(), MainActivity.class); TaskStackBuilder stackBuilder = TaskStackBuilder.create(getApplicationContext()); stackBuilder.addParentStack(MainActivity.class); stackBuilder.addNextIntent(resultIntent); PendingIntent resultPendindIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); builder.setContentIntent(resultPendindIntent); NotificationManager manager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE); manager.notify(NOTIFICATION_ID, builder.build()); } @Override public IBinder onBind(Intent intent) { return binder; } @Override public boolean onUnbind(Intent intent) { return true; } public class UpdateServiceBinder extends Binder { public UpdateService getService() { return UpdateService.this; } } 

}

К сожалению, когда служба запускается и уведомление должно отображаться, ничего не происходит. Служба определенно запускается в соответствии с сообщениями журнала. В то же время есть предупреждение от NotificationManager:

11-30 23: 24: 34.620: I / UpdateService (28356): созданная служба

11-30 23: 24: 34.800: I / UpdateService (28356): начато обслуживание

11-30 23: 24: 34.808: W / NotificationManager (28356): уведомить: id поврежден: отправлен 1, вернулся 0

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

Любая помощь оценивается. Благодаря!

У меня была эта проблема, тогда я помню, что я отключил «Показать уведомление» из своей «информации о приложении». Я включил его, и уведомления снова возвращаются.

  1. Откройте «Настройки»> «Приложения» («Диспетчер приложений»).
  2. Нажмите приложение, которое хотите остановить.
  3. Нажмите, чтобы снять флажок «Показать уведомления».

FYI он может отличаться от одного устройства Android к другому, однако они все более или менее одинаковы.

Я нашел решение этой проблемы. Мне пришлось изменить имя пакета с com.gttn.sample на com.gttn.sample2. Не совсем уверен, почему я должен был это сделать, но уведомления отображаются правильно, и предупреждение исчезло.

Когда вы устанавливаете и переустанавливаете приложение много раз что-то

Снял флажок «Показывать оповещения» в «Настройки»> «Диспетчер приложений»> «Ваше приложение».

Просто проверьте снова «Показать оповещения» и будьте счастливы!

Android, похоже, имеет ограничение скорости, чтобы блокировать приложения из DDOSing оттенка уведомления. Я видел эти журналы на моей стороне, потому что я пытался обновить уведомление о прогрессе внутри цикла:

 Observable.range(0, 100) .subscribe(progress -> updateProgressNotification(progress)); 

Добавление произвольной задержки между каждой эмиссией устраняет проблему для меня:

 Observable.range(0, 100) .zipWith(Observable.interval(25, TimeUnit.MILLISECONDS), (progress, delay) -> progress) .subscribe(progress -> updateProgressNotification(progress)); 

Я не уверен, почему вы используете getBaseContext (), но я предлагаю вам вместо этого использовать getApplicationContext (). Кроме того, я не уверен, почему вы привязываетесь к Сервису.

Просто рассмотрел эту проблему сам. Без дополнительных строк из вашего файла журнала (должно быть в пределах 5 строк после) может появиться сообщение, подобное «E / NotificationService (287): подавление уведомления из пакета по запросу пользователя». Это новая настройка в ICS (возможно, JB) для отключения уведомлений для каждого приложения. Перейдите в Настройки -> Приложения -> и установите флажок «показывать уведомления» вверху. По очевидным причинам изменение имени пакета очень эффективно обходило бы эту настройку.

Intereting Posts