[英]Get list of Non System Applications
我可以使用包管理器获取已安装包的列表,但这包括各种系统包。 我是否可以在此列表中应用任何过滤器,仅显示从主屏幕显示应用程序列表时显示的应用程序?
boolean nonSystem = (packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0;
您可以使用意图过滤从主屏幕获取应用程序列表:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> apps = getPackageManager().queryIntentActivities(intent, 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
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.