2017-10-13 71 views
0

我正在使用Package Manager类获取所有已安装应用程序的列表。我试着用下面的标志来确定什么是“用户应用程序”与“系统应用”:如何确定应用程序抽屉中的Android应用程序列表

ApplicationInfo.FLAG_SYSTEM 
ApplicationInfo.FLAG_UPDATED_SYSTEM_APP 

这个工作,但不是我想要的确切方式。我希望能够筛选所有应用程序的列表以确定:此应用程序可在应用程序抽屉中看到吗?

我不想与低级系统应用程序进行交互,因为这可能会导致一些不良的副作用。但我想包含诸如“com.google.chrome”之类的内容,因为它是应用程序抽屉中的应用程序,但在技术上作为系统应用程序进行安装。

我调试到Package Manager返回的ApplicationInfo列表中,发现某些应用程序的Int Icon值为0或其他值(1254865等)。所以,我想:

List<ApplicationInfo> allApps = Utilities.getAllApps(mContext); 
List<ApplicationInfo> visibleApps = new ArrayList<>(); 
for (ApplicationInfo appInfo : allApps) { 
    if (appInfo.icon != 0) { 
     visibleApps.add(appInfo); 
    } 
} 

这让我更接近,但在我的股票模拟器,还有100“allApps”,而这个逻辑帮我钻到54级的应用程序。但抽屉里只有25个应用程序...

回答

1

此应用程序在应用程序抽屉中可见吗?

如果通过“应用程序抽屉”,您指的是主屏幕启动器,那么显示的内容取决于主屏幕启动器的开发者。

你可以找出什么活动正在提供通过PackageManagerqueryIntentActivities()在主屏幕发射来展示,寻找ACTION_MAIN/CATEGORY_LAUNCHER活动。从那里,你可以得到一个提供这些活动的应用程序列表(记住任何应用程序可能提供0,1或几个这样的活动)。

相关问题