【问题标题】:Android: Granting SET_TIME permission as a Device Owner using Device Policy ManagerAndroid:使用设备策略管理器授予 SET_TIME 权限作为设备所有者
【发布时间】:2021-01-16 05:53:39
【问题描述】:

我正在开发一个 COSU/KIOSK 应用程序,我需要手动更新设备上的时间。

我正在使用 AlertManager.setTime(Calendar) 执行此操作,但我无法授予我的应用程序所需的 SET_TIME 权限。

应用程序是设备所有者,这允许我使用许多其他系统权限,例如

android:name="android.permission.REBOOT"
android:name="android.permission.SHUTDOWN"
android:name="android.permission.WRITE_SETTINGS"
android:name="android.permission.INSTALL_PACKAGES"
android:name="android.permission.DELETE_PACKAGES"

所有这些权限都授予了我的应用程序,只需将它们列在manifest.xml

但是SET_TIME 不起作用。

我也尝试使用设备策略管理器

mDevicePolicyManager.setPermissionGrantState(mAdminComponentName, getPreferredPackageName(),
                Manifest.permission.SET_TIME, DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED);

此函数返回false,表示它无法授予权限。

如何在不提示用户向我的应用程序授予此权限的情况下解决此问题。

【问题讨论】:

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


    【解决方案1】:

    如果您的目标设备是 api 28+(android 9 和更高版本),您可以使用 setTime(ComponentName admin, long millis) 函数进行设置。

    对于较低的 android 版本,我不得不依靠设备制造商的 api 来设置设备时间。

    Manifest.permission.SET_TIME 是受保护/系统权限,遗憾的是 deviceOwner 无法通过setPermissionGrantState() 函数授予任何受保护权限。 它的文档中有一个非常重要的词:

    为特定应用设置 !runtime! 权限的授予状态。

    【讨论】:

    • 遗憾的是,我的目标是较低的目标 API。我的困惑来自于我可以做其他也需要系统许可的事情,例如,我能够在运行时静默重新安装应用程序,而无需任何用户交互。设定一个新的时间比我能做的事情危险得多。
    • 好吧,如果你是DeviceOwner,安装应用不需要系统权限
    猜你喜欢
    • 2019-09-20
    • 2021-12-21
    • 2011-05-30
    • 2014-01-17
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    相关资源
    最近更新 更多