Tak Po Marshmallow nadchodzi Android, aby poziom bezpieczeństwa był bardziej stabilny, ale dla
SYSTEM_ALERT_WINDOW
możesz pokazać działanie pływające i cokolwiek Możesz onCreate()
zmusić użytkownika do nadania mu uprawnień Podążając za kodami w swojej metodzie Umieść ten kod po setContentView
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Intent myIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
startActivity(myIntent);
}
Akcja ACTION_MANAGE_OVERLAY_PERMISSION
bezpośrednio uruchamia ekran uprawnień „Rysuj nad innymi aplikacjami”.
Edycja: mój kod powyżej działa w 100% poprawnie
Ale właśnie odkryłem, że wielu facetów wciąż szuka tego, jak można zezwolić na ACTION_MANAGE_OVERLAY_PERMISSION
stałe, na przykład Jeśli użytkownik ma zezwolenie Raz, nie pytaj o to za każdym razem, gdy otwiera aplikację, więc usłysz rozwiązanie dla siebie-
Sprawdź, czy urządzenie ma API 23+
jeśli 23+ API, sprawdź, czy użytkownik ma pozwolenie, czy nie
jeśli miałeś pozwolenie, nie kieruj go do niego, Settings.ACTION_MANAGE_OVERLAY_PERMISSION
a jeśli jeszcze go nie ma, poproś o sprawdzenie uprawnień do uruchomienia
Umieść poniżej linię w swojej onCreate()
metodzie. Odłóż to późniejsetContentView
checkPermission();
Teraz wprowadź poniższy kod 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 {
}
}
}
Na koniec kod metody checkPermission
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);
}
}
}
I nie zapomnij zadeklarować tej publicznej zmiennej w swojej klasie
public static int ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE = 5469;