如何确定应用程序抽屉中的 Android 个应用程序列表
How to determine a list of Android apps that are in the app drawer
我正在使用程序包管理器class 获取所有已安装应用程序的列表。我尝试使用以下标志来确定什么是 "user app" 与 "system app":
ApplicationInfo.FLAG_SYSTEM
ApplicationInfo.FLAG_UPDATED_SYSTEM_APP
这有效,但不是我想要的方式。我希望能够过滤所有应用程序的列表以确定:此应用程序是否在应用程序抽屉中可见?
我不想与低级系统应用交互,因为这可能会导致一些不良副作用。但我想包括 "com.google.chrome" 之类的东西,因为它是应用程序抽屉中的一个应用程序,但在技术上是作为系统应用程序安装的。
我调试了从程序包管理器返回的 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 个应用程序……
更新:Android 可能已使用较新的 API 版本放弃此实现。
Is this app visible in the app drawer?
如果 "app drawer",您指的是主屏幕启动器,那么显示什么由主屏幕启动器的开发者决定。
您可以通过 PackageManager
和 queryIntentActivities()
查找 提供 在主屏幕启动器中显示的活动,寻找 ACTION_MAIN
/CATEGORY_LAUNCHER
个活动。从那里,您可以得出提供这些活动的应用程序列表(请记住,任何应用程序都可能提供 0、1 或多个此类活动)。
我正在使用程序包管理器class 获取所有已安装应用程序的列表。我尝试使用以下标志来确定什么是 "user app" 与 "system app":
ApplicationInfo.FLAG_SYSTEM
ApplicationInfo.FLAG_UPDATED_SYSTEM_APP
这有效,但不是我想要的方式。我希望能够过滤所有应用程序的列表以确定:此应用程序是否在应用程序抽屉中可见?
我不想与低级系统应用交互,因为这可能会导致一些不良副作用。但我想包括 "com.google.chrome" 之类的东西,因为它是应用程序抽屉中的一个应用程序,但在技术上是作为系统应用程序安装的。
我调试了从程序包管理器返回的 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 个应用程序…… 更新:Android 可能已使用较新的 API 版本放弃此实现。
Is this app visible in the app drawer?
如果 "app drawer",您指的是主屏幕启动器,那么显示什么由主屏幕启动器的开发者决定。
您可以通过 PackageManager
和 queryIntentActivities()
查找 提供 在主屏幕启动器中显示的活动,寻找 ACTION_MAIN
/CATEGORY_LAUNCHER
个活动。从那里,您可以得出提供这些活动的应用程序列表(请记住,任何应用程序都可能提供 0、1 或多个此类活动)。