在使用设置为设备所有者模式的应用程序配置设备后,我试图使用enableSystemApp方法来激活默认系统应用程序。

有两种方法可以做到这一点:

1)void enableSystemApp(ComponentName admin,String packageName)-在这种情况下,您需要将包名称显式传递为String。运行正常,该应用已启用。

例如,称这个

devicePolicyManager.enableSystemApp(deviceAdminComponent, "com.google.android.gm");


启用默认的Gmail客户端,该客户端在配置后将被禁用。

2)int enableSystemApp(ComponentName admin,Intent intent)-在这种情况下,您需要传递一个隐式Intent,Android应启用与该Intent匹配的所有系统应用。另外,此方法返回与意图匹配的应用程序的int数量。这就是问题所在-我无法使该方法正常工作,它始终返回0,并且未启用任何功能。

这是我要使用的代码段:

Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_APP_EMAIL);
int i = devicePolicyManager.enableSystemApp(deviceAdminComponent, intent);


它不起作用,在这种情况下,i == 0。我究竟做错了什么?

任何帮助表示赞赏!

最佳答案

在幕后,接受意图查询的方法将获取响应该意图的活动的列表,然后遍历该列表,并传入程序包名称字符串以启用程序包。类似于执行此操作:

Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_APP_EMAIL);
List<ResolveInfo> infoes = getPackageManager()
    .queryIntentActivities(intent, MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE);
for (ResolveInfo info in infoes) {
  devicePolicyManager.enableSystemApp(deviceAdminComponent, info.activityInfo.packageName);
}


由于您可以使用程序包名称字符串启用应用程序,因此故障很可能在于解决意图的方式-它始终返回0的事实支持了这一点。

这是违反直觉的,但是我怀疑该应用程序无法解决意图,因为该应用程序已禁用。您是否尝试过一种不太通用的意图?我会尝试以下

Intent i;

// #1
// This goes full circle, but I expect it should work
i = getPackageManager().getLaunchIntentForPackage("com.google.an‌​droid.gm")

// #2
i = new Intent(Intent.ACTION_SEND).setPackageName("com.google.android.gm");

// #3
// Generic, but should resolve _all_ email apps - not just the default one.
// The mailto schema filters out non-email apps
i = new Intent(Intent.ACTION_VIEW , Uri.parse("mailto:"));


选项#1和#2更具学术性。两者都需要包名称,此时您也可以使用ACTION_MAIN的字符串重载。选项#3是我可能会仍然可以使用的通用类的最佳猜测,但由于该应用已被禁用,它仍然可能无法使用。

注意:我发现有趣的是,在查询可以解决意图的活动时,enableSystemApp仅传递enableSystemAppMATCH_DIRECT_BOOT_AWARE标志,因为MATCH_DIRECT_BOOT_UNAWAREMATCH_DISABLED_COMPONENTS标志在这种情况下似乎更为相关。

关于android - DevicePolicyManager.enableSystemApp()方法无法按预期工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47942934/

10-09 09:19