Solicitando permissões do Android M da Activity com noHistory = "true" e / ou showOnLockScreen = "true"

Estou trabalhando em um aplicativo de videochamada e tenho uma tela de 'chamada recebida' que alerta o usuário quando alguém está chamando. Essa tela é uma atividade acionada por um GCM recebido e não tem noHistory = "true" e showOnLockScreen = "true" definidos no manifesto para que o usuário possa participar de chamadas sem ter que desbloquear o dispositivo.

Se o usuário optar por aceitar a chamada, inicio outra atividade para participar da chamada real. No entanto, antes de iniciar a segunda atividade, verifico se as permissões necessárias (câmera, microfone, etc.) estão presentes e as solicito, caso contrário.

É aqui que os problemas surgem.

Problema 1:

A caixa de diálogo de solicitação de permissão exibida pelo sistema faz com que minha atividade entre no onPause. Eu acredito que, por baixo do capô, esse diálogo é realmente uma atividade.

Como uma nova atividade está sendo iniciada aqui, usar noHistory = "true" significa que nossa atividade é instantaneamente eliminada. Tecnicamente, esse é um comportamento intencional e, de fato, a equipe do Android descartou esse problema da seguinte maneira:

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

Posso solucionar esse problema gerenciando-o manualmente no onPause e detectando se alguma solicitação de permissão pendente está em andamento etc.

Problema 2: Depois de resolver o problema 1, chego ao estágio 2.

Ao solicitar a permissão agora, minha atividade não está mais sendo encerrada, MAS o dispositivo volta à tela de bloqueio e não vejo a caixa de diálogo de permissão.

Se eu desbloquear o dispositivo, viva, vejo minha atividade e a caixa de diálogo de permissão de solicitação sobreposta na parte superior. Essa experiência do usuário é desagradável.

Vídeo aqui:https://youtu.be/cobINQ9e2GY

Suponho que a atividade para solicitar permissões não tenha o atributo showOnLockScreen definido como true e, portanto, se for iniciado com a tela bloqueada, não será exibido.

Portanto, a grande questão é: podemos solicitar graciosamente permissões de Atividades que podem ser exibidas na tela de bloqueio?

Meu pressentimento é NÃO, não podemos mostrar as caixas de diálogo de permissão sem voltar à tela de bloqueio. No entanto, um compromisso aceitável para mim seria solicitar ao usuário que desbloqueie o dispositivo / ou seja, mostre a tela de entrada de pinos.

Então, pergunta 2:

Podemos mostrar programaticamente a tela de desbloqueio de pinos de uma atividade que é mostrada enquanto a tela está bloqueada?

questionAnswers(1)

yourAnswerToTheQuestion