Dieses Popup wird durch die vom Manifest deklarierte Berechtigung manifest.PERMISSION.SYSTEM_ALERT_WINDOW verursacht.
Es gibt drei Kategorien von Berechtigungen, die Entwickler beachten müssen:
Normale Erlaubnis - nichts mit ihnen machen, nur im Manifest deklarieren
Anfällige Berechtigungen - im Manifest deklarieren und beim ersten Mal um Erlaubnis bitten. Sie können über die Systemeinstellungen geändert werden.
Über gefährlichen Berechtigungen: SYSTEM_ALERT_WINDOW und WRITE_SETTINGS gehören zu dieser Kategorie. Sie müssen gewährt werden, sind jedoch in den Systemeinstellungen nicht sichtbar. Um dies anzufordern, verwenden Sie keine Standardmethode (int checkSelfPermission (String-Berechtigung)), sondern müssen Settings.canDrawOverlays () oder Settings.System.canWrite () entsprechend überprüfen. Wenn Sie dies nicht tun, erhalten Sie eine Ausnahme wie
Fenster android.view.ViewRootImpl$W@1de28ad kann nicht hinzugefügt werden - Berechtigung für diesen Fenstertyp verweigert
1-Fordern Sie diese Erlaubnis in Ihrem Code wie unten angegeben an:
public class MainActivity extends AppCompatActivity {
public final static int REQUEST_CODE = 10000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (checkDrawOverlayPermission()) {
Toast.makeText(this, "Permission granted", Toast.LENGTH_SHORT).show();
}
}
public boolean checkDrawOverlayPermission() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
return true;
}
if (!Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_CODE);
return false;
} else {
return true;
}
}
@Override
@TargetApi(Build.VERSION_CODES.M)
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE) {
if (Settings.canDrawOverlays(this)) {
Toast.makeText(this, "Permission granted", Toast.LENGTH_SHORT).show();
}
}
}