DevicePolicyManager.setApplicationHidden 的实际行为
Actual behavior of DevicePolicyManager.setApplicationHidden
有没有人足够了解 SDK 来告诉我为什么在将我的应用设为设备所有者并执行 DevicePolicyManager.setApplicationHidden
以获得应用列表后我找不到它们,除非我将 PackageManager.getInstalledApplications(PackageManager.GET_META_DATA or PackageManager.MATCH_UNINSTALLED_PACKAGES)
在查询标志中? (意味着 GET_META_DATA
将不起作用,隐藏的应用程序将不会被隐藏)
我试图找到它们以取消隐藏它们——但没有成功,除非我也在寻找已卸载的。
我的理论是 Android 并没有真正隐藏它们,而是实际上将它们标记为已卸载但保留所有数据 — 但我没有在文档中找到任何关于它的信息。想知道是否有人可以澄清这种行为(来源)。
谢谢!
命名有歧义但确实如此 setApplicationHidden
effectively uninstalls the app but keeps the APK and data in storage. If you're looking for a way to prevent use of the app without uninstalling it you can try setPackagesSuspended
.
您可以在 PackageManagerService.setApplicationHiddenSettingAsUser()
(下面的相关摘要)中找到 setApplicationHidden
的来源。它的逻辑很简单:
setApplicationHiddenSettingAsUser
调用 packageSetting.setHidden()
将包标记为对用户隐藏,
PackageManagerService
的其他方法调用packageSetting.getHidden()
来决定是否应该退回包裹。
setApplicationHiddenSettingAsUser
的代码摘要:
@Override
public boolean setApplicationHiddenSettingAsUser(String packageName, boolean hidden,
int userId) {
PackageSetting pkgSetting;
...
try {
...
synchronized (mPackages) {
pkgSetting = mSettings.mPackages.get(packageName);
...
if (pkgSetting.getHidden(userId) != hidden) {
pkgSetting.setHidden(hidden, userId);
mSettings.writePackageRestrictionsLPr(userId);
...
}
}
...
}
}
有没有人足够了解 SDK 来告诉我为什么在将我的应用设为设备所有者并执行 DevicePolicyManager.setApplicationHidden
以获得应用列表后我找不到它们,除非我将 PackageManager.getInstalledApplications(PackageManager.GET_META_DATA or PackageManager.MATCH_UNINSTALLED_PACKAGES)
在查询标志中? (意味着 GET_META_DATA
将不起作用,隐藏的应用程序将不会被隐藏)
我试图找到它们以取消隐藏它们——但没有成功,除非我也在寻找已卸载的。
我的理论是 Android 并没有真正隐藏它们,而是实际上将它们标记为已卸载但保留所有数据 — 但我没有在文档中找到任何关于它的信息。想知道是否有人可以澄清这种行为(来源)。
谢谢!
命名有歧义但确实如此 setApplicationHidden
effectively uninstalls the app but keeps the APK and data in storage. If you're looking for a way to prevent use of the app without uninstalling it you can try setPackagesSuspended
.
您可以在 PackageManagerService.setApplicationHiddenSettingAsUser()
(下面的相关摘要)中找到 setApplicationHidden
的来源。它的逻辑很简单:
setApplicationHiddenSettingAsUser
调用packageSetting.setHidden()
将包标记为对用户隐藏,PackageManagerService
的其他方法调用packageSetting.getHidden()
来决定是否应该退回包裹。
setApplicationHiddenSettingAsUser
的代码摘要:
@Override
public boolean setApplicationHiddenSettingAsUser(String packageName, boolean hidden,
int userId) {
PackageSetting pkgSetting;
...
try {
...
synchronized (mPackages) {
pkgSetting = mSettings.mPackages.get(packageName);
...
if (pkgSetting.getHidden(userId) != hidden) {
pkgSetting.setHidden(hidden, userId);
mSettings.writePackageRestrictionsLPr(userId);
...
}
}
...
}
}