Я создаю приложение, которое использует две службы переднего плана:
- Один для получения местоположения
- Другой, чтобы обновить его на сервер (каждые 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)' при создании уведомления без удачи