API Demos(6) AccessibilityService 无障碍辅助功能

最近编辑于2018年4月30日

通过AccessibilityService可以监听各个物理按键(音量,home键,返回键等等),手势操作和屏幕窗口变化(非系统的需要指定应用包名,通知监听也需要指定包名等)。

一、自定义AccessibilityService

1、继承AccessibilityService类

2、在AndroidManifest.xml中注册,同时指定<action android:name="android.accessibilityservice.AccessibilityService" />,同时静态申请权限android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"。

3、同时可以指定meta-data,android:name属性必须指定为"android.accessibilityservice",android:resource属性指定xml文件决定一些自定义AccessibilityService的属性,例如

 

<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:accessibilityEventTypes=""
    android:accessibilityFeedbackType="feedbackVisual"
    android:canRequestFilterKeyEvents="true"
    android:canControlMagnification="true"
    android:description="@string/magnification_service_description" />

android:accessibilityEventTypes指定监听哪些事件;

 

android:accessibilityFeedbackType指定反馈形式;

android:canRequestFilterKeyEvents设为true,意味着物理按键按下时拦截请求事件,方便自定义处理;

android:canControlMagnification="true"可以放大缩小屏幕;

android:description指定设置中开启该服务前时的描述;

android:canRetrieveWindowContent="true",可以监听窗口层级视图。

4、重写onServiceConnected()方法,服务刚开启时触发;

重写onKeyEvent(KeyEvent event)方法,处理物理按键事件;

重写onAccessibilityEvent(AccessibilityEvent event)方法,响应AccessibilityEvent的事件,在用户操作的过程中,系统不断的发送sendAccessibiltyEvent(AccessibilityEvent event);然后通过onAccessibilityEvent()可以捕捉到该事件,然后分析;

onInterrupt():打断获取事件的过程。

二、开启服务

该服务奏效需要用户主动开启,两种跳转到开启页面的方式:

1、手动进入设置——>更多设置——>无障碍——>找到对应服务开启;

2、startActivity(new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS));打开无障碍页面——>找到对应服务开启。

三、其他

1、API Demos中MagnificationService类展示了按音量键控件屏幕放大缩小。

2、AccessibleCompoundButtonInheritance和AccessibleCompoundButtonComposition两个自定义控件如果开启了处理对应事件的AccessibilityService(如Demos中开启TaskBackService,该服务的配置为

 

<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:accessibilityEventTypes="typeAllMask"
    android:packageNames="com.example.android.apis"
    android:accessibilityFeedbackType="feedbackSpoken"
    android:notificationTimeout="100"
    android:canRetrieveWindowContent="true"
    android:description="@string/accessibility_query_window_description" />

其中android:accessibilityEventTypes="typeAllMask"会监听所有事件,android:packageNames="com.example.android.apis"表示监听的安装包为"com.example.android.apis",android:accessibilityFeedbackType="feedbackSpoken"表示响应方式是声音,然而却没有声音),在自定义view中重写会依次调用的三个方法onInitializeAccessibilityNodeInfo(View host,AccessibilityNodeInfo info),onPopulateAccessibilityEvent(View host, AccessibilityEvent event)和onInitializeAccessibilityEvent(View host, AccessibilityEvent event)。

 

3、系统中常见的有TalkBack等服务,但打开都需要慎重,需要先了解开启服务后如何操作手机,安卓手机误开启Talkback盲人语音模式的关闭步骤。

4、第三方的AccessibilityService服务更需要谨慎打开,有可能会偷偷收集你的数据。

5、微信自动抢红包(现在不行了),聊天自动回复等功能就是利用的AccessibilityService服务。

6、一些相关文档

Android开发 无障碍指南

http://www.capa.ac/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值