我需要显示一个包含所有已安装应用程序的屏幕。我已经可以这样做了,但是我需要过滤一些系统应用程序。我正在这样做:
if((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1)
这可行,但问题是它隐藏了系统、视频播放器和录音机等应用程序。但是,我也需要这些应用程序出现。问题是,如何做到这一点?
我需要显示一个包含所有已安装应用程序的屏幕。我已经可以这样做了,但是我需要过滤一些系统应用程序。我正在这样做:
if((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1)
这可行,但问题是它隐藏了系统、视频播放器和录音机等应用程序。但是,我也需要这些应用程序出现。问题是,如何做到这一点?
您必须通过它们的进程名称手动过滤它们,例如:
if(appInfo.packageName().equals("com.android.soundrecorder"))
如果这不起作用,请发布更多代码!
如果一个应用程序是一个非系统应用程序,它必须有一个启动意图,通过它可以启动它。如果启动意图为空,则它是一个系统应用程序。
系统应用示例:“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
}
}