Intereting Posts
Android-контроллер мультимедиа отображает отображение на короткое время Android GoogleMap 2 обновляет информацию динамически в InfoWindow с ImageView через универсальный загрузчик изображений Android – Эффект изображения Warp Org.eclipse.swt.SWTException: «Виджет удален» при попытке открыть AndroidManifest.xml Индексирование приложений с Ampersand в Deep Link не работает Расширяемый GridView с возможностью просмотра в Android Android: использование html5 для определения геолокации в webview с помощью javascript api Получение USB-кабеля, подключенного к входу IN / OUT с использованием EXTRA_PLUGGED, не работает Android: изображение поверх изображения Эксперименты с Android Content с менеджером тегов не показывают сеансов через несколько дней Android Google+ не может получить код авторизации Зачем использовать WeakReference для прослушивателей Android? Автозапуск Animation-list (animationDrawable) Eclipse говорит мне, что у моего проекта есть ошибки, ничего не выделено красным цветом Admob показывает тестовые объявления, но не реальные объявления

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

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

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

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

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

благодаря

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

Это новое поведение, введенное в 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 После того, как Marshmallow выйдет, Android сделает уровень безопасности более палкой, но для

 SYSTEM_ALERT_WINDOW 

Вы можете показать плавающее действие и все, что вы можете заставить пользователя дать разрешение на него. Следуя кодам в вашем методе 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 непосредственно запускает экран разрешения «Нарисуйся по другим приложениям».


редактировать

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

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

2) если 23+ api, то проверьте, разрешает ли пользователь или нет

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

  Put below line in in your Oncreate() method Put this after 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); } } } 

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

 public static int ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE= 5469; 

Приветствия! 😉

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