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?