如何在Android系统中仅筛选出已安装的游戏类应用?
Android 筛选已安装游戏类应用的实现方法
实现步骤
- 首先通过
PackageManager获取全量已安装应用的ApplicationInfo列表,示例代码如下:
val packageManager = context.packageManager // 获取所有已安装应用信息,携带元数据参数避免遗漏配置信息 val allInstalledApps = packageManager.getInstalledApplications(PackageManager.GET_META_DATA)
- 对全量应用列表进行过滤,Android 8.0(API 26)及以上系统可以直接用官方提供的应用类别字段筛选:
val gameAppList = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { allInstalledApps.filter { appInfo -> // 官方定义的游戏类别常量 appInfo.category == ApplicationInfo.CATEGORY_GAME } } else { // 低于API 26的系统无统一官方应用分类,可选择以下兼容方案: // 方案1:筛选适配了Android TV的游戏应用,仅覆盖部分支持TV端的游戏 allInstalledApps.filter { appInfo -> val leanbackIntent = Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LEANBACK_LAUNCHER) packageManager.queryIntentActivities(leanbackIntent, 0).any { activityInfo -> activityInfo.activityInfo.packageName == appInfo.packageName } } // 方案2:接入第三方应用分类库/自建游戏包名名单,通过包名匹配游戏类应用 }
注意事项
- 低版本系统没有官方统一的应用类别标识,兼容方案存在一定的误判、漏判可能,可根据业务场景调整判断逻辑
- 如果产品仅在国内运营,也可结合国内应用商店公开的游戏包名录做二次校验,提升筛选准确率
内容的提问来源于stack exchange,提问作者Ralf Wickum
相关产品推荐
相关产品推荐

