【发布时间】:2012-03-08 17:24:57
【问题描述】:
如果我要打开其他应用程序,我正在开发一个应用程序。唯一的问题是我不知道如何引用第三方应用程序。我打算使用一个意图。您可以仅使用包名来引用它,还是需要 Main Activity 意图。有什么简单的方法可以找到正确的意图,然后参考它。
【问题讨论】:
如果我要打开其他应用程序,我正在开发一个应用程序。唯一的问题是我不知道如何引用第三方应用程序。我打算使用一个意图。您可以仅使用包名来引用它,还是需要 Main Activity 意图。有什么简单的方法可以找到正确的意图,然后参考它。
【问题讨论】:
如果我要打开其他应用程序,我正在开发一个应用程序。
我将此解释为您正在创建一个启动器,类似于在主屏幕上找到的启动器。
您能否仅使用包名来引用它,或者您是否需要 Main Activity 意图。
启动器使用ACTION_MAIN/CATEGORY_LAUNCHERIntent。
有没有什么简单的方法可以找到正确的意图,然后参考它。
使用PackageManager 查找设备上所有可能的ACTION_MAIN/CATEGORY_LAUNCHER 活动,然后将这些活动显示给用户以供选择。然后,您可以构建一个合适的Intent 来启动他们的具体选择。
Here is a sample project 实现了一个启动器。
为了列出可以启动的东西,该示例应用使用了:
PackageManager pm=getPackageManager();
Intent main=new Intent(Intent.ACTION_MAIN, null);
main.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> launchables=pm.queryIntentActivities(main, 0);
这里是实际的启动逻辑,基于用户单击ListActivity 中的这些“启动项”之一:
@Override
protected void onListItemClick(ListView l, View v,
int position, long id) {
ResolveInfo launchable=adapter.getItem(position);
ActivityInfo activity=launchable.activityInfo;
ComponentName name=new ComponentName(activity.applicationInfo.packageName,
activity.name);
Intent i=new Intent(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
i.setComponent(name);
startActivity(i);
}
【讨论】: