我需要显示包含所有已安装应用程序的屏幕。我已经可以这样做,但我需要过滤一些系统应用程序。我这样做:
if((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1)
这样可行,但问题是它隐藏了系统,视频播放器和录音机等应用程序。但是,我也需要这些应用程序。问题是,如何做到这一点?
答案 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
}
}