如何过滤某些应用程序应用程序?

时间:2012-05-28 15:59:02

标签: android list filter android-applicationinfo

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

如果应用程序是非系统应用程序,则它必须具有启动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
    }
    else{
        //System App
    }
}