我尝试使用setPackagesSuspended()
方法(link to the reference)在完全托管的设备(Android 7.1.2)上暂停某些应用。根据文档,该方法的第一个参数是ComponentName
:
ComponentName:要检查的管理组件的名称;如果调用方是程序包访问委托,则为null。此值不得为null。
尽管文档有点矛盾,但我将值设置为null,因为我的应用具有来自Android设备策略的特殊委托:
"applications": [
{
"packageName": "our.business.app",
"installType": "REQUIRED_FOR_SETUP",
"defaultPermissionPolicy": "GRANT",
"managedConfiguration": {
xxx
},
"delegatedScopes": [
"ENABLE_SYSTEM_APP",
"PACKAGE_ACCESS"
],
"accessibleTrackIds": [
"4699927753xxx"
]
}
],
不幸的是,调用该方法时出现异常:
NullPointerException:ComponentName为空
此外,我不知道这是否相关,但是我有一些来自Android设备政策的怪异日志:
2020-01-22 15:38:27.835 7741-11774/? I/clouddpc: [CloudDpsClientImpl] Install app request, packagesToInstall: [our.business.app], packagesToUninstall: []
2020-01-22 15:38:33.217 7741-11774/? I/clouddpc: [PlaySyncUtils] Install error. Package name: [our.business.app]. Reason [TRANSIENT_ERROR]. Delay before retry: [0].
2020-01-22 15:38:33.219 7741-11780/? I/clouddpc: [PlaySyncUtils] Install error. Package name: [our.business.app]. Reason [TRANSIENT_ERROR]. Delay before retry: [0].
感谢您的帮助。
setPackagesSuspended()
已在API级别24(即Android 7.0)中添加,可以在我的设备上使用。 BUT DELEGATION_PACKAGE_ACCESS
已添加到API 26(即Android 8.0)中。这就是为什么它在我的设备上不起作用的原因。
它在API级别为27的设备上运行良好。