如何获取已安装的android应用程序列表并选择一个运行

本周早些时候我提出了一个类似的问题,但我仍然不知道如何获得所有安装的应用程序的列表,然后选择一个来运行。

我试过了:

Intent intent = new Intent(ACTION_MAIN);
intent.addCategory(CATEGORY_LAUNCHER);

并且这仅显示预安装的应用程序或可以运行ACTION_MAIN意图类型的应用程序。

我也知道我可以使用PackageManager来获取所有已安装的应用程序,但是如何使用它来运行特定的应用程序?


以下是获取安装在Android上的活动/应用程序列表的代码:

Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> pkgAppsList = context.getPackageManager().queryIntentActivities( mainIntent, 0);

您将获得ResolveInfo中的所有必要数据以启动应用程序。 你可以在这里检查ResolveInfo javadoc。


这是使用packageManager的更简洁的方法

final PackageManager pm = getPackageManager();
//get a list of installed apps.
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);

for (ApplicationInfo packageInfo : packages) {
    Log.d(TAG, "Installed package :" + packageInfo.packageName);
    Log.d(TAG, "Source dir : " + packageInfo.sourceDir);
    Log.d(TAG, "Launch Activity :" + pm.getLaunchIntentForPackage(packageInfo.packageName)); 
}
// the getLaunchIntentForPackage returns an intent that you can use with startActivity() 

更多信息在这里http://qtcstation.com/2011/02/how-to-launch-another-app-from-your-app/


另一种过滤系统应用程序的方法(适用于上述示例):

/**
 * Return whether the given PackgeInfo represents a system package or not.
 * User-installed packages (Market or otherwise) should not be denoted as
 * system packages.
 * 
 * @param pkgInfo
 * @return
 */
private boolean isSystemPackage(PackageInfo pkgInfo) {
    return ((pkgInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) ? true
            : false;
}
链接地址: http://www.djcxy.com/p/24601.html

上一篇: How to get a list of installed android applications and pick one to run

下一篇: Getting Android owner's email address nicely