3

我有一个名为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()不能返回正确的应用程序列表。请给我一些关于这些的建议。

4

3 回答 3

1

不是解决方案,而是提示。

通过添加标志GET_UNINSTALLED_PACKAGES,您可以检索包含来自主帐户的应用程序的列表:

mContext.getPackageManager()
            .getInstalledApplications(
                    PackageManager.GET_UNINSTALLED_PACKAGES);

卸载主账户中没有持久数据的应用后,该方法不会返回。所以它完成了部分工作。

但是,该方法也可能返回真正卸载的应用程序。

如果设置了标志 GET_UNINSTALLED_PACKAGES 并且如果未在已安装应用程序列表中找到该包,则从已卸载应用程序列表中检索应用程序信息(包括已安装应用程序以及具有数据目录的应用程序,即已使用 DONT_DELETE_DATA 删除的应用程序标志集)。

于 2015-01-20T19:30:32.433 回答
0

我已经解决了这个问题。该方法是传递来自管理配置文件的数据。我使用意图、文件或内容提供者来加载数据。

我做了一个简单的demo。链接如下: https://github.com/guiyu/DevicePolicyTest.git

于 2015-01-26T06:49:47.640 回答
-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,你可以直接在activity内部调用getPackageManager()方法而不使用Context。

于 2014-12-05T11:19:57.530 回答