4

我正在尝试自动授予我的应用程序一些运行时权限,其中包括 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 分发的应用程序。不幸的是,我的应用程序不是以这种方式分发的。

4

3 回答 3

1

包括 ACCESS_FINE_LOCATION、READ_PHONE_STATE 以及 ACTION_MANAGE_OVERLAY_PERMISSION

ACTION_MANAGE_OVERLAY_PERMISSION不是许可。

而是 android.settings.action.MANAGE_OVERLAY_PERMISSION

那不是许可。那是一个Intent动作。

您可能想要的权限SYSTEM_ALERT_WINDOW.

于 2017-05-31T13:27:04.297 回答
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

于 2018-01-05T10:32:45.967 回答
0

这是 Marshmallow 6.0.1 中引入的新行为。

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

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

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

于 2018-10-24T07:37:16.780 回答