Оверлей экрана обнаружены блоки Android-разрешения

Я заметил странную проблему с моим Android-приложением на моем новом телефоне. Всплывающие всплывающие окна SDK 23, такие как внешнее хранилище, блокируются приложением ниже. Сначала я думал, что это связано с моим телефоном, но, похоже, это не влияет на мои другие установленные приложения.

Возможно, эта проблема связана с установкой отладочной версии или что-то не так с моей обработкой разрешений? Я думал, что это может быть связано с одной из рекламных платформ, которые я использую, но я попытался отключить их, и это все еще появилось

Введите описание изображения здесь

Я вставил функцию сохранения изображений, которая генерирует этот запрос разрешения ниже. Я использую Dexter, чтобы сэкономить на написании целой группы ужасных шаблонов

public static void saveToExternalStorageIfAllowed(final Context context, final Bitmap bitmapImage, final String title) { final Tracker t = ((LoLHistory) context.getApplicationContext()).getTracker(LoLHistory.TrackerName.APP_TRACKER); // saving to publicly visible/accessible folder. Requires write permission int permissionCheck = ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE); if (permissionCheck != PackageManager.PERMISSION_GRANTED) { // do not have permissions to write, request t.send(new HitBuilders.EventBuilder() .setCategory("FILE") .setAction("PermissionMissing") .setLabel("WRITE_EXTERNAL") .build()); Dexter.checkPermission(new PermissionListener() { @Override public void onPermissionGranted(PermissionGrantedResponse response) { t.send(new HitBuilders.EventBuilder() .setCategory("FILE") .setAction("PermissionGranted") .setLabel("WRITE_EXTERNAL") .build()); saveToExternalStorage(context, bitmapImage, title); } @Override public void onPermissionDenied(PermissionDeniedResponse response) { t.send(new HitBuilders.EventBuilder() .setCategory("FILE") .setAction("PermissionDenied") .setLabel("WRITE_EXTERNAL") .build()); } @Override public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) {/* ... */} }, Manifest.permission.WRITE_EXTERNAL_STORAGE); } else { saveToExternalStorage(context, bitmapImage, title); } } private static void saveToExternalStorage(Context context, Bitmap bitmapImage, String title) { Tracker t = ((LoLHistory) context.getApplicationContext()).getTracker(LoLHistory.TrackerName.APP_TRACKER); // create image folder if does not exist File imagesFolder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), context.getString(R.string.app_name)); if (!imagesFolder.mkdirs() && !imagesFolder.isDirectory()) { String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { // failed to create and is not a directory. Something went wrong... t.send(new HitBuilders.EventBuilder() .setCategory("FILE") .setAction("CreateDirFailed") .setLabel(imagesFolder.getPath()) .build()); } else { t.send(new HitBuilders.EventBuilder() .setCategory("FILE") .setAction("CreateDirFailedMediaNotMounted") .setLabel(imagesFolder.getPath()) .build()); } } // delete image if already exists so FOS can create a new one File image = new File(imagesFolder, title + ".jpg"); if (image.exists()) { // image already exists, deleting to start from clean state if (!image.delete()) { // failed to delete t.send(new HitBuilders.EventBuilder() .setCategory("FILE") .setAction("DeleteFailed") .setLabel(image.getPath()) .build()); } } // compress bitmap and write to file stream. FOS creates file if does not exist FileOutputStream out = null; try { out = new FileOutputStream(image); bitmapImage.compress(Bitmap.CompressFormat.JPEG, 50, out); out.flush(); } catch (Exception e) { e.printStackTrace(); t.send(new HitBuilders.ExceptionBuilder() .setDescription(e.getLocalizedMessage()) .setFatal(true) .build()); } finally { try { if (out != null) { out.close(); } } catch (IOException e) { e.printStackTrace(); t.send(new HitBuilders.ExceptionBuilder() .setDescription(e.getLocalizedMessage()) .setFatal(true) .build()); } } // get Uri from saved image Uri uriSavedImage = Uri.fromFile(image); // media scan the new file so it shows up in the gallery Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); mediaScanIntent.setData(uriSavedImage); context.sendBroadcast(mediaScanIntent); } 

ОБНОВЛЕНИЕ . Поскольку многие люди упоминают об этом, как уже говорилось ранее, эта проблема связана не с тем, что установлено приложение наложения. В меню « Рисование над другими приложениями» у меня есть следующие приложения: Google Play Музыка, Службы Google Play, Фотографии, TalkBack, Twitch, Twitter. Все они настроены на No.

Кроме того, я тестировал другие приложения, такие как Google Hangouts и Twitter, которые также имеют действия, требующие Dangerous Permissions, и я могу предоставить эти разрешения без этой проблемы.


РЕШЕНИЕ : Я назвал ответ Р. Загорского решением, так как он включает в себя множество общих случаев. Для меня это был Toast который нарушал мой поток разрешений. Это всплывающее окно потратило так много времени, отправив меня на совершенно неправильный путь …

Это Toast я видел в течение первых нескольких секунд после появления всплывающего окна разрешения:

Введите описание изображения здесь

Solutions Collecting From Web of "Оверлей экрана обнаружены блоки Android-разрешения"

Это всплывающее окно вызвано манифестом manifest.PERMISSION.SYSTEM_ALERT_WINDOW, объявленным манифестом. Это 3 категории разрешений, о которых разработчик должен знать:

  1. Нормальное разрешение – ничего не делать с ними, просто объявить в манифесте
  2. Уязвимые разрешения – объявить в манифесте и запросить разрешение в первый раз. Их можно изменить с помощью системных настроек
  3. Над опасными разрешениями: SYSTEM_ALERT_WINDOW и WRITE_SETTINGS относятся к этой категории. Они должны быть предоставлены, но не отображаются в системных настройках. Чтобы запросить его, вы не используете стандартный способ ( int checkSelfPermission (String permission) ), но вы должны проверить Settings.canDrawOverlays() или Settings.System.canWrite() соответственно

Если у вас нет разрешения SYSTEM_ALERT_WINDOW :

  1. Проверьте, есть ли у вас Toast видимый при взаимодействии с всплывающим окном разрешений. Хотя всплывающее окно Overlay Detected не упоминает об этом, Toast также считается оверлейным
  2. Проверьте, требуется ли какая-либо из ваших зависимостей .

Если вы не уверены, используете ли вы это разрешение, есть несколько тестовых примеров, которые вы можете сделать:

  1. Запросить это разрешение самостоятельно:

     public class MainActivity extends AppCompatActivity { public final static int REQUEST_CODE = 10101; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (checkDrawOverlayPermission()) { startService(new Intent(this, PowerButtonService.class)); } } 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)) { startService(new Intent(this, PowerButtonService.class)); } } } } 
  2. Проверьте, не является ли это или нет вашим делом

  3. Проверьте это сообщение, чтобы быть в курсе, что при установке приложения через Play Store это разрешение автоматически предоставляется (я не проверял, поэтому не могу подтвердить)

Модель разрешения может быть понята, иногда требуется больше копания.

Это не проблема, у вас просто установлено приложение для наложения, наиболее распространенными являются

  • Facebook Messenger
  • Whatsapp с включенным всплывающим окном
  • Свежие чаты
  • Viber
  • Любое приложение, отображающее меню или что-то на экране, является надстройкой.

Просто закройте его, затем попробуйте.

Это всплывающее окно стало проблемой с включением менеджера разрешений в Android Marshmallow. Если у вас есть какие-либо приложения, установленные на вашем телефоне, у которых есть разрешение на наложение на экран, есть несколько настроек разрешений, включая доступ к файлам, которые вы не можете изменить, не отключая сначала разрешения наложения на экране. Для меня, мое текстовое приложение и приложение facebook messenger являются виновниками. Каждый раз, когда я хочу предоставить любому другому приложению требуемые разрешения, я должен нажать кнопку «Параметры Open Settings» во всплывающем окне и отменить доступ к экрану для двух вышеупомянутых приложений, а затем снова открыть приложение, чтобы снова получить запрос на разрешение. Затем мне нужно снова включить разрешения оверлея, если я хочу, чтобы всплывающие окна моего сообщения или мои чаты. Это очень раздражает. Я думаю, что ваше приложение в порядке, управление разрешениями Android – просто путаный беспорядок.

При обнаружении наложения экрана система не позволит вам продолжать предоставлять разрешения для приложений. Поскольку наложение экрана может принимать вход пользователя. Поэтому перед предоставлением разрешений для ваших приложений вам необходимо отключить все «наложения экрана». Это не проблема вашего приложения. Все приложения, имеющие целевой SDK 23, получают эту проблему.

Обычно это вызвано использованием плавающего приложения.

Для пользователей Android Android Android:

 Open the Settings Then Applications > Application manager Press on More > Apps that can appear on top 

Если вы найдете приложение с пузырем, наложение экрана экрана. Если приложение настраивает яркость вашего телефона, отключите опцию наложения экрана в этих приложениях. Дело в том, что вам нужно выяснить, что такое преступное приложение, и отключить наложение экрана.

Источник: Исправлена ​​ошибка обложки экрана на Android

В основном функция Screen Overlay используется почти во всех приложениях, но дело в том, что последние сроки и условия использования андроидного зефира не позволяют предоставлять разрешения на грант без отключения экрана наложения всех приложений в текущей ситуации (в то время как разрешения на предоставление пользователям) …

Отключение экрана наложения всех приложений не решит проблему, на самом деле вам нужно также отключить наложение экрана скрытых системных приложений …

Решение прост и просто, просто нужно перейти на вариант «Показать системные приложения», применяя решение …

Источник: обнаружено наложение экрана – как решить эту проблему на любом устройстве Android

Я googled для стольких решений, но ничего не получилось. Затем я попробовал со всеми параметрами в настройках 🙂

Наконец, я могу дать вам определенный способ отключить оверлей –

Перейдите в меню «Настройка»> «Приложение»> «Приложение по умолчанию»> «Помощь устройства»> «Включить чтение текста на экране»