Автоматически предоставлять ACTION_MANAGE_OVERLAY_PERMISSION с помощью setPermissionGrantState или аналогичного

Я пытаюсь автоматически предоставить своему приложению некоторые разрешения во время выполнения, в том числе ACCESS_FINE_LOCATION, READ_PHONE_STATE, а также ACTION_MANAGE_OVERLAY_PERMISSION. Обратите внимание, что для этого требуются как минимум права доступа администратора устройства, которые у меня есть.

В то время как первые два работают безупречно через

  dpm.setPermissionGrantState(componentName, "com.my.app", Manifest.permission.READ_PHONE_STATE, DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED);
  dpm.setPermissionGrantState(componentName, "com.my.app", Manifest.permission.ACCESS_FINE_LOCATION, DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED);

ACTION_MANAGE_OVERLAY_PERMISSION вообще не работает. Я полагаю, что это может быть связано с тем, что это не часть Manifest.permission, а вместо этого android.settings.action.MANAGE_OVERLAY_PERMISSION. Однако это все еще разрешение, которое я хочу получить автоматически.

Редактировать: Хотя кажется, что это разрешение предоставляется автоматически любому приложению, которое его запрашивает, это касается только приложений, распространяемых через PlayStore. К сожалению, мое приложение НЕ распространяется таким образом.


person Syzygy    schedule 31.05.2017    source источник


Ответы (3)


включите ACCESS_FINE_LOCATION, READ_PHONE_STATE, а также ACTION_MANAGE_OVERLAY_PERMISSION

ACTION_MANAGE_OVERLAY_PERMISSION не является разрешением.

но вместо этого android.settings.action.MANAGE_OVERLAY_PERMISSION

Это не разрешение. Это действие Intent.

Разрешение, которое вам, вероятно, нужно , равно SYSTEM_ALERT_WINDOW.

person CommonsWare    schedule 31.05.2017
comment
К сожалению, использование SYSTEM_ALERT_WINDOW не работает. Теперь код выглядит так: dpm.setPermissionGrantState(componentName, com.my.app, Manifest.permission.SYSTEM_ALERT_WINDOW, DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED); - person Syzygy; 31.05.2017
comment
@Syzygy: я не использовал setPermissionGrantState(). Что значит не работает, конкретно? Обратите внимание, что SYSTEM_ALERT_WINDOW не является dangerous разрешением, поэтому, если setPermissionGrantState() соответствует dangerous разрешениям, это объясняет проблему. И, по моему опыту, оно в любом случае предоставляется автоматически, к моему великому раздражение. - person CommonsWare; 31.05.2017
comment
не работает означает, что это разрешение не предоставлено. В моем случае разрешение также не предоставляется автоматически. Не только это, но мне также нужно запретить пользователю отключать это разрешение (я знаю, что это кажется странным, но также имеет доступ администратора устройства (вариант использования ~ COSU)). - person Syzygy; 31.05.2017

Я смог автоматически предоставить это разрешение из приложения владельца устройства:

        devicePolicyManager.setPermissionGrantState(compName, this.packageName, Manifest.permission.SYSTEM_ALERT_WINDOW, DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED)

Вам также нужно в вашем манифесте:

    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

После этого Settings.canDrawOverlays() возвращает true, и разрешение предоставляется в приложении настроек. Хотя в отличие от других разрешений, предоставляемых таким образом, похоже, что пользователь может отключить его в настройках. Моя цельSdkVersion 26

person tagy22    schedule 05.01.2018

Это новое поведение, представленное в Marshmallow 6.0.1.

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

Если вместо этого приложение загружено, разрешение не предоставляется автоматически. Вы можете попробовать загрузить и установить APK-файл Evernote с сайта apkmirror.com. Как видите, вам нужно вручную предоставить разрешение в «Настройки» -> «Приложения» -> «Рисовать поверх других приложений».

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

person Yogesh Kumar    schedule 24.10.2018