Вам не нужно «взаимодействие с пользователем», чтобы иметь службу Foreground, вам нужно уведомление, которое нельзя удалить, пока служба находится на переднем плане.
Если ваш контекст уведомления - это сама служба, нажатие на уведомление приведет пользователя к «настройкам», где он / она может принудительно закрыть службу, например).
Вы можете запустить службу FG в BOOT_COMPLETED приемнике вещания. Вы должны быстро (5 секунд или меньше) отправить его на передний план или андроид выдаст исключение. К сожалению, есть ошибка , которую Google считает, что все в порядке и закрыто, поскольку "не исправит", но вам все равно придется обойтись.
Короче говоря, есть onCreate в вашем сервисе:
@Override
public void onCreate() {
super.onCreate();
final Notification notification = createNotification();
startForeground("SOME_UNIQUE_ID", notification);
}
Вы понимаете (createNotification()
- это то, что вы хотите создать канал (если O +) + Уведомление.
ОДНАКО, все это хорошо, но служба будет работать постоянно, что, вероятно, не то, что вам следует делать.
Вы можете использовать Alarm более эффективный триггер (с точки зрения области действия) Intent Service, чтобы выполнить работу, запланировать еще один сигнал тревоги, скажем, 5 минут, и сделать это снова.
Или - как прокомментировано - вы можете использовать Firebase и Уведомления, чтобы реагировать на изменения.
В общем, это варианты.
Я бы сказал, что если вам действительно не нужно обновление в режиме реального времени, 15 ~ WorkManager обычно в порядке, если вы можете справиться стот факт, что вы должны разработать свой код, чтобы он был очень независимым, потому что WorkManager не может получить много информации, и это неудобно для некоторых вещей ...