Solicitud de permisos de Android M de Actividad con noHistory = "true" y / o showOnLockScreen = "true"

Estoy trabajando en una aplicación de video llamada y tengo una pantalla de 'llamada entrante' que alerta al usuario cuando alguien los llama. Esta pantalla es una Actividad activada por un GCM entrante y tiene noHistory = "true" y showOnLockScreen = "true" establecido en el manifiesto para que el usuario pueda realizar llamadas sin tener que desbloquear su dispositivo.

Si el usuario elige aceptar la llamada, inicio otra actividad para participar en la llamada real. Sin embargo, antes de iniciar la segunda actividad, verifico que los permisos necesarios (cámara, micrófono, etc.) estén presentes y los solicito si no.

Aquí es donde surgen los problemas.

Problema 1:

El cuadro de diálogo de solicitud de permiso que muestra el sistema hace que mi actividad entre en onPause. Creo que porque bajo el capó este diálogo es en realidad una actividad.

Como se está iniciando una nueva actividad aquí, usar noHistory = "true" significa que nuestra actividad se elimina instantáneamente. Técnicamente, este es un comportamiento intencional y, de hecho, el equipo de Android ha descartado este problema de la siguiente manera:

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

Puedo solucionar este problema administrándolo manualmente en onPause y detectando si hay solicitudes de permisos pendientes en curso, etc.

Problema 2: Después de solucionar el problema 1, llego a la etapa 2.

Al solicitar el permiso ahora, mi actividad ya no se mata PERO el dispositivo simplemente vuelve a la pantalla de bloqueo y no veo el diálogo de permiso.

Si luego desbloqueo el dispositivo, hurra, veo mi actividad y el diálogo de permiso de solicitud superpuesto en la parte superior. Esta experiencia de usuario es desagradable.

Video aquí:https://youtu.be/cobINQ9e2GY

Supongo que la actividad para solicitar permisos no tiene el atributo showOnLockScreen establecido en verdadero y, por lo tanto, si se inicia con la pantalla bloqueada, no se muestra.

Entonces, la gran pregunta, ¿podemos solicitar con gracia permisos de Actividades que se pueden mostrar en la pantalla de bloqueo?

Mi instinto es NO, no podemos mostrar los cuadros de diálogo de permisos sin volver a la pantalla de bloqueo. Sin embargo, un compromiso aceptable para mí sería pedirle al usuario que desbloquee el dispositivo / es decir, que muestre la pantalla de entrada del pin.

Entonces, pregunta 2:

¿Podemos mostrar mediante programación la pantalla de desbloqueo de pin de una actividad que se muestra mientras la pantalla está bloqueada?

Respuestas a la pregunta(1)

Su respuesta a la pregunta