Accessibility是android辅助功能相关的api,辅助功能最具有代表性的一个就是盲人模式(talkback).
国内的话就是抢红包插件,具体如何使用就不细说了,这里说下Android是如何实现的。(8.0源码)
要监听一个应用的View点击,需要写一个类继承自AccessibilityService,balabala...写完后就可以监听了。
具体代码流程就是用户点击一个View,比如TextView,这个时候会回调View.performClick方法。
public boolean performClick() {
final boolean result;
final ListenerInfo li = mListenerInfo;
if (li != null && li.mOnClickListener != null) {
playSoundEffect(SoundEffectConstants.CLICK);
li.mOnClickListener.onClick(this);
result = true;
} else {
result = false;
}
//就是这里发送AccessibilityEvent,通知对应的辅助服务。
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
notifyEnterOrExitForAutoFillIfNeeded(true);
return result;
}
大致流程是这样子的:View.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
--->getParent().requestSendAccessibilityEvent(this, event)
-->ViewRootImpl.requestSendAccessibilityEvent(View child, AccessibilityEvent event)
-->AccessibilityManager.sendAccessibilityEvent(event)
..........................