Как получать трансляцию, когда пользователь разблокирует телефон в Oreo, если приложение находится в фоновом режиме

На устройствах PreOreo я использую широковещательный приемник для прослушивания пользовательских разблокировок. Я использую для этого сервис.

  public class UserUnlockService extends Service {
    public UserUnlockService() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        IntentFilter filter=new IntentFilter();
        filter.addAction(Intent.ACTION_USER_PRESENT);
        registerReceiver(new UserUnlockBroadcastReceiver(),filter);
        return START_STICKY;
    }
}

Это решение отлично работает на устройствах PreOreo и работает на устройстве Oreo, если мое приложение находится на переднем плане. Когда приложение работает в фоновом режиме, эта служба не работает. Я знаю, что в Oreo мы не можем запускать фоновые службы. Я пробовал Большинство ответов SO 123

И я пробовал этот статья, но он мне не помогает

Я также пробовал услуги переднего плана. но постоянное отображение уведомлений не очень хорошо для UX моего приложения.

Итак, мой вопрос: как я могу получать трансляцию USER_PRESENT в Oreo, если приложение находится в фоновом режиме. Есть ли какое-нибудь обходное решение для этого?

Или как другие популярные приложения обеспечивают долгую работу сервисов на устройствах Oreo?

«но постоянное отображение уведомлений не очень хорошо для UX моего приложения» - это решение зависит от пользователя, а не от вас.

CommonsWare 02.05.2018 12:25

@CommonsWare Есть ли другой способ без уведомления. Я хочу только слушать разблокировку пользователя (USER_PRESENT)

Vinayak B 02.05.2018 12:27
ACTION_USER_PRESENT не отображается на неявный белый список исключений широковещательной передачи. Этот белый список не совсем точен, поэтому вы можете просто попробовать зарегистрированного в манифесте получателя и посмотреть, работает ли он. Но, если это не сработает, то AFAIK служба переднего плана - ваш единственный вариант.
CommonsWare 02.05.2018 12:36

Я попробовал зарегистрированный в манифесте получатель. Это не сработает. единственное, что работает, - это служба переднего плана.

Vinayak B 02.05.2018 12:38

@VinayakB Мое приложение с таргетингом ниже Oreo работало нормально, и триггеры работали. Но когда я сделал его целевой Oreo, трансляция user_present прекратилась. Я показываю уведомление с услугой. Вы нашли какое-нибудь решение?

kirtan403 08.09.2018 12:23

@ kirtan403 Нет. Я этого не делал. Сейчас я использую уведомление переднего плана

Vinayak B 10.09.2018 06:37
4
6
500
0

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