Wie kann ich programmgesteuert feststellen, ob ein Berechtigungsdialog für den Benutzer sichtbar ist, damit ich weiß, was in diesem Fall zu tun ist?Android M erkennt, ob der Berechtigungsdialog sichtbar ist
Antwort
@Override
protected void onStart() {
super.onStart();
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
if ("com.android.packageinstaller.permission.ui.GrantPermissionsActivity".equals(cn.getClassName())){
//permission dialog is displayed
}
}`
`
Ich bin etwas spät dran, aber ich habe es gerade ausprobiert und es funktioniert! Ich habe dies mit einer booleschen Flagge gemacht, aber Ihre Lösung kann auch nützlich sein. Thanks – ThanosFisherman
Beachten Sie, dass getRunningTasks() jetzt veraltet ist, so dass diese Lösung möglicherweise in Zukunft nicht realisierbar ist. –
Der Berechtigungsdialog ist eine Aktivität, die über den Aktivitätsstapel gesetzt wird. Also, wenn Sie für requestPermission()
Methode Activity
aufrufen, fragt die Implementierung PackageManager
Absicht zu bauen, die diesen Aktivitätsdialog starten wird. Diese Absicht hat ACTION_REQUEST_PERMISSIONS
action.
Wahrscheinlich müssen Sie auf Aktivitätsstapeländerungen warten und prüfen, ob der Aktivitätsabsicht ACTION_REQUEST_PERMISSIONS
Aktion hat. Ich bin mir nicht sicher, ob das Erlangen laufender Aufgaben dir diese Aktivität anzeigt, weil ich das selbst nicht versucht habe, nur um dich in Gang zu bringen.
AFAIK gibt es keine saubere Art und Weise Erlaubnis Dialog zu erkennen ist sichtbar Bildschirm oder nicht. durch hack kannst du –
dex