Abfragen von Android M-Berechtigungen für Aktivitäten mit noHistory = "true" und / oder showOnLockScreen = "true"

Ich arbeite an einer Videoanruf-App und habe einen Bildschirm für eingehende Anrufe, der den Benutzer benachrichtigt, wenn er angerufen wird. Dieser Bildschirm ist eine Aktivität, die von einem eingehenden GCM ausgelöst wird, und im Manifest sind noHistory = "true" und showOnLockScreen = "true" festgelegt, damit der Benutzer Anrufe tätigen kann, ohne sein Gerät entsperren zu müssen.

Wenn der Benutzer den Anruf annimmt, starte ich eine weitere Aktivität, um den tatsächlichen Anruf zu tätigen. Bevor ich jedoch die zweite Aktivität starte, überprüfe ich, ob die erforderlichen Berechtigungen (Kamera, Mikrofon usw.) vorhanden sind, und fordere sie an, falls nicht.

ier entstehen die Problem

Problem 1:

Der vom System angezeigte Berechtigungsanforderungsdialog veranlasst meine Aktivität, in onPause zu wechseln. Ich glaube, weil unter der Haube dieser Dialog eigentlich eine Aktivität ist.

Da hier eine neue Aktivität gestartet wird, bedeutet noHistory = "true", dass unsere Aktivität sofort beendet wird. Technisch handelt es sich hierbei um ein absichtliches Verhalten, und das Android-Team hat dieses Problem folgendermaßen abgetan:

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

Ich kann dieses Problem umgehen, indem ich es in onPause manuell verwalte und feststelle, ob noch ausstehende Erlaubnisanfragen vorliegen usw.

Problem 2: Nachdem ich Problem 1 umgangen habe, komme ich zu Phase 2.

Wenn ich jetzt die Erlaubnis anfordere, wird meine Aktivität nicht mehr beendet, ABER das Gerät kehrt einfach zum Sperrbildschirm zurück und ich sehe den Erlaubnisdialog nicht.

Wenn ich dann das Gerät entsperre, sehe ich meine Aktivität und den darüber eingeblendeten Anforderungsberechtigungsdialog. Diese Benutzererfahrung ist unangenehm.

Video hier:https: //youtu.be/cobINQ9e2G

Ich vermute, dass für die Aktivität zum Anfordern von Berechtigungen das Attribut showOnLockScreen nicht auf true festgelegt ist und dass es daher nicht angezeigt wird, wenn es mit gesperrtem Bildschirm gestartet wird.

So, die große Frage, können wir anmutig Berechtigungen von Aktivitäten anfordern, die auf dem Sperrbildschirm angezeigt werden dürfen?

Mein Bauchgefühl ist NEIN, wir können die Berechtigungsdialoge nicht anzeigen, ohne zum Sperrbildschirm zurückzukehren. Ein akzeptabler Kompromiss für mich wäre jedoch, den Benutzer aufzufordern, das Gerät zu entsperren / d. H. Den PIN-Eingabebildschirm anzuzeigen.

Also, Frage 2:

Können wir den PIN-Entsperrbildschirm programmgesteuert für eine Aktivität anzeigen, die angezeigt wird, während der Bildschirm gesperrt ist?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage