非谷歌、三星设备Talk Back使用识别问题及优化方案问询
安卓无障碍服务统计异常问题及优化咨询
问题背景
我们通过iOS和Android系统无障碍服务API统计屏幕阅读器用户数量,发现数据存在两处异常:
- Android设备中75%为谷歌、三星机型,但Talk Back用户里仅30%来自这类设备,摩托罗拉设备的Talk Back用户占比明显过高;
- 统计显示Android Talk Back用户数量多于iOS Voice Over用户,这与用户群体规模及行业普遍趋势不符。
已知信息
谷歌、三星的Talk Back服务包名存在差异:
- Google:
com.google.android.marvin.talkback/com.google.android.marvin.talkback.TalkBackService - Samsung:
com.samsung.android.accessibility.talkback/com.samsung.android.marvin.talkback.TalkBackService
由于包名不统一,我们未采用特定包名识别屏幕阅读器用户,现提出两个核心疑问:
- 其他厂商是否会因为服务ID包含"talkback"标识符,导致非严格意义的屏幕阅读器用户被纳入统计?
- 求Android端此类数据采集的更优方案。
当前Android端数据采集代码示例
class MyUseCase( context: Context, ) { private val accessibilityManager = context.getSystemService(Context.ACCESSIBILITY_SERVICE) as AccessibilityManager? operator fun invoke(): Map<String, String> { val enabledFeatures = getAllAccessibilityServicesEnabled().joinToString(separator = "|") return mapOf(ACCESSIBILITY_KEY to enabledFeatures) } private fun getAllAccessibilityServicesEnabled(): List<String> { val accessibilityServiceInfoList = accessibilityManager?.getEnabledAccessibilityServiceList( AccessibilityServiceInfo.FEEDBACK_ALL_MASK, ) return accessibilityServiceInfoList?.map { when { it.id.contains(TALK_BACK) -> "Talk Back" it.id.contains(SWITCH_ACCESS) -> "Switch Access" it.id.contains(UNIVERSAL_SWITCH) -> "Universal Switch" it.id.contains(VOICE_ACCESS) -> "Voice Access" it.id.contains(SELECT_TO_SPEAK) -> "Select to Speak" it.id.contains(BRAILLE_BACK) -> "Braille Back" else -> "Unknown" } } ?: emptyList() } companion object { private const val ACCESSIBILITY_KEY = "accessibility" private const val TALK_BACK = "talkback" private const val SWITCH_ACCESS = "switchaccess" private const val UNIVERSAL_SWITCH = "universalswitch" private const val VOICE_ACCESS = "voiceaccess" private const val SELECT_TO_SPEAK = "selecttospeak" private const val BRAILLE_BACK = "brailleback" } }
内容的提问来源于stack exchange,提问作者darkknightsds
相关产品推荐
相关产品推荐

