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