1

我需要显示一个包含所有已安装应用程序的屏幕。我已经可以这样做了,但是我需要过滤一些系统应用程序。我正在这样做:

if((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1)

这可行,但问题是它隐藏了系统、视频播放器和录音机等应用程序。但是,我也需要这些应用程序出现。问题是,如何做到这一点?

4

2 回答 2

2

您必须通过它们的进程名称手动过滤它们,例如:

if(appInfo.packageName().equals("com.android.soundrecorder"))

如果这不起作用,请发布更多代码!

于 2012-05-28T16:12:08.757 回答
1

如果一个应用程序是一个非系统应用程序,它必须有一个启动意图,通过它可以启动它。如果启动意图为空,则它是一个系统应用程序。

系统应用示例:“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
    }
    else{
        //System App
    }
}
于 2013-08-19T20:17:40.770 回答