Запустите службу /foregroundService выводит приложение на передний план, если оно находится в фоновом режиме
Простой вызов
Intent serviceIntent = new Intent(this, NotificationService.class);
startService(serviceIntent);
выводит приложение на передний план, если оно находится в фоновом режиме, ничего не происходит, если приложение было закрыто. Я хочу избежать такого поведения, но я не знаю, как это сделать. Это случилось на Android O и P. Я настроил alarmManager
чтобы разбудить мое приложение в определенное время, а затем pendingIntent
начинает Activity
(ничего не показывает на экране) и проверяет полученное действие от Intent
определить действие, которое будет выполнено. У меня есть 2 службы в моем приложении, и оба они выводят приложение на передний план каждый раз, когда просыпаются, это раздражает пользователя.
2 ответа
Я решил проблему, заменив PendingIntent.getActivity()
от PendingIntent.getBroadcast()
при создании PendingIntent
это будет вызвано AlarmManager
, Вот код:
private PendingIntent getNotifyIntent() {
Intent notifyIntent = new Intent(mContext, MyBroadcastReceiver.class);
return PendingIntent.getBroadcast(mContext, 0, notifyIntent, 0);
}
Я уже использовал этот код раньше (PendingIntent.getActivity()
) но я никогда не видел, чтобы приложение появлялось на экране раньше. Упражнение, которое я использовал, было полностью прозрачным и невидимым, оно не создавало раскладки на экране. Я использовал его, потому что по какой-то причине использование Broadcast не работало. Но теперь, когда приложение открывалось, я предполагаю, что это произошло потому, что открытая прозрачная операция проверяла, что должно быть сделано, и закрывалась, вызывая операцию перед ее отображением на экране.
Резюме: проблема была не в самой услуге, а в том, как я настраивал
AlarmManager
Tank u All с помощью!
До Android 8.0 обычным способом создания службы на переднем плане было создание фоновой службы, а затем ее продвижение на передний план. С Android 8.0 есть осложнение; система не позволяет фоновому приложению создавать фоновый сервис. По этой причине в Android 8.0 появился новый метод startForegroundService() для запуска нового сервиса на переднем плане. После того, как система создала сервис, у приложения есть пять секунд, чтобы вызвать метод startForeground() сервиса, чтобы показать видимое пользователю уведомление новой службы. Если приложение не вызывает startForeground() в течение определенного времени, система останавливает службу и объявляет приложение ANR.
https://developer.android.com/about/versions/oreo/background
/questions/8160177/oreo-zapusk-servisa-na-perednem-plane/8160183#8160183
Перейдите по этой ссылке, которая показывает, как показать уведомления для запуска службы я фон