【问题标题】: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 是什么?”相反,启动器应该问“我应该展示哪些活动?”

这是使用PackageManagerqueryIntentActivities() 完成的。 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 中。

【讨论】:

  • 很好的解释,很有帮助。
猜你喜欢
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多