Запустите службу / foregroundService выводит приложение на передний план, если оно находится в фоновом режиме - PullRequest
0 голосов
/ 21 октября 2018

Простой вызов

Intent serviceIntent = new Intent(this, NotificationService.class); startService(serviceIntent);

выводит приложение на передний план, если оно находится в фоновом режиме, ничего не происходит, если приложение было закрыто.Я хочу избежать такого поведения, но я не знаю, как это сделать.Это случилось на андроиде O и P .Я настроил alarmManager для запуска моего приложения в определенное время, затем pendingIntent запускает Activity (на экране ничего не отображается) и проверяет полученное действие от Intent наопределить действие, которое будет выполнено.У меня есть 2 службы в моем приложении, и оба они выводят приложение на передний план каждый раз, когда просыпаются, это раздражает пользователя.

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Я решил проблему, заменив 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 с помощью!

0 голосов
/ 21 октября 2018

До Android 8.0 обычным способом создания службы переднего плана было создание фоновой службы, а затем продвижение этой службы на передний план.С Android 8.0 есть осложнение;система не позволяет фоновому приложению создавать фоновый сервис.По этой причине в Android 8.0 появился новый метод startForegroundService () для запуска нового сервиса на переднем плане.После того, как система создала сервис, у приложения есть пять секунд, чтобы вызвать метод startForeground () сервиса, чтобы показать видимое пользователю уведомление новой службы.Если приложение не вызывает startForeground () в течение определенного времени, система останавливает службу и объявляет приложение ANR.

https://developer.android.com/about/versions/oreo/backgroundhttps://stackoverflow.com/a/47611385/6059583
Перейдите по этой ссылке, которая показывает, как показать уведомление о запуске службы в фоновом режиме

...