Facebook, Evernote, Pocket - Alle Apps erhalten diese Berechtigung für Android 6.0 automatisch, obwohl sie auf 23 ( targetSdkVersion=23
) abzielen .
Es wurde viel über das neue Marshmallow-Berechtigungsmodell dokumentiert. Einer von ihnen wurde SYSTEM_ALERT_WINDOW
in die Berechtigungsklasse "über gefährlich" befördert, sodass ein spezieller Benutzereingriff erforderlich ist, damit Apps mit diesen gewährt werden können. Wenn die App targetSdkVersion
22 oder weniger hat, erhält die App diese Berechtigung automatisch (falls im Manifest angefordert).
Ich habe jedoch einige Apps bemerkt, die diese Berechtigung erhalten, ohne dass der Benutzer auf die spezielle Einstellungsseite der Draw over other apps
Berechtigung gesendet werden muss. Ich habe Facebook, Evernote, Pocket gesehen - und vielleicht gibt es noch mehr.
Weiß jemand, wie einer App diese Berechtigung erteilt werden kann, ohne dass der Benutzer dies durchläuft Settings -> Apps -> Draw over other apps
?
Vielen Dank
Antworten:
Es ist ein neues Verhalten, das in Marshmallow 6.0.1 eingeführt wurde .
Jede App, die die
SYSTEM_ALERT_WINDOW
Berechtigung anfordert und über den Play Store installiert wird (Version 6.0.5 oder höher ist erforderlich), hat die Berechtigung automatisch erteilt.Wenn stattdessen die App seitlich geladen wird, wird die Berechtigung nicht automatisch erteilt. Sie können versuchen, die Evernote APK von apkmirror.com herunterzuladen und zu installieren . Wie Sie sehen, müssen Sie die Berechtigung in manuell erteilen
Settings -> Apps -> Draw over other apps
.Dies sind die Commits [1] [2] , mit denen der Play Store die
SYSTEM_ALERT_WINDOW
Erlaubnis automatisch erteilen kann .quelle
above dangerous
in der Tat erhalten, wenn Sie die App von der Seite laden, wird die Berechtigung nicht erteilt. Es ist nur der Play Store, der sich anders verhält und automatisch die Erlaubnis erteilt. Vielleicht dachten sie, dass die Apps im Play Store nicht bösartig sind und ihnen vertraut werden kann. Oder sie haben viele Beschwerden über diese Änderung erhalten und beschlossen, eine Problemumgehung zu finden.Yeh Nach Marshmallow kommen Android machen Sicherheitsstufe mehr Stick, aber für
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// Check if Android M or higher if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // Show alert dialog to the user saying a separate permission is needed // Launch the settings activity if the user prefers 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üfungTragen 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)) { // You don't have permission checkPermission(); } else { // Do as per your logic } } }
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;
quelle
Jetzt ( 2019 ), da Google eine alternative API
SYSTEM_ALERT_WINDOW
in Form von Bubbles in Android Q anbietet , hat Google beschlossen,SYSTEM_ALERT_WINDOW
in einer zukünftigen Android-Version möglicherweise nicht mehr zu funktionieren .Und Android Go-Geräte gewähren diese Berechtigung nicht mehr, d. H.
Settings.canDrawOverlays() == false
quelle
Für diejenigen, die diese Berechtigung automatisch erhalten möchten, wenn die App aus dem Play Store heruntergeladen wird, sollten Sie neben dem SYSTEM_ALERT_WINDOW im Manifest zu diesem Link gehen und dies bei Google anfordern.
Sie müssen einige zusätzliche Informationen angeben, warum Sie diese Berechtigung benötigen. Google überprüft diese und erteilt Ihnen die automatische Berechtigung.
Denken Sie daran, dass Sie, bevor Sie danach fragen, Folgendes tun müssen:
Haben Sie die Berechtigung SYSTEM_ALERT_WINDOW im Manifest
Fordern Sie den Benutzer auf, die Berechtigung SYSTEM_ALERT_WINDOW in Ihrer App zu erteilen, sofern dies noch nicht geschehen ist
Wenn ich etwas vermisse, können Sie die Antwort aktualisieren
quelle
Wenn die App auf API 22 oder niedriger abzielt, erteilt der Play Store die Berechtigung SYSTEM_ALERT_WINDOW und andere, wenn der Benutzer auf die Installation klickt (eine Warnung wird angezeigt), auch wenn sein Gerät Android 6.0 ist. Andernfalls, wenn die App auf API 23 oder höher abzielt Die Erlaubnis wird zur Erteilung zur Laufzeit angefordert.
quelle