【问题标题】:How to acquire fully qualified names of installed applications in Android如何在 Android 中获取已安装应用程序的完全限定名称
【发布时间】:2014-02-24 18:40:43
【问题描述】:
我尝试创建一个可以启动其他应用程序(例如 Gmail 或 Facebook 或任何已安装的应用程序)的应用程序。
我尝试使用以下代码:
PackageManager pm = MainActivity.this.getPackageManager();
try
{
Intent it = pm.getLaunchIntentForPackage("FULLY QUALIFIED NAME");
if (null != it)
MainActivity.this.startActivity(it);
}
catch (ActivityNotFoundException e)
{ }
但是,它需要应用程序的完全限定名称。
我怎样才能获得它?有没有内置的方法来获取它们?
【问题讨论】:
标签:
android
fully-qualified-naming
【解决方案1】:
您可以像这样获得所有应用程序的列表:
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));
}
【解决方案2】:
一个应用程序可能有零个、一个或多个属于启动器的活动。因此,启动器不应该问“所有应用程序是什么,每个应用程序的启动 Intent 是什么?”相反,启动器应该问“我应该展示哪些活动?”
这是使用PackageManager 和queryIntentActivities() 完成的。 This 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);
然后,您可以使用任何您想要呈现该launchables 集合的机制。示例项目将它们放在ListView 中。