Android Eye Gaze是Google面向行动不便用户推出的一套眼球注视交互能力,设备借助前置摄像头和机载视觉算法实时估计用户的视线落点,将视线位置转换为指针位置,从而支持注视点击、注视悬停、边缘滚动等无接触操作。对于开发者来说,理解这套机制的底层逻辑、掌握开启和验证的方法,是接入注视交互的第一步。
一、Eye Gaze的工作原理与系统要求
从技术架构上看,Eye Gaze并不是一个独立的传感器硬件,而是基于前置摄像头图像流的软件管线。系统会持续采集摄像头帧,通过人脸检测定位眼部区域,再结合头部姿态与瞳孔位置估算注视点坐标,最后经过平滑滤波将稳定后的坐标交给无障碍框架分发。整个计算过程通常在专用的神经网络加速单元上运行,因此功耗和延迟都控制在可接受范围内。
在系统版本方面,眼球注视能力最早以Pixel系列设备上的Camera Access开关形式出现,随后被纳入Android无障碍体系。开发者需要在支持该功能的设备上进入设置中的无障碍菜单,找到Camera Access或Eye Gaze相关选项开启。值得注意的是,这项能力依赖设备厂商适配,不同机型的入口名称和可用性存在差异,测试前务必确认设备是否在支持列表内。
开启后,屏幕上会出现一个跟随视线移动的指针,注视某个可交互元素并停留一定时间即可触发点击,类似我们熟悉的悬停 dwell 交互模式。系统默认的停留时间、指针大小等参数都可以在无障碍设置里调整。
二、设备端开启与人工验证测试
第一阶段的测试应该先脱离代码,纯粹从用户角度验证系统级注视功能是否正常。进入系统设置,依次打开无障碍、Camera Access或Eye Gaze开关,此时屏幕顶部会提示摄像头正在被无障碍服务使用。将视线在几个应用图标之间缓慢移动,观察指针是否平滑跟随,再注视某个图标约一秒,确认是否能触发打开操作。
如果指针抖动明显或者点击不灵敏,可以按下面的顺序排查:首先检查环境光线,逆光和昏暗环境会显著降低瞳孔检测精度;其次调整注视触发的停留时长,新手用户建议设置在800毫秒到1200毫秒之间;最后确认用户与屏幕的距离,过近或过远都会影响标定效果。部分设备还提供视线校准入口,执行一次完整校准通常能明显改善跟踪质量。
三、通过AccessibilityService在应用中接入注视交互
对于应用开发者而言,Eye Gaze最终是以标准的无障碍事件形式暴露出来的,也就是说注视点击对应用层来说与普通触摸点击几乎没有区别,这大大降低了接入成本。但如果想针对注视场景做更细致的优化,例如增大点击目标、提供视觉反馈,就需要在代码层面做一些工作。
下面是一个无障碍服务的基础配置示例,服务声明文件accessibility_service_config.xml放在res/xml目录下:
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeViewClicked|typeViewHoverEnter"
android:accessibilityFeedbackType="feedbackGeneric"
android:accessibilityFlags="flagDefault"
android:canRetrieveWindowContent="true"
android:description="@string/gaze_service_desc" />对应的服务类代码如下:
public class GazeAccessibilityService extends AccessibilityService {
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_HOVER_ENTER) {
// 注视悬停进入,可以放大目标或高亮提示
AccessibilityNodeInfo node = event.getSource();
if (node != null) {
Log.d("GazeTest", "视线悬停节点: " + node.getViewIdResourceName());
}
} else if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_CLICKED) {
// 注视触发的点击事件,与普通点击统一处理
Log.d("GazeTest", "注视点击触发");
}
}
@Override
public void onInterrupt() {
// 服务被中断时的清理逻辑
}
}在界面适配上,注视交互的点击精度低于手指触摸,因此官方建议可点击控件的触摸目标不小于48dp,控件之间保留足够间距,并避免将关键操作放在屏幕边缘,因为边缘滚动和注视点击同时发生时容易产生误触。
四、自动化测试与常见问题排查
人工验证通过后,可以借助UiAutomator或Espresso编写自动化用例,模拟点击流验证应用在注视场景下的响应。需要注意的是,自动化框架无法真正模拟视线,只能验证点击链路,注视精度本身仍需真机人工测试。一个实用的做法是在应用的调试版本中记录所有点击事件的时间戳和坐标,与无障碍服务捕获的悬停事件做交叉比对,从而判断注视交互的时序是否符合预期。
常见问题方面,第一类是服务无法开启,通常是manifest中未声明BIND_ACCESSIBILITY_SERVICE权限或配置文件路径错误;第二类是事件收不到,需要检查accessibilityEventTypes是否包含目标事件类型;第三类是只在部分设备上可用,这与厂商对眼球注视的适配程度有关,建议在代码中通过Settings.Secure查询无障碍已启用服务列表做能力探测,并在不支持时给出降级提示。
最后,注视交互属于无障碍范畴,测试时建议邀请真实的行动不便用户参与可用性评估,停留时长、反馈样式这些细节往往需要根据真实反馈反复调整。通过系统级验证、代码接入和自动化回归三个层面的组合测试,基本可以保证Eye Gaze功能在应用中的稳定表现。
Android Eye Gaze眼球注视Android无障碍开发修改时间:2026-08-31 02:28:42