Запустите службу /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
Перейдите по этой ссылке, которая показывает, как показать уведомления для запуска службы я фон

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