抖音无障碍背景国家近期开展了无障碍建设活动 。为了积极响应国家号召,为抖音视障用户能够得到更好的交互体验,对抖音无障碍功能进行了专项治理和改造 。
无障碍模式下的使用方法抖音的无障碍功能实现主要是通过开启 Google TalkBack(或第三方屏幕阅读)功能,将用户在屏幕上触摸选中区域的内容朗读出来,使得视障人士可以根据朗读的内容获取自己当前操作区域的信息,从而提升视障人士的使用和交互体验 。
常用的操作手势:
- 浏览某个 View:单击
- 点击某个 View:双击
- 沿某个方向滑动:双指沿所需方向滑动
- 顺序浏览页面:单指左右滑动
本文将分为无障碍功能实现原理和无障碍功能实现实例两部分进行介绍 。
无障碍功能实现原理系统结构无障碍功能的实现需要以下三个部分的支持:辅助 App(例如 TalkBack)、被辅助 app(用户使用的 app,例如抖音头条等)以及系统服务 AccessibilityManagerService,这三者之间的关系如下图所示:

从上图中可以看出,以上的流程主要涉及到三个进程的通信 。辅助 app 和被辅助 app 不需要直接跟被辅助的 app 通信,而是通过 SystemServer 进行中转通信,这个过程主要涉及到了四个 aidl 接口:
- 被辅助 app->SystemServer(IAccessibilityManager.aidl)
- SystemServer->辅助 app(IAccessibilityServiceClient.aidl)
- 辅助 app->SystemServer(IAccessibilityServiceConnection.aidl)
- SystemServer->被辅助 app(IAccessibilityInteractionConnection.aidl)
无障碍事件传递流程当用户触摸屏幕时,会经过以下的流程将触摸事件传递给被触摸的 View:

下面本文将主要分析以上流程中四个重点部分的内容:无障碍模式下的事件转换、触摸事件到 Activity 的传递过程、事件传递给具体的 View 的分发过程以及最终无障碍事件的执行流程 。
1.无障碍模式下的事件转换在 TalkBack 开启的状态下,由于 TalkBack 的无障碍服务中声明了 android:canRequestTouchExplorationMode=”true”,因此开启 TalkBack 后 AccessibilityManagerService 会更新 AccessibilityInputFilter 的FLAG_FEATURE_TOUCH_EXPLORATION(触摸浏览)属性置为 true 。

在 FLAG_FEATURE_TOUCH_EXPLORATION 模式下会创建一个 TouchExplorer 对象 。AccessibilityInputFilter 继承了 InputFilter,对输入事件进行过滤,通过和 TouchExplorer 共同实现 TalkBack 模式下的触摸浏览手势 。TouchExplorer 负责将普通触摸事件转换为触摸浏览手势,例如将 MotionEvent.ACTION_DOWN 事件转换为 MotionEvent.ACTION_HOVER_ENTER(悬停事件) 。因此在 TalkBack 开启的情况下,用户单击 View 时,App 执行的是 ACTION_HOVER_ENTER 事件,双击 View 时才会执行 ACTION_DOWN 事件 。
2.触摸事件到 Activity 的传递过程在 Android 中,消息机制是 handler 机制,通过将消息封装到 Message 中,并将该消息发送到 handler 所在的 MessageQueue 中,通过 Looper 不断调用 MessageQueue 的 next 方法进行消息的处理 。
推荐阅读
- 抖音软件怎么赚钱 抖音最新版本安装
- 抖音号查询对方手机号 通过手机号查抖音id
- 企业抖音号运营方案 抖音账号运营流程
- 抖音上传高清视频设置 抖音上传原画质的方法
- 抖音可以用电脑直播吗 直播电影版权获取方法
- 抖音认证怎么认证 抖音个人认证窍门
- 抖音星动之夜2021在哪里看 抖音星动之夜平台直播介绍
- 抖音支付什么时候上线 抖音支付正式上线情况介绍
- emoji锁屏怎么拍 抖音emoji锁屏怎么拍
- 好想好想和你在一起什么歌 抖音好想好想和你在一起数天上的星星是什么歌
