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