Уведомление об отмене ForegroundService не работает

#android #android-service #android-notifications #foreground-service

#Android #android-сервис #android-уведомления #foreground-service

Вопрос:

У меня есть служба forground, запущенная с помощью действия привязки. Когда действие forast создало службу, если пользователь инициирует службу, он сделает ее forground, вызвав приведенный ниже код

 public void makeForgroundService() {
    notificationBuilder = new NotificationCompat.Builder(this);
    PendingIntent pendingIntent = PendingIntent.getActivity(this,
            sessionId, new Intent(this, MainActivity.class), 0);
    notificationBuilder.setContentTitle("My Test Service ")
            .setContentText("Service now Running")
            .setSmallIcon(R.drawable.newicon)
            .setContentIntent(pendingIntent);
    // notificationManager = (NotificationManager)
    // getSystemService(Context.NOTIFICATION_SERVICE);
    notify_id = sessionId;
    Log.e(TAG,"making foreGrounf : sessionId = " String.valueOf(notify_id));
    startForeground(notify_id, notificationBuilder.build());
    isForeground = true;
}
  

Теперь, когда действие запускается снова, оно привязывается к serive (поскольку служба уже запущена и является forground). Теперь я хочу отменить уведомление, попробовал его при вызове GetService, но не работает!

 @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        // Log.e(TAG, "Inside onServiceConnected");
        myService = ((MyService.MyBinder) service).getService();
        if(myService.isForeground){

                    Log.e(TAG,"From Activity,removing notification : " myService.notify_id);

                    NotificationManager nm = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
                    nm.cancel(myService.notify_id);

        }
    }
  

Примечание

Я не хочу stopForground использовать MyService. Просто нужно скрыть или отменить уведомление.

Обновить:

Если stopForground — единственный способ, позволит ли stopForground службе, которая может быть уничтожена во время действия, находиться на переднем плане? Могу ли я установить startForground в onDestroy активности? Это (правильный) способ сделать это?

Ответ №1:

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

Тогда в вашем сервисе единственное, что вам нужно вызвать, — это to stopForeground(true) , и уведомление будет удалено.

Комментарии:

1. Я не хочу stopForground . Я только хочу скрыть уведомление, если действие доступно

2. У вас не может быть службы переднего плана без уведомления.

3. Угадывание идентификатора уведомления должно быть одинаковым при отмене.

4. Вызов stopForeground не остановит вашу службу, он просто удалит состояние «переднего плана» и значок. Android НЕ позволит вам иметь службу переднего плана без значков.

5. @VnyKumar, это то же самое!

Ответ №2:

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

Служебные документы