我尝试创建一个可以启动其他应用程序的应用程序(F.E. Gmail或Facebook或任何已安装的应用程序)。
我尝试使用以下代码:
PackageManager pm = MainActivity.this.getPackageManager();
try
{
Intent it = pm.getLaunchIntentForPackage("FULLY QUALIFIED NAME");
if (it != null)
MainActivity.this.startActivity(it);
}
catch (ActivityNotFoundException e)
{ }
但是,它需要该应用程序的完全合格的名称。
我该如何获取?有什么内置方法可以获取它们吗?
一个应用程序可能具有零,一个或属于发射器中的几个活动。因此,发射器不应该问:"所有应用程序是什么,每个应用程序的启动Intent
是什么?"相反,发射器应该问:"我应该展示的所有活动是什么?"
使用PackageManager
和queryIntentActivities()
完成。该示例项目实现了一个完整的启动器。关键行是:
PackageManager pm=getPackageManager();
Intent main=new Intent(Intent.ACTION_MAIN, null);
main.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> launchables=pm.queryIntentActivities(main, 0);
然后,您可以使用要渲染launchables
收集的任何机制。示例项目将它们放在ListView
中。
您可以获取所有类似应用的列表:
final PackageManager packageManager = getPackageManager();
List<ApplicationInfo> packages = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);
现在,您已将其元数据存储在List
中。您可以以这样的方式获得他们的包裹名称:
for (ApplicationInfo packageInfo : packages) {
Log.d(TAG, packageManager.getLaunchIntentForPackage(packageInfo.packageName));
}