获取非系统应用程序列表

时间:2010-07-22 15:58:01

标签: java android

我可以使用软件包管理器获取已安装软件包的列表,但这包括各种系统软件包。我是否可以在此列表中应用任何过滤器,仅显示从主屏幕打开应用程序列表时显示的应用程序?

3 个答案:

答案 0 :(得分:6)

答案 1 :(得分:0)

您可以使用意图过滤从主屏幕获取应用程序列表:

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> apps = getPackageManager().queryIntentActivities(intent, 0);

答案 2 :(得分:0)

以上答案不会适用于所有情况

如果应用程序是非系统应用程序,则它必须具有启动Intent才能启动它。如果启动意图为null,则其为系统App,否则为非系统应用程序

系统应用程序示例:“com.android.browser.provider”,“com.google.android.voicesearch”。

对于上述应用,当您查询启动Intent时,您将获得NULL。

PackageManager pm = getPackageManager();
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
for(ApplicationInfo packageInfo:packages){
    if( pm.getLaunchIntentForPackage(packageInfo.packageName) != null ){
                String currAppName = pm.getApplicationLabel(packageInfo).toString();
               //This app is a non-system app
    }
}