我的工作我的方式通過設備管理API,並同時調用上DevicePolicyManager
的setPermissionGrantState
功能我解決方法的設備管理員API沒有自己的空間
Unable to start receiver com.xx.admin.receivers.AdminReceiver: java.lang.SecurityException: Admin ComponentInfo{com.xx/com.xx.admin.receivers.AdminReceiver} does not own the profile.
據我瞭解,有一定的函數只能由設備/配置文件所有者運行。此外,NFC provisioning and dpm command
是通過它的方式。但是,當我分發我的應用時,這並不是我想要繼續的方式。有沒有什麼辦法可以自動執行此授權,方法是請求用戶允許我的應用程序使用/不使用root的配置文件所有權。
這裏是我的接收機
class AdminReceiver : DeviceAdminReceiver() {
var manager: DevicePolicyManager? = null
override fun onEnabled(context: Context?, intent: Intent?) {
super.onEnabled(context, intent)
manager = getManager(context)
manager!!.setPermissionGrantState(getComponentName(context!!)
, "com.abc.app"
, Manifest.permission.WRITE_EXTERNAL_STORAGE
, DevicePolicyManager.PERMISSION_GRANT_STATE_DENIED)
}
fun getComponentName(context: Context): ComponentName {
return ComponentName(context.applicationContext, AdminReceiver::class.java)
}
}
嘿,謝謝你,雖然它抽象的API它不提供解決方法,因爲該設備仍然需要恢復出廠設置,這使得它不可行,如果我不擁有該設備,如果我需要分發它在谷歌播放 – humblerookie
事實上,如果沒有出廠重置,您無法在整個設備上獲得設備所有者權限,但這是設備所有者完全控制設備的安全功能。不過,您可以在設備中創建工作資料,只需要您想要控制的應用程序,您將擁有配置文件所有者權限。 – Fred