最近编辑于2018年4月30日
通过AccessibilityService可以监听各个物理按键(音量,home键,返回键等等),手势操作和屏幕窗口变化(非系统的需要指定应用包名,通知监听也需要指定包名等)。
一、自定义AccessibilityService
1、继承AccessibilityService类
2、在AndroidManifest.xml中注册,同时指定
3、同时可以指定meta-data,android:name属性必须指定为"android.accessibilityservice",android:resource属性指定xml文件决定一些自定义AccessibilityService的属性,例如
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,该服务的配置为
其中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/