Одинаковое уведомление для нескольких сервисов foregorund и сохранение уведомления, если какой-либо из них остановлен - PullRequest
0 голосов
/ 14 января 2019

Я создаю приложение, которое использует две службы переднего плана:

  • Один для получения местоположения
  • Другой, чтобы обновить его на сервер (каждые 30 секунд)

В настоящее время я тестирую свое приложение на устройстве под управлением Nougat, но я бы хотел, чтобы оно было готово для Oreo.

Сначала я использовал разные уведомления для каждой службы переднего плана, но затем я хотел попробовать использовать одно и то же уведомление для обоих, как в этом SO-ответе .

Если я остановлю любую из этих служб, вызвав stopService (намерение) , тогда уведомление исчезнет, ​​даже если другая служба foregroundService все еще работает.

Есть ли способ сохранить уведомление даже после остановки одной из служб?

Затем, когда обе службы не работают, я вручную удаляю уведомление

ИЗМЕНИТЬ добавленный код в соответствии с запросом

Вот так выглядят мои сервисы (в основном они идентичны):

public class TrackingService extends Service{

@Override
public void onCreate() {
    startForeground(getNotificationId(), getNotification(this));
    // Some other tracking/server stuff 
}


@Override
public IBinder onBind(Intent intent) {
    return null;
}


@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // Some other tracking/server stuff
    return START_STICKY;
}


@Override
public void onDestroy() {
    stopForeground(false);
}

Я начинаю их с:

Intent intent = new Intent(getApplicationContext(), TrackingService.class);
    startService(intent);

А затем останавливаясь с:

Intent intent = new Intent(getApplicationContext(), TrackingService.class);
    stopService(intent);

Я читал, что вызов stopService(intent) также удалит этот сервис с переднего плана. Таким образом, вызов stopForeground(false) является избыточным, но я все равно оставляю его.

И синглтон для Уведомления:

public abstract class SingleNotificacion {
private static final int NOTIFICATION_ID = 1999;
private static Notification notification;

public static Notification getNotification(Context context) {
    if(notification == null) {

        NotificationCompat.Builder builder = new NotificationCompat.Builder(context, "default")
                .setSmallIcon(R.drawable.ic_stat_notify)
                .setPriority(NotificationCompat.PRIORITY_LOW)
                .setCategory(Notification.CATEGORY_SERVICE)
                .setContentTitle(context.getString(R.string.settings_status_on_summary))
                .setColor(ContextCompat.getColor(context, R.color.colorPrimaryDark));

        notification = builder.build();
    }

    return notification;
}


public static int getNotificationId() {
    return NOTIFICATION_ID;
}

public static void cancelNotification(Context context){
    ((NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE)).cancel(NOTIFICATION_ID);
}
}

Я также пытался установить onGoing(true) и 'autoCancel (false)' при создании уведомления без удачи

...