Запустите Activity из Bound Service, чтобы получить разрешение DrawOverlays, но продолжайте работу сервиса - PullRequest
3 голосов
/ 15 мая 2019

Мне нужно получить разрешение DrawOverlays от моей связанной службы . Я запускаю действие - Settings.ACTION_MANAGE_OVERLAY_PERMISSION, предоставляемое Android, чтобы открыть действие настройки для пользователя, дать разрешение.

Проблема в том, что как только активность открывается, андроид выключает мой сервис. А поскольку служба не может запустить действие, в результате пользователю необходимо повторно открыть приложение, которое привязывается к службе после предоставления разрешения.

Я пытаюсь сначала запустить другое действие (диалоговое задание), а затем получить диалоговое задание, чтобы открыть экран действия настроек. Тем не менее, служба закрывается.

Я также пытался привязать активность диалога к службе в надежде сохранить службу активной, но в результате сначала отключается, оставляя предыдущего клиента, а затем запускается с новым клиентом, т. Е. Операция диалога .

Я открываю активность из службы, подобной этой.

if (!Settings.canDrawOverlays(nextGenPrintingService)) {
  Log.i(Constants.TAG, "Requesting Permission");
  Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
     Uri.parse("package:" +myService.getApplicationContext().getPackageName()));
  intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  myService.startActivity(intent);
} else {
  Log.i(Constants.TAG, "Permission already available");
}

Служба - это служба привязки , которая возвращает договор обмена сообщениями в функции onBind().

Служба запускается из другого приложения, используя

Intent intent = new Intent();
        intent.setClassName(Constants.SERVICE_PACKAGE, Constants.SERVICE_CLASS);
        context.bindService(intent,
                serviceConnection, Context.BIND_AUTO_CREATE);

Мне нужно, чтобы моя служба работала, пока экран настроек открыт, чтобы пользователь мог дать разрешение, а затем успешно вернуться к предыдущему заданию в службе.

...