Окно системного оповещения - как получить это разрешение автоматически на Android 6.0 и targetSdkVersion 23
Facebook, Evernote, Pocket-все приложения получают это разрешение на Android 6.0 автоматически, даже если они нацелены на 23 (targetSdkVersion=23
).
было много документации относительно новой модели разрешения зефира. Один из них -SYSTEM_ALERT_WINDOW
был "повышен" до "выше опасного" класса разрешений, что требует специального вмешательства пользователя для того, чтобы приложения были предоставлены с ними. Если приложение имеет targetSdkVersion
22 или ниже, приложение получает это разрешение автоматически (если запрошено в манифесте).
тем не менее, я заметил некоторые приложения, которые получают это разрешение, без необходимости отправлять пользователя на специальную страницу настройки Draw over other apps
разрешения. Я видел Facebook, Evernote, Pocket-и, возможно, есть еще.
кто-нибудь знает, как приложение может быть предоставлено такое разрешение без пользователя пройти Settings -> Apps -> Draw over other apps
?
спасибо
3 ответа:
это новое поведение, введенное в зефир 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
разрешения.
Да после зефира приходят 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
постоянно, как если бы пользователь разрешил разрешение один раз, то не спрашивайте его каждый раз, когда он открывает приложение так услышать решение для вас -
проверьте, если устройство имеет 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)) { // 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 или выше, так что разрешение будет запрашиваться для предоставления во время выполнения.