我想从我的应用程序启动所有已安装的应用程序。这是我获得所有已安装的应用程序
List<ApplicationInfo> applicationInfoList = packageManager.getInstalledApplications(PackageManager.GET_ACTIVITIES | PackageManager.GET_META_DATA);
if(applicationInfoList != null && !applicationInfoList.isEmpty()){
Collections.sort(applicationInfoList, new ApplicationInfo.DisplayNameComparator(
packageManager));
for (ApplicationInfo applicationInfo : applicationInfoList) {
Intent intent = packageManager.getLaunchIntentForPackage(applicationInfo.packageName);
if(intent != null){
ComponentName componentName = intent.getComponent();
//add componenet to a list
}
}
}
但我无法启动某些应用程序,如联系人和手机。这些应用程序的类名称为“ResolverActivity”。如何从我的应用程序启动这些应用程序?
先谢谢
答案 0 :(得分:1)
这是因为“联系人”和“电话”与“地图”和“谷歌纵横”是相同的应用程序。他们恰好有多个可开展的活动。
所以,你有两个选择:
坚持您想要“启动所有已安装的应用程序”的声明,在这种情况下您的现有代码是正确的(用户将选择是否显示联系人或电话),或
执行主屏幕启动器的操作,即“启动所有可启动的活动”,在这种情况下,您将错误地进行操作
对于后者,请对queryIntentActivities()
/ MAIN
LAUNCHER
使用Intent
,并使用结果来构建列表。 Here is a sample application证明了这一点。
答案 1 :(得分:0)
启动应用程序,您可以尝试这样做:
// start the app by invoking its launch intent
Intent i = getPackageManager().getLaunchIntentForPackage(applicationInfo.packageName);
try {
if (i != null) {
startActivity(i);
} else {
i = new Intent(applicationInfo.packageName);
startActivity(i);
}
} catch (ActivityNotFoundException err) {
Toast.makeText(ListInstalledApps.this, "Error launching app", Toast.LENGTH_SHORT).show();
}