Да, после выхода Marshmallow Android повысит уровень безопасности, но для
SYSTEM_ALERT_WINDOW
вы можете показать плавающее действие и все, что вы можете заставить пользователя дать разрешение на это, следуя кодам в вашем onCreate()
методе Поместите этот код после setContentView
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Intent myIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
startActivity(myIntent);
}
Действие ACTION_MANAGE_OVERLAY_PERMISSION
непосредственно запускает экран разрешений «Рисовать поверх других приложений».
Изменить: мой код выше работает на 100% правильно
Но я только что обнаружил, что многие ребята все еще ищут, как можно разрешить ACTION_MANAGE_OVERLAY_PERMISSION
постоянно, например, если у пользователя есть разрешение Permission Once, тогда не спрашивайте его каждый раз, когда он открывает приложение, поэтому слушайте решение для вас -
Проверьте, есть ли у устройства API 23+
если 23+ API, проверьте, есть ли у пользователя разрешение или нет
если у него было разрешение один раз, не водите его, Settings.ACTION_MANAGE_OVERLAY_PERMISSION
а если еще не разрешил, попросите проверку разрешения во время
Поместите строку ниже в свой onCreate()
метод. Поместите это послеsetContentView
checkPermission();
Теперь введите код ниже в 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 {
}
}
}
Теперь, наконец, код метода 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);
}
}
}
И не забудьте объявить эту общедоступную переменную в своем классе
public static int ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE = 5469;