Определяли ли вы права доступа во время выполнения, если вы проверяете зефир или устройства уровня API выше?
Проверьте разрешение наложения
public static int OVERLAY_PERMISSION_REQ_CODE = 1234;
public void someMethod() {
if (!Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, OVERLAY_PERMISSION_REQ_CODE);
}}
В onActivityResult,
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == OVERLAY_PERMISSION_REQ_CODE) {
if (!Settings.canDrawOverlays(this)) {
// SYSTEM_ALERT_WINDOW permission not granted...
}
}
}
Наконец ----
Проверьте, имеет ли устройство API 23 +
, если API 23+, затем проверьте, есть ли у пользователя разрешение или нет
если у вас есть разрешение, не ведите его к 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)) {
// You don't have permission
checkPermission();
} else {
// Do as per your logic
}
}
}
Теперь, наконец, код метода 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;
Happy Coding:)