簡體   English   中英

Android:使用設備策略管理器以設備所有者身份授予 SET_TIME 權限

[英]Android: Granting SET_TIME permission as a Device Owner using Device Policy Manager

我正在開發 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!的授予狀態特定應用程序的許可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM