日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

抖音接口授權(quán)是什么東西 抖音直播實(shí)時(shí)數(shù)據(jù)接口( 三 )


  • protected boolean dispatchHoverEvent(MotionEvent event)
該方法用來(lái)進(jìn)行事件的分發(fā),方法的返回值取決于當(dāng)前 View 的 onHoverEvent() 方法和子 View 的 dispatchHoverEvent() 方法的影響 。
  • public boolean onInterceptHoverEvent(MotionEvent event)
僅 ViewGroup 擁有的方法,用來(lái)判斷是否攔截某個(gè)事件 。
  • public boolean onHoverEvent(MotionEvent event)
在 dispatchHoverEvent() 方法中進(jìn)行調(diào)用,用來(lái)處理 hover 事件 。
3.2.2 無(wú)障礙模式下的事件分發(fā)
當(dāng)用戶(hù)處于無(wú)障礙模式下,用戶(hù)進(jìn)行點(diǎn)擊屏幕時(shí),會(huì)調(diào)用 dispatchPointerEvent 方法中的 dispatchGenericMotionEvent 方法:
public final boolean dispatchPointerEvent(MotionEvent event) {if (event.isTouchEvent()) {return dispatchTouchEvent(event);} else {return dispatchGenericMotionEvent(event);}}實(shí)際上調(diào)用的是 Activity 的 dispatchGenericMotionEvent() 方法,Activity 接收到事件后,會(huì)傳遞給 PhoneWindow 再傳遞給 DecorView 。DecorView 會(huì)調(diào)用 View 的 dispatchGenericMotionEvent() 方法:
public boolean dispatchGenericMotionEvent(MotionEvent event) {···final int source = event.getSource();if ((source & InputDevice.SOURCE_CLASS_POINTER) != 0) {final int action = event.getAction();//判斷事件類(lèi)型屬于Hover,調(diào)用dispatch方法開(kāi)始進(jìn)行分發(fā)if (action == MotionEvent.ACTION_HOVER_ENTER || action == MotionEvent.ACTION_HOVER_MOVE || action == MotionEvent.ACTION_HOVER_EXIT) {if (dispatchHoverEvent(event)) {return true;}}...return false;}在該方法中,如果判斷事件為 HoverEvent,就調(diào)用 ViewGroup 的 dispatchHoverEvent() 方法開(kāi)始進(jìn)行事件分發(fā) 。
如果某個(gè) ViewGroup 的 onInterceptHoverEvent() 方法返回 true,表示它要攔截當(dāng)前事件,并交給自己處理,反之返回 false 表示不攔截當(dāng)前事件,并將當(dāng)前事件繼續(xù)傳遞給子 View,子 View 會(huì)調(diào)用自己的 dispatchHoverEvent() 方法,如此循環(huán)往復(fù)直到事件最終被處理 。
在事件處理階段,View/ViewGroup 首先會(huì)判斷是否設(shè)置了 OnHoverListener,并判斷它的 onHover 方法的返回值是否為 true,如果返回值為 true,則不會(huì)調(diào)用 onHoverEvent(),反之會(huì)調(diào)用 onHoverEvent() 方法對(duì)事件進(jìn)行處理 。
整個(gè)處理過(guò)程可以用下面的流程圖進(jìn)行表示:

抖音接口授權(quán)是什么東西 抖音直播實(shí)時(shí)數(shù)據(jù)接口


在 onHoverEvent() 方法中,會(huì)調(diào)用到 sendAccessibilityHoverEvent()方法,該方法后續(xù)會(huì)調(diào)用以下方法:
  • sendAccessibilityEvent
  • sendAccessibilityEventUnchecked
  • onInitializeAccessibilityEvent
  • dispatchPopulateAccessibilityEvent
  • onPopulateAccessibilityEvent
  • onRequestSendAccessibilityEvent(僅在 ViewGroup 中有默認(rèn)實(shí)現(xiàn))
以上 6 種方法為當(dāng)自定義 View 時(shí)適配無(wú)障礙模式可以覆蓋實(shí)現(xiàn)的方法,可以重寫(xiě) View 的這些方法或者實(shí)現(xiàn) View.AccessibilityDelegate 來(lái)解決一些特殊場(chǎng)景下 TalkBack 播報(bào)的問(wèn)題 。
其中的 sendAccessibilityEventUnchecked 方法會(huì)向上傳遞到 ViewRootImpl 的 requestSendAccessibilityEvent 方法中,從堆棧信息中就可以證實(shí)這一點(diǎn):

抖音接口授權(quán)是什么東西 抖音直播實(shí)時(shí)數(shù)據(jù)接口


接著無(wú)障礙事件會(huì)通過(guò) AccessibilityManager 的 sendAccessibilityEvent 方法跨進(jìn)程調(diào)用 system_process 進(jìn)程的 AccessibilityManagerService,將 AccessibilityEvent 事件傳遞到 TalkBack 的 TalkBackService 中 。
4.無(wú)障礙事件的執(zhí)行流程這一節(jié)主要分析從 TalkBack 發(fā)出無(wú)障礙事件,到被輔助 app 在屏幕上繪制出綠框的過(guò)程 。
TalkBack 將無(wú)障礙事件發(fā)送給被輔助 APP 時(shí),需要 system_process 進(jìn)程作為中轉(zhuǎn),對(duì)應(yīng)的接口為 IAccessibilityServiceConnection.aidl 和 IAccessibilityInteractionConnection.aidl 。經(jīng)過(guò)中轉(zhuǎn)后,最終會(huì)調(diào)用到被觸摸 View 的 performAccessibilityAction 方法中,在沒(méi)有 delegate 的情況下,會(huì)執(zhí)行 performAccessibilityActionInternal 方法 。在該方法中,如果是 ACTION_ACCESSIBILITY_FOCUS 事件,會(huì)執(zhí)行 requestAccessibilityFocus 方法:

推薦閱讀