Talkback问题汇总

  • 导航页面
    • 界面与读屏内容不一致
    • 移除引导页面

导航页面

界面与读屏内容不一致

  • 现象:界面显示在page2,tts输出内容为page1+page2,返回上一页现象雷同
  • 修改
  1. talkback-master\compositor\src\main\res\raw\compositor.json
"TYPE_VIEW_FOCUSED": {//modify>>>//"ttsOutput": "%event_description","ttsOutput": "","ttsAddToHistory": true,// From FallbackFormatter// TODO: Delete porting comments."earcon": {"if": "$event.sourceIsNull","then": "@raw/focus_actionable"},"haptic": {"if": "$event.sourceIsNull","then": "@array/view_focused_or_selected_pattern"}
},

由于json是全局配置文件,修改有风险,继而java中做判断条件修改

  1. talkback-master\compositor\src\main\java\com\google\android\accessibility\compositor\Compositor.java
private void handleEvent(int event,@Nullable EventId eventId,ParseTree.VariableDelegate delegate,HandleEventOptions options) {...// custom for training >>>CharSequence ttsOutput ="";if (eventObject!= null) {Log.i(TAG, "handleEvent:    " + eventObject.toString());}if (eventObject!= null&& eventObject.getEventType() == AccessibilityEvent.TYPE_VIEW_FOCUSED&& "com.android.talkback".equals(eventObject.getPackageName())){ttsOutput ="";}else {ttsOutput = mParseTree.parseEventToString(event, OUTPUT_TTS_OUTPUT, delegate);}CharSequence ttsOutput = mParseTree.parseEventToString(event, OUTPUT_TTS_OUTPUT, delegate);Log.i(TAG, "handleEvent:   ttsOutput="+ttsOutput);...}
  1. talkback-master\talkback\src\main\java\com\google\android\accessibility\talkback\eventprocessor\ProcessorScreen.java

此处修改可以避免title重复读

@Override
protected boolean allowAnnounce(AccessibilityEvent event) {// If the user performs a cursor control(copy, paste, start selection mode, etc) in the// talkback context menu and lands back to the edit text, a TYPE_WINDOWS_CHANGED and a// TYPE_WINDOW_STATE_CHANGED events will be fired. We should skip these two events to// avoid announcing the window title.boolean allowAnnounce = true;if (event.getEventType() == AccessibilityEvent.TYPE_WINDOWS_CHANGED&& EventState.getInstance().checkAndClearRecentFlag(EventState.EVENT_SKIP_WINDOWS_CHANGED_PROCESSING_AFTER_CURSOR_CONTROL)) {allowAnnounce = false;}if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED&& EventState.getInstance().checkAndClearRecentFlag(EventState.EVENT_SKIP_WINDOW_STATE_CHANGED_PROCESSING_AFTER_CURSOR_CONTROL)) {allowAnnounce = false;}Log.i(TAG, "allowAnnounce:     "+allowAnnounce);//modify>>>>>if (WindowUtils.rootChildMatchesResId(service, TrainingActivity.ROOT_RES_ID)){Log.i(TAG, "allowAnnounce:    is TrainingActivity>>>");allowAnnounce = false;}return allowAnnounce;
}
  1. talkback-master\talkback\src\main\java\com\google\android\accessibility\talkback\training\TrainingFragment.java

修改后辅助功能的焦点框会直接选中界面外布局而非内部子布局

@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {final View view = inflater.inflate(R.layout.training_fragment_name, container, false);pageLayout = view.findViewById(R.id.training_page);@Nullable PageId pageId = (PageId) getArguments().get(EXTRA_PAGE);if (pageId == null) {LogUtils.e(TAG, "Cannot create view because no page ID.");return view;}page = PageConfig.getPage(pageId);if (page == null) {LogUtils.e(TAG, "Cannot create view because unknown PageId. [%s]", pageId.name());return view;}addView(inflater, container);//modify>>>>>//pageLayout.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_AUTO);pageLayout.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);if (FeatureSupport.isWatch(getContext())) {// Support rotary input.view.requestFocus();}return view;}
  1. talkback-master\talkback\src\main\java\com\google\android\accessibility\talkback\utils\DiagnosticOverlayControllerImpl.java

以上修改后在返回上一页时会出现辅助功能的焦点框丢失,继而添加以下修改

/*** Receives and appends Feedback object to log controller. Feedback objects are filtered for swipe* gestures.*/public void appendLog(Feedback feedback) {Feedback.@Nullable Part failover =(feedback.failovers() == null || feedback.failovers().size() < 1? null: feedback.failovers().get(0));if (failover == null) {return;}// Filter for FOCUS and FOCUS DIRECTION actions,// which mark beg/end of swipe gesture + associated focusif (failover.focus() == null&& failover.focusDirection() == null&& failover.scroll() == null) {return;}/** Check to make sure eventID isn't null before checking for gestures */if (!this.enabled|| feedback.eventId() == null|| highlightOverlay == null|| diagnosticOverlay == null) {return;}/*** Clear/recycle traversed/unfocused nodes when window changes/scrolls to new screen because* usually {@link FocusProcessorForLogicalNavigation} tells when clear/recycle, but with new* screen change/scroll, we must call {@link* DiagnosticOverlayControllerImpl#clearAndRecycleCollectionNodes} from here*/if (feedback.eventId().getEventSubtype() == AccessibilityEvent.TYPE_WINDOWS_CHANGED|| feedback.eventId().getEventSubtype() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED|| failover.scroll() != null) {Log.i(TAG, "appendLog: >>>>>>>>>>>>>>>>>>>>>>");//modify>>>>>需要添加判断条件//clearAndRecycleCollectionNodes(/* recycleFocusedNode= */ false);//highlightOverlay.clearHighlight();}

移除引导页面

找到对应的显示界面数组后跟踪,修改:
talkback-master\talkback\src\main\java\com\google\android\accessibility\talkback\TalkBackService.java

@Override
protected void onServiceConnected() {LogUtils.v(TAG, "System bound to service.");...//modify>>>>if (false && !FeatureSupport.isTv(getApplicationContext())&& !FeatureSupport.isWatch(getApplicationContext())) {OnboardingInitiator.showOnboarding91IfNecessary(this);}...
}

Talkback问题汇总相关推荐

  1. android 获取点击屏幕视图,Android如何在显示RelativeLayout时获取talkBack读...

    我有一个活动,它使用以下代码为整个活动的视图添加自定义视图 activity.getWindow().getDecorView()).addView(newView) 为了显示教练标记/使用标记的屏幕 ...

  2. 最常见NLP任务练手项目汇总

    分词 Word Segmentation chqiwang/convseg ,基于CNN做中文分词,提供数据和代码. 词预测 Word Prediction Kyubyong/word_predict ...

  3. 用python下载文件的若干种方法汇总

    压缩文件可以直接放到下载器里面下载的 you-get 连接 下载任意文件 重点 用python下载文件的若干种方法汇总 写文章 用python下载文件的若干种方法汇总 zhangqibot发表于Met ...

  4. 命名实体识别训练集汇总(一直更新)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/leitouguan8655/artic ...

  5. LeetCode简单题之汇总区间

    题目 给定一个 无重复元素 的 有序 整数数组 nums . 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 .也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范 ...

  6. 2021年全网最详细大数据常见端口汇总❤️【建议收藏】❤️

    目录 大数据常见端口汇总 一.Hadoop 二.Zookeeper 三.Hbase 四.Hive 五.Spark 六.Kafka 七.Flink 八.Flume 九.Redis 十.CDH 十一.HU ...

  7. 2021年大数据环境命令(一):常用命令汇总

    2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习. 有对大数据感兴趣的可以关注微信公众号:三帮大数据 目录 汇总Hadoop Hi ...

  8. 经纬度绘图_【知识科普】地形图图例汇总,测绘人识图绘图必备(含dwg版下载)...

    地形图(topographic map)指的是地表起伏形态和地理位置.形状在水平面上的投影图.具体来讲,将地面上的地物和地貌按水平投影的方法(沿铅垂线方向投影到水平面上),并按一定的比例尺缩绘到图纸上 ...

  9. Pandas 基础 (4)—— 汇总和计算描述统计

    Pandas 对象拥有一组常用的数学和统计方法,他们大部分都属于约简和汇总统计,用于从 Series 中提取单个值(如 sum/mean),或者从 DataFrame 的行或列中提取一个 Series ...

最新文章

  1. Android Dialog 关闭的时候标题栏闪烁一下的处理方法
  2. Linux下DB2数据库安装教程
  3. 十六款值得关注的NoSQL与NewSQL数据库--转载
  4. 产品经理不得不知的APP数据分析及报表设计基础
  5. js下拉 selenium_selenium的下拉选择框
  6. 不同用户同时并发测压_教你 7 招,迅速提高服务器并发能力!
  7. gRPC的平滑关闭和在Kubernetes上的服务摘流方案总结
  8. java编码转换报错_Java中BeanUtils的日期转换 代码报错 怎么解决
  9. 一步一步学VBScript(4)之WSH对象三
  10. C++面试题:内存的分配方式有几种?
  11. 【渝粤教育】广东开放大学 环境与资源保护法 形成性考核 (56)
  12. java重载静态方法_java – 使用静态和非静态方法重载的方法
  13. 创建应答文件——无人值守安装XP/2003
  14. 【数据分享】全国POI数据分享(持续更新中)
  15. ecshop模板构建说明
  16. Mybatis查询之list作为参数查询
  17. 合同在项目管理中的优势
  18. 基于ffmpeg的音频转换器-rtp承载的amr转换为pcm音频流
  19. 南开介教授好嘛是“段子手”
  20. 5G NTN进展简述

热门文章

  1. 如何设计散列表(哈希表)
  2. [RHEL7基础篇-7] 特殊权限
  3. mouseenter、mouseleave与mouseover、mouseout的区别
  4. MTK客制化修改8.1系统
  5. 【分享】lucene原理与代码分析完整版PDF
  6. TechED 2010中国上的SharePoint讲师团
  7. 12款漂亮 WordPress 免费主题分享
  8. 关于初创公司的研发体系构建,这可能是最成功的案例了
  9. Python爬虫之每天给她发一个笑话
  10. “电脑开机锁”如何取消,看这里就够了,怎样实现电脑开机密码的取消