抖音直播实时数据接口 抖音接口授权是什么东西

抖音无障碍背景国家近期开展了无障碍建设活动 。为了积极响应国家号召,为抖音视障用户能够得到更好的交互体验,对抖音无障碍功能进行了专项治理和改造 。
无障碍模式下的使用方法抖音的无障碍功能实现主要是通过开启 Google TalkBack(或第三方屏幕阅读)功能,将用户在屏幕上触摸选中区域的内容朗读出来,使得视障人士可以根据朗读的内容获取自己当前操作区域的信息,从而提升视障人士的使用和交互体验 。
常用的操作手势:

  • 浏览某个 View:单击
  • 点击某个 View:双击
  • 沿某个方向滑动:双指沿所需方向滑动
  • 顺序浏览页面:单指左右滑动
本文的目的使研发同学对无障碍功能有一个更加全面的认识和了解,方便研发同学进行无障碍功能的开发 。
本文将分为无障碍功能实现原理和无障碍功能实现实例两部分进行介绍 。
无障碍功能实现原理系统结构无障碍功能的实现需要以下三个部分的支持:辅助 App(例如 TalkBack)、被辅助 app(用户使用的 app,例如抖音头条等)以及系统服务 AccessibilityManagerService,这三者之间的关系如下图所示:
抖音直播实时数据接口 抖音接口授权是什么东西

文章插图
抖音直播实时数据接口 抖音接口授权是什么东西

文章插图
抖音直播实时数据接口 抖音接口授权是什么东西

文章插图
抖音直播实时数据接口 抖音接口授权是什么东西

文章插图
抖音直播实时数据接口 抖音接口授权是什么东西

文章插图
抖音直播实时数据接口 抖音接口授权是什么东西

文章插图
抖音直播实时数据接口 抖音接口授权是什么东西

文章插图
抖音直播实时数据接口 抖音接口授权是什么东西

文章插图
抖音直播实时数据接口 抖音接口授权是什么东西

文章插图
抖音直播实时数据接口 抖音接口授权是什么东西

文章插图
  1. 调用 sendAccessibilityEvent 方法,将 TYPE_VIEW_ACCESSIBILITY_FOCUSED 事件发送出去,这个事件被 talkback 接收后,会调用朗读引擎 TTS 读出 View 的内容,实现了无障碍模式下对触摸区域内容的播报 。
无障碍功能实现实例
  • Case 1:无障碍模式下点击 View 播报“未加标签”
解决方案:在该 View 的 android:contentDescription 属性上设置需要播报的 String 。
  • Case 2:焦点过多,需要删除多余焦点或需要某个 View 能够进行播报
解决方案:将不需要播报的 View 的 android:importantForAccessibility 属性设置为 no,将需要播报的 View 的该属性设置为 yes 。
  • Case 3:无障碍模式下在上层页面点击仍能选中下层 View
解决方案:将下层的根 View 的 android:importantForAccessibility 属性设置为”noHideDescendants”
  • Case 4:使用的自定义 Toast 不播报内容
解决方案:在自定义 Toast 展示的时候,主动发送一个 AccessibilityEvent 事件
mText.postDelayed(new Runnable() {@Override public void run() {mText.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_HOVER_ENTER);}}, 1);设置延时是为了避免不生效的问题 。
  • Case 5:设置自定义 View 的播报内容
解决方法:override View 的 onPopulateAccessibilityEvent()方法 。
举例:设置自定义 View 开/关状态(已开启/已关闭)的播报内容 。
@Overridepublic void onPopulateAccessibilityEvent(AccessibilityEvent event) {super.onPopulateAccessibilityEvent(event);final CharSequence text = isChecked() ? "已开启" : "已关闭";if (text != null) {event.getText().add(text);}}
  • Case 6:设置自定义 View 播报的控件类型及选中状态
解决方法:使用 AccessibilityDelegate
ViewCompat.setAccessibilityDelegate(targetView, new AccessibilityDelegateCompat() {@Overridepublic void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) {super.onInitializeAccessibilityNodeInfo(host, info);info.setRoleDescription("标签类型");//设置播报的标签类型info.setCheckable(true);info.setChecked(checked);//设置播报的被选中状态}});加入我们【抖音直播实时数据接口 抖音接口授权是什么东西】欢迎加入抖音-关系与服务团队,我们专注于抖音多个核心业务场景的落地与迭代,在业务、架构、技术等方面都有投入,期待你的加入!

    推荐阅读