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

Уведомление службы переднего плана отображается слишком медленно на Android 12. Используются ContextCompat.startForegroundService(...) и mContext.startForegroundService(...). Он все еще показывает через 5-10 секунд.

Вот пример моего кода:

private void createNotificationChannel() {
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
      NotificationChannel channel = new NotificationChannel(CHANNEL_ID, "Counting steps", NotificationManager.IMPORTANCE_DEFAULT);
      channel.enableVibration(false);
      channel.setSound(null, null);
      channel.setShowBadge(false);
      notificationManager.createNotificationChannel(channel);
  }
}

Метод onStartCommand:

  @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

      String input = intent.getStringExtra("numberOfSteps");
        createNotificationChannel();

        Intent notificationIntent = new Intent(this, MainActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(this,
          0, notificationIntent, PendingIntent.FLAG_IMMUTABLE);

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
      Notification.Builder notificationBuilder = new Notification.Builder(this, CHANNEL_ID)
        .setContentTitle("Counting steps")
        .setContentText(input)
        .setSmallIcon(R.drawable.ic_baseline_directions_walk_24)
        .setContentIntent(pendingIntent);


      startForeground(FOREGROUND_ID, notificationBuilder.build());
    }

        return START_STICKY;
    }

Как быстро запустить или отобразить службу переднего плана?

3
0
260
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сервисы, которые сразу показывают уведомление

Если служба переднего плана имеет хотя бы одно из следующих характеристики, система показывает соответствующее уведомление сразу после запуска службы, даже на устройствах под управлением Android 12 и выше:

  • Служба связана с уведомлением, которое включает в себя действие кнопки.
  • Служба имеет foregroundServiceType из mediaPlayback, mediaProjection или phoneCall.
  • Обслуживание предоставляет вариант использования, связанный с телефонными звонками, навигацией или мультимедиа воспроизведение, как определено в категории уведомления атрибут.
  • Служба отказалась от поведения изменить, передав FOREGROUND_SERVICE_IMMEDIATE в setForegroundServiceBehavior() при настройке уведомление.
  • На Android 13 (уровень API 33) или выше, если пользователь отклоняет разрешение на уведомление, они по-прежнему видят уведомления, связанные с передним планом службы в диспетчере задач Foreground Services (FGS), но не видят их в панели уведомлений.

    Смотрите: Сервисы, которые сразу показывают уведомление

    Пример кода Java:

    Notification.Builder notificationBuilder = new Notification.Builder(this, CHANNEL_ID)
              .setContentTitle("Counting steps")
              .setContentText(message)
              .setSmallIcon(R.drawable.your_cool_icon)
              .setContentIntent(pendingIntent);
    
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) {
              notificationBuilder.setForegroundServiceBehavior(Notification.FOREGROUND_SERVICE_IMMEDIATE);
            }
    

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

    val notificationBuilder: Notification.Builder =
                Notification.Builder(this, CHANNEL_ID)
                    .setContentTitle("Notification title")
                    .setContentText("Content title")
                    .setSmallIcon(R.drawable.your_cool_icon)
                    .setContentIntent(pendingIntent)
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
                notificationBuilder.setForegroundServiceBehavior(Notification.FOREGROUND_SERVICE_IMMEDIATE)
            }
    

    Другие вопросы по теме