Yeh Nach Marshmallow kommen Android machen Sicherheitsstufe mehr Stick, aber für
SYSTEM_ALERT_WINDOW
Sie können schwebende Aktionen und alles onCreate()
anzeigen. Sie können den Benutzer zwingen, die Berechtigung dafür zu erteilen, indem Sie den Codes in Ihrer Methode folgen. Fügen Sie diesen Code nach setContentView ein
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Intent myIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
startActivity(myIntent);
}
Die Aktion ACTION_MANAGE_OVERLAY_PERMISSION
startet direkt den Berechtigungsbildschirm "Über andere Apps zeichnen".
Bearbeiten: Mein obiger Code funktioniert 100% korrekt
Aber ich habe gerade festgestellt, dass viele Leute immer noch auf der Suche sind, wie man ACTION_MANAGE_OVERLAY_PERMISSION
dauerhaft zulassen kann, wie wenn der Benutzer die Berechtigung einmal erlaubt hat.
Überprüfen Sie, ob das Gerät über API 23+ verfügt
Wenn 23+ API, überprüfen Sie, ob der Benutzer eine Genehmigung hat oder nicht
Wenn Sie einmal eine Erlaubnis hatten, fahren Sie nicht zu ihm Settings.ACTION_MANAGE_OVERLAY_PERMISSION
und wenn Sie noch keine Erlaubnis haben, fragen Sie nach einer Laufzeit-Erlaubnisprüfung
Tragen Sie in Ihre onCreate()
Methode die folgende Zeile ein . Setzen Sie dies nachsetContentView
checkPermission();
Geben Sie nun den folgenden Code ein onActivityResult
@TargetApi(Build.VERSION_CODES.M)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE) {
if (!Settings.canDrawOverlays(this)) {
checkPermission();
} else {
}
}
}
Nun endlich der checkPermission Methodencode
public void checkPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE);
}
}
}
Und vergessen Sie nicht, diese öffentliche Variable in Ihrer Klasse zu deklarieren
public static int ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE = 5469;