SYSTEM_ALERT_WINDOW – как получить это разрешение автоматически на Android 6.0 и targetSdkVersion 23

Facebook, Evernote, Pocket – все приложения получают это разрешение на Android 6.0 автоматически, даже если они нацелены на 23 ( targetSdkVersion=23 ).

Было много документации относительно новой модели разрешения Marshmallow. Один из них: SYSTEM_ALERT_WINDOW был «продвинут» до classа «выше опасного», что требует специального вмешательства пользователя, чтобы приложения были предоставлены им. Если приложение имеет targetSdkVersion 22 или ниже, приложение автоматически получает это разрешение (если требуется в манифесте).

Тем не менее, я заметил некоторые приложения, которые получают это разрешение, без необходимости отправлять пользователя на специальную страницу настроек Draw over other apps . Я видел Facebook, Evernote, Pocket – и, возможно, их больше.

Кто-нибудь знает, как приложение может получить это разрешение без участия пользователя в Settings -> Apps -> Draw over other apps ?

благодаря

Это новое поведение, введенное в Marshmallow 6.0.1 .

Каждое приложение, запрашивающее разрешения SYSTEM_ALERT_WINDOW и устанавливаемое через Play Store (версия 6.0.5 или выше, требуется), автоматически предоставит разрешение.

Если вместо этого приложение загружается набок, разрешение автоматически не предоставляется. Вы можете попробовать загрузить и установить Evernote APK с сайта apkmirror.com . Как вы можете видеть, вам необходимо вручную предоставить разрешение в Settings -> Apps -> Draw over other apps .

Это коммиты [1] [2], которые позволяют Play Store предоставлять автоматическое предоставление разрешения SYSTEM_ALERT_WINDOW .

Yeh After Marshmallow придет на Android, повысив уровень безопасности, но для

 SYSTEM_ALERT_WINDOW 

вы можете показать плавающее действие и все, что вы можете onCreate() пользователя дать разрешение на него. Следуя кодам в вашем onCreate() Поместите этот код после setContentView

  // Check if Android M or higher if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // Show alert dialog to the user saying a separate permission is needed // Launch the settings activity if the user prefers Intent myIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION); startActivity(myIntent); } 

Действие ACTION_MANAGE_OVERLAY_PERMISSION непосредственно запускает экран разрешения « ACTION_MANAGE_OVERLAY_PERMISSION по другим приложениям».


Изменить: мой выше код работает 100% Исправить

Но я просто обнаружил, что многие ребята все еще ищут, как можно разрешить ACTION_MANAGE_OVERLAY_PERMISSION навсегда, как если бы пользователь разрешил разрешение. После этого не спрашивайте об этом каждый раз, когда он открывает приложение, так что слушайте решение для вас –

  1. Проверьте, имеет ли устройство API 23+

  2. если 23+ API затем проверяет, разрешено ли пользователю или нет

  3. если разрешить один раз, не отвезти его в Settings.ACTION_MANAGE_OVERLAY_PERMISSION и если он еще не разрешил, попросите проверить разрешение во время выполнения

Поместите строку ниже в свой onCreate() . Поместите это после setContentView

 checkPermission(); 

Теперь onActivityResult код в 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); } } } 

И не забудьте объявить эту общедоступную переменную в своем classе

 public static int ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE = 5469; 

Если приложение предназначено для API 22 или ниже, то Play Store предоставит разрешения SYSTEM_ALERT_WINDOW и другие, когда пользователь нажмет на установку (показывая предупреждение), даже если его устройство Android 6.0. В противном случае, если приложение предназначено для API 23 или выше, разрешение будет запрашиваться в течение времени выполнения.

  • Обзор разрешений IIS7 - ApplicationPoolIdentity
  • npm ошибки установки с ошибкой: ENOENT, chmod
  • Последнее обновление по включению и отключению мобильных данных программно
  • Правильный владелец / группа / разрешения для файлов / папок сайта Apache 2 в Mac OS X?
  • Оверлей экрана обнаружены блоки Android-разрешения
  • Какое разрешение требуется для доступа к Интернету из приложения Android?
  • Веб-просмотр Android: загрузка файлов, таких как браузеры
  • Диалоговое окно подтверждения разрешения хоста
  • Разрешение отказа: для этого требуется андроид.permission.INTERACT_ACROSS_USERS_FULL
  • Разрешения Android M: onRequestPermissionsResult () не вызывается
  • проблема с правами на запись файла в папку «Program Files»
  • Давайте будем гением компьютера.