Запрос разрешений Android M из Activity с noHistory = «true» и / или showOnLockScreen = «true»

Я работаю над приложением для видеовызовов, и у меня есть экран «Входящий звонок», который предупреждает пользователя, когда кто-то ему звонит. Этот экран является активностью, запускаемой входящим GCM, и в манифесте установлены noHistory = "true" и showOnLockScreen = "true", чтобы пользователь мог участвовать в вызовах без необходимости разблокировать свое устройство.

Если пользователь решает принять вызов, я запускаю другое действие, чтобы участвовать в реальном вызове. Однако перед тем, как запустить второе действие, я проверяю наличие необходимых разрешений (камера, микрофон и т. Д.) И запрашиваю их, если нет.

Это где проблемы возникают.

Проблема 1:

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

Так как здесь начинается новое действие, использование noHistory = "true" означает, что наше действие мгновенно прекращается. Технически это преднамеренное поведение, и действительно команда Android отвергла эту проблему следующим образом:

https://code.google.com/p/android-developer-preview/issues/detail?id=2915

Я могу обойти эту проблему, управляя ею вручную в onPause и определяя, находятся ли какие-либо невыполненные запросы на разрешение и т. Д.

Проблема 2: Обойдя проблему 1, я перехожу к этапу 2.

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

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

Видео здесь:https://youtu.be/cobINQ9e2GY

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

Итак, главный вопрос, можем ли мы изящно запрашивать разрешения у Активностей, которые разрешено отображать на экране блокировки?

У меня такое ощущение, что НЕТ, мы не можем показать диалоговое окно разрешений, не вернувшись обратно к экрану блокировки. Однако приемлемым компромиссом для меня было бы предложить пользователю разблокировать устройство / показать экран ввода пин-кода.

Итак, вопрос 2:

Можем ли мы программно отобразить экран разблокировки булавки из Активности, которая отображается, пока экран заблокирован?

Ответы на вопрос(1)

Ваш ответ на вопрос