Отображение строки состояния уведомления от сервиса в Android - PullRequest
0 голосов
/ 29 января 2011

Привет У меня какая-то глупая проблема. Я пытаюсь отобразить уведомление от службы. Когда начинается действие, я вызываю startService следующим образом:

      Intent myIntent = new Intent(getApplicationContext(),notif_service.class);
      startService(myIntent); 

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

    if (limit_time_value == 2 && start >= 6300000 && notif_past)
     {  

        notif_past=false;
        showNotification();
        stopSelf(); 

     }

Есть два способа, которыми эта служба может быть остановлена, эфир от себя с помощью stopSelf () или кнопка в моей активности с помощью

           Intent myIntent = new Intent(getApplicationContext(),notif_service.class);
      stopService(myIntent);

проблема в том, что даже когда я останавливаю службу, уведомление показывается по истечении указанного времени. Я попытался остановить setvice с помощью Binding, а затем вызвал onDestroy (), в котором я отменяю уведомление и снова вызываю stopSelf () Снова отображается уведомление.

Что я делаю не так? Я неправильно понимаю, как работают уведомления или службы?

Ответы [ 2 ]

1 голос
/ 26 июля 2016

Вызовите экземпляр класса NotificationManager, который вы вызвали внутри функции showNotification().

Например, я использовал:

NotificationManager nm=(NotificationManager)this.getSystemService(this.NOTIFICATION_SERVICE);
nm.notify(1,builder.build());

Если вы сделали что-то подобное для создания уведомления, используйте тот же экземпляр, чтобы отменить его, вызвав функцию cancel() и передав notificationId (в данном случае 1).

Например:

nm.cancel(1);

Здесь 1 обозначает notificationID, который вы указали при его создании.

1 голос
/ 29 января 2011

Вы не указываете точно, где вы выполняете работу, показанную во втором фрагменте кода выше.

  • Если эта работа выполняется в onStart() или onStartCommand(), торабота выполняется в главном потоке приложения, и поэтому, как только он запускается, она блокирует все другие основные потоки приложения, такие как stopService() и onDestroy().

  • Если эта работабудучи выполненным в фоновом потоке, который вы создаете, если вы не завершаете этот фоновый поток, этот поток будет продолжать выполнение независимо от того, уничтожена ли служба.Вам нужно будет договориться о том, чтобы прекратить поток самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...