繁体   English   中英

获取非系统应用程序列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM