我有一个名为BasicManagedProfile的Android演示程序,它实现了一些有关设备策略管理器的新功能。
现在我有一个关于如何在托管配置文件中应用程序时获取其他软件包名称的问题。例如,演示显示了chrome和计算器名称字符串以进行演示。
/**
* Package name of calculator
*/
private static final String PACKAGE_NAME_CALCULATOR = "com.android.calculator2";
/**
* Package name of Chrome
*/
private static final String PACKAGE_NAME_CHROME = "com.android.chrome";
但我想知道如何让其他人喜欢拨号和联系。
我尝试使用getInstalledPackages()
或queryIntentActivities()
但失败了。
顺便说一句,我使用方法addCrossProfileIntentFilter()
,如下所示:
IntentFilter filter = new IntentFilter(Intent.ACTION_MAIN); filter.addCategory(Intent.CATEGORY_LAUNCHER);
MyActivity.deviceManager.addCrossProfileIntentFilter(MyReceiver.getComponentName(context), filter, FLAG_MANAGED_CAN_ACCESS_PARENT | FLAG_PARENT_CAN_ACCESS_MANAGED);
但queryIntentActivities()
无法返回正确的应用列表。
请给我一些关于这些的建议。
答案 0 :(得分:1)
不是解决方案,而是小费。
通过添加标记GET_UNINSTALLED_PACKAGES
,您可以检索包含来自主帐户的应用的列表:
mContext.getPackageManager()
.getInstalledApplications(
PackageManager.GET_UNINSTALLED_PACKAGES);
卸载主帐户中没有持久数据的应用程序后,此方法不会返回该应用程序。所以它完成了部分工作。
但是,该方法可能会返回真正卸载的应用程序。
如果设置了标志GET_UNINSTALLED_PACKAGES并且没有设置包 在已安装的应用程序列表中找到该应用程序 从已卸载的列表中检索信息 应用程序(包括已安装的应用程序以及 数据目录的应用程序,即曾经的应用程序 删除DONT_DELETE_DATA标志设置)。
答案 1 :(得分:0)
我已经解决了这个问题。该方法是从管理员配置文件中传递数据。我使用intent,file或contentprovider来加载数据。
我做了一个简单的演示。链接如下: https://github.com/guiyu/DevicePolicyTest.git
答案 2 :(得分:-1)
您可以尝试使用此功能获取设备上所有应用程序的包名称
List<ApplicationInfo> pkgAppsList = mContext.getPackageManager()
.getInstalledApplications(
PackageManager.GET_META_DATA);
for (ApplicationInfo appInfo : appsList) {
// you can get package name by appInfo.packageName
Log.d("Package Name",": " + appInfo.packageName);
}
这里mContext包含Context,你可以在不使用Context的情况下直接在Activity里面调用getPackageManager()方法。