我正在开发一个Launcher应用程序。我注意到相机和画廊有相同的包名,谷歌+和照片也有相同的包名。当我尝试启动相机/图库时,它打开图库,当我尝试启动照片/Google+时,我打开Google+。
我使用这个代码来获取应用程序列表。
Intent i = new Intent(Intent.ACTION_MAIN, null);
i.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> availableActivities = manager.queryIntentActivities(i, 0);
关于Camera,我知道我可以使用Intent来启动Camera,当应用程序名称是Camera,包名称是gallery,但可能有很多应用程序使用相同的东西。是否有一个通用的解决方案适用于所有的应用程序?
注::这就是我如何获得应用程序信息
for(ResolveInfo ri : availableActivities) {
AppItem app = new AppItem();
app.setLabel(ri.loadLabel(manager));
app.setName(ri.activityInfo.packageName);
quick_apps.add(app);
}
虽然他们有相同的包名,但他们有不同的名称,尝试这个来启动你的活动,使用下面的代码来启动活动
Intent localIntent = new Intent();
localIntent.setComponent(new ComponentName(
localResolveInfo.activityInfo.packageName,
localResolveInfo.activityInfo.name));
localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try
{
startActivity(localIntent);
} catch (ActivityNotFoundException localActivityNotFoundException)
{
Toast.makeText(mContext, "Package not found!", 0).show();
}