问题描述
我正在开发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
,表示它无法授予权限。
如何在不提示用户向我的应用程序授予此权限的情况下解决此问题。
解决方法
如果您定位的设备是api 28+(Android 9及更高版本),则可以使用setTime(ComponentName admin,long millis)函数对其进行设置。
对于较低的android版本,我必须依靠设备制造商api来设置设备时间。
Manifest.permission.SET_TIME
是受保护的/系统权限,可惜deviceOwner无法使用setPermissionGrantState()
功能授予任何受保护的权限。
其文档中有一个非常重要的词:
设置特定应用程序的!runtime!权限的授予状态。