蚂蚁金服android,蚂蚁金服楼勇(焱鑫) Android安全无障碍密码键盘的实现

本文探讨了Android安全无障碍密码键盘的实现,背景涉及支付宝安全键盘因隐私问题下架。文章分析了Android原生无障碍解决方案、 Accessibility事件传递、TalkBack的语音反馈,并提出了紧急方案,通过自定义 AccessibilityDelegate 阻止 Accessibility 事件泄露隐私。同时,作者讨论了如何在保证安全的同时实现无障碍功能,以及面临的挑战。最后,提到了支付宝与无障碍机构的合作以及未来计划,强调技术发展应消除不平等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Android安全无障碍密码键盘的实现

2.背景 背景 今年年初,因为 安全问题支付宝 安全键盘辅助功 能被迫下架 1

3.背景 背景-原生方案 Android 原生的无障 碍解决方案 2

4.背景 背景-语音提示 Video 1: 3

5.背景 背景-Accessibility 什么是Accessibility辅 助功能? 1. 抢红包 2. 静默安装 3. 自动化测试 4

6.背景 背景-安全问题 隐私泄漏 5

7.背景 背景-泄漏详情 #adb shell uiautomator events 6

8.紧急方案 紧急方案 - 阻止Accessibility Accessibility系列方法: public void xxx(…) { if (mAccessibilityDelegate != null) { mAccessibilityDelegate.sendAccessibilityEvent(this, …); } else { xxxInternal(…); } } public void setAccessibilityDelegate(@Nullable AccessibilityDelegate delegate) { mAccessibilityDelegate = delegate; } 7

9.分析 分析- NullAccessibilityDelegate 自定义 AccessibilityDelegate Class NullAccessbilityDelegate extends AccessibilityDelegate { …… public void onInitializeAccessibilityEvent(View arg1, AccessibilityEvent arg2) { //Do nothing. } …… public void sendAccessibilityEvent(View arg1, int arg2) { //Do nothing. } ……. } 8

10.问题 问题 • 语音反馈 • 焦点 Video 2: 9

11.分析 分析 Q:如何做到安全 & 无障碍? 10

12.深入分析 事件传递 public boolean performClick() { …… sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED); …… } //View.java  public void sendAccessibilityEventUncheckedInternal(AccessibilityEvent event) { ……. getParent().requestSendAccessibilityEvent(this, event); } //View.java 11

13.深入分析 事件传递 public boolean requestSendAccessibilityEvent(……) { …… mAccessibilityManager.sendAccessibilityEvent(event); …… } //ViewRootImpl.java public void sendAccessibilityEvent(AccessibilityEvent event) { ……. doRecycle = service.sendAccessibilityEvent(event, userId); } //AccessibilityManager.java 12

14.深入分析 TalkBack的语音反馈 //TalkBack 代码片段: mTempTts = new TextToSpeech(mContext, mTtsChangeListener, engine); private int speakCompat(CharSequence text, HashMapparams) { return mTts.speak(text.toString(), SPEECH_FLUSH_ALL, params); } TextToSpeech 13

15.方案 14

16.难点 拦截-Accessibility Event //Accessibility事件出口 public void sendAccessibilityEvent(int eventType) { boolean handled = false; if (null != mSabEventListener) { handled = mSabEventListener.handleAccessiBilityEvent(this, eventType); } if (!handled) { super.sendAccessibilityEvent(eventType); return; } } 15

17.难点 控制-Accessibility Focus public boolean requestAccessibilityFocus() { ...... viewRootImpl.setAccessibilityFocus(this, null); ...... sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED); ...... } //View.java代码片段 16

18.效果 实现效果 Video 3: 17

19.计划 任重道远 目前,支付宝已经和业界权威的无障碍机 构达成了合作意向,持续关注视障用户的反馈 意见。 支付宝内部也将无障碍支持作为标准列入 开发规范,支付宝的产品将进一步完善无障碍 功能的支持。 18

20.“技术的发展,是为了跨越鸿沟,而 不是带来新的不平等。”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值