通过setPermissionGrantState或类似方式自动授予ACTION_MANAGE_OVERLAY_PERMISSION

时间:2017-05-31 13:14:08

标签: android android-permissions device-policy-manager

我试图自动为我的应用授予一些运行时权限,包括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分发的应用程序。不幸的是,我的应用程序不是那样分发的。

3 个答案:

答案 0 :(得分:1)

  

包括ACCESS_FINE_LOCATION,READ_PHONE_STATE以及ACTION_MANAGE_OVERLAY_PERMISSION

ACTION_MANAGE_OVERLAY_PERMISSION不是权限。

  

,而是android.settings.action.MANAGE_OVERLAY_PERMISSION

这不是许可。这是Intent行动。

您可能需要的权限is SYSTEM_ALERT_WINDOW

答案 1 :(得分:1)

我能够从我的设备所有者应用中自动授予此权限:

        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后,并在设置应用中授予权限。虽然与此方式授予的其他权限不同,但似乎用户可以选择在设置中禁用它。我的targetSdkVersion是26

答案 2 :(得分:0)

这是棉花糖6.0.1中引入的新行为。

每个请求SYSTEM_ALERT_WINDOW权限并通过Play商店安装(要求版本6.0.5或更高版本)的应用都将自动授予该权限。

如果相反,该应用是侧面加载的,则不会自动授予该权限。您可以尝试从apkmirror.com下载并安装Evernote APK。如您所见,您需要在“设置”->“应用”->“在其他应用上绘图”上手动授予权限。

这些是提交[1] [2],它们允许Play商店自动授予SYSTEM_ALERT_WINDOW权限。