日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

总结】Android辅助功能(一)-AccessibilityEvent的分发

發布時間:2025/3/15 Android 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 总结】Android辅助功能(一)-AccessibilityEvent的分发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目前關于輔助功能的使用的文章很多,但鮮有分析其具體實現的,本文基于Andoird 7.1.0_r7源碼分析一下輔助事件是怎么分發的,只涉及事件的分發和輔助App的接收,之后有機會再講一講獲取AccessibilityNodeInfo、進行操作等等的源碼流程。

文中“目標App”指的是發出輔助事件的App,“輔助App”指的是擁有輔助功能的App。

1. 【目標App】 View.sendAccessibilityEvent(int eventType)

我們看View的源碼可以看到在很多地方調用了sendAccessibilityEvent(int eventType)的方法,例如:

在View獲取到焦點時,調用了sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED); 當View被點擊時,調用了sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED)

使用過輔助功能的同學對這些Event應該很熟悉,這些就是我們在寫輔助App時定義的想要接收的輔助事件的類型,Android為我們定義了一系列輔助事件,這里舉幾個比較常用的事件:

TYPE_VIEW_CLICKED // 當View被點擊時發送此事件。 TYPE_VIEW_LONG_CLICKED // 當View被長按時發送此事件。 TYPE_VIEW_FOCUSED // 當View獲取到焦點時發送此事件。 TYPE_WINDOW_STATE_CHANGED // 當Window發生變化時發送此事件。 TYPE_VIEW_SCROLLED // 當View滑動時發送此事件。

所以說,sendAccessibilityEvent(int eventType)就是我們的起點,我們來看一看這個方法。View實現了AccessibilityEventSource接口,這個方法就來自于AccessibilityEventSource接口。

public void sendAccessibilityEvent(int eventType) {if (mAccessibilityDelegate != null) {// AccessibilityDelegate是用來增強輔助功能的,一般情況下不用考慮。mAccessibilityDelegate.sendAccessibilityEvent(this, eventType);} else {sendAccessibilityEventInternal(eventType);} }

2. 【目標App】 View.sendAccessibilityEventInternal(int eventType) -> View.sendAccessibilityEventUnchecked(AccessibilityEvent event)

這2個方法都比較短,就放在一起說了。sendAccessibilityEventInternal(int eventType)會檢查當前輔助服務是否開啟,至少有一個輔助App被開啟了才會返回true。如果當前開啟了,會把eventType轉成AccessibilityEvent,這就是我們在AccessibilityService中收到的AccessibilityEvent,之后調用了sendAccessibilityEventUnchecked(AccessibilityEvent event),進而調用了sendAccessibilityEventUncheckedInternal(AccessibilityEvent event)。

public void sendAccessibilityEventInternal(int eventType) {if (AccessibilityManager.getInstance(mContext).isEnabled()) {sendAccessibilityEventUnchecked(AccessibilityEvent.obtain(eventType));} }public void sendAccessibilityEventUnchecked(AccessibilityEvent event) {if (mAccessibilityDelegate != null) {// AccessibilityDelegate是用來增強輔助功能的,一般情況下不用考慮。mAccessibilityDelegate.sendAccessibilityEventUnchecked(this, event);} else {sendAccessibilityEventUncheckedInternal(event);} }

3. 【目標App】 View.sendAccessibilityEventUncheckedInternal(AccessibilityEvent event)

此時會先判斷當前View及所有的Parent是否可見,如果不可見則不會分發當前的AccessibilityEvent。onInitializeAccessibilityEvent(event)做了一些初始化工作,例如給AccessibilityEvent設置source、className、packageName等等信息。

系統定義了一個叫POPULATING_ACCESSIBILITY_EVENT_TYPES的常量,包括了AccessibilityEvent.TYPE_VIEW_CLICKED等等一系列Event,當發送的EventType是這些中的一個時,目標App可以通過重寫dispatchPopulateAccessibilityEvent(AccessibilityEvent event)或onPopulateAccessibilityEvent(AccessibilityEvent event)方法對將要發送的AccessibilityEvent進行修改。

之后會調用getParent().requestSendAccessibilityEvent(this, event)發給Parent View去處理。

public void sendAccessibilityEventUncheckedInternal(AccessibilityEvent event) {// 判斷View是否可見if (!isShown()) {return;}// 設置AccessibilityEvent的一些信息onInitializeAccessibilityEvent(event);if ((event.getEventType() & POPULATING_ACCESSIBILITY_EVENT_TYPES) != 0) {// 目標App可通過此方法修改AccessibilityEventdispatchPopulateAccessibilityEvent(event);}// In the beginning we called #isShown(), so we know that getParent() is not null.getParent().requestSendAccessibilityEvent(this, event); }private static final int POPULATING_ACCESSIBILITY_EVENT_TYPES =AccessibilityEvent.TYPE_VIEW_CLICKED| AccessibilityEvent.TYPE_VIEW_LONG_CLICKED| AccessibilityEvent.TYPE_VIEW_SELECTED| AccessibilityEvent.TYPE_VIEW_FOCUSED| AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED| AccessibilityEvent.TYPE_VIEW_HOVER_ENTER| AccessibilityEvent.TYPE_VIEW_HOVER_EXIT| AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED| AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED| AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED| AccessibilityEvent.TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY;

4. 【目標App】ViewGroup.requestSendAccessibilityEvent(View child, AccessibilityEvent event)

對于一個View來說,它的Parent View就是ViewGroup,這里會遞歸調用Parent View的requestSendAccessibilityEvent方法,值得注意的是onRequestSendAccessibilityEvent(View child, AccessibilityEvent event)方法,官方的注釋說是“當子View請求發送一個AccessibilityEvent時調用,給父View一個增加事件的機會。” 但我覺得更大的用處是可以通過重寫這個方法阻止事件的發送。

我們知道正常情況下,最終我們會調用DecorView的requestSendAccessibilityEvent(View child, AccessibilityEvent event),而DecorView的Parent是ViewRootImpl,所以說最終會調用ViewRootImpl的requestSendAccessibilityEvent(View child, AccessibilityEvent event)方法。

@Override public boolean requestSendAccessibilityEvent(View child, AccessibilityEvent event) {ViewParent parent = mParent;if (parent == null) {return false;}// 自定義View可以重寫這個方法阻止事件的發送。final boolean propagate = onRequestSendAccessibilityEvent(child, event);if (!propagate) {return false;}return parent.requestSendAccessibilityEvent(this, event); }

5. 【目標App】ViewRootImpl.requestSendAccessibilityEvent(View child, AccessibilityEvent event)

該方法對幾個特殊的EventType進行了處理,在此我們先不關注,之后調用AccessibilityManager的sendAccessibilityEvent(AccessibilityEvent event)方法。

public boolean requestSendAccessibilityEvent(View child, AccessibilityEvent event) {if (mView == null || mStopped || mPausedForTransition) {return false;}final int eventType = event.getEventType();switch (eventType) {// 對某些eventType進行了特殊處理,在此省略}mAccessibilityManager.sendAccessibilityEvent(event);return true; }

6. 【目標App】AccessibilityManager.sendAccessibilityEvent(AccessibilityEvent event)

這里再次檢查了輔助功能當前是否開啟,之后就通過Binder進入AccessibilityManagerService【下文簡稱AMS,額,不要以為是ActivityManagerService】的世界了。

public void sendAccessibilityEvent(AccessibilityEvent event) {final IAccessibilityManager service;final int userId;synchronized (mLock) {service = getServiceLocked();if (service == null) {return;}if (!mIsEnabled) {Looper myLooper = Looper.myLooper();if (myLooper == Looper.getMainLooper()) {throw new IllegalStateException("Accessibility off. Did you forget to check that?");} else {Log.e(LOG_TAG, "AccessibilityEvent sent with accessibility disabled");return;}}userId = mUserId;}boolean doRecycle = false;try {event.setEventTime(SystemClock.uptimeMillis());long identityToken = Binder.clearCallingIdentity();// 向AccessibilityManagerService發送AccessibilityEventdoRecycle = service.sendAccessibilityEvent(event, userId);Binder.restoreCallingIdentity(identityToken);if (DEBUG) {Log.i(LOG_TAG, event + " sent");}} catch (RemoteException re) {Log.e(LOG_TAG, "Error during sending " + event + " ", re);} finally {if (doRecycle) {event.recycle();}}

7. 【AMS】 AccessibilityManagerService.sendAccessibilityEvent(AccessibilityEvent event, int userId)

在進行了一些檢查和準備工作后,最后調用notifyAccessibilityServicesDelayedLocked(AccessibilityEvent event, boolean isDefault)準備開始分發。

@Override public boolean sendAccessibilityEvent(AccessibilityEvent event, int userId) {synchronized (mLock) {final int resolvedUserId = mSecurityPolicy.resolveCallingUserIdEnforcingPermissionsLocked(userId);if (resolvedUserId != mCurrentUserId) {return true; // yes, recycle the event}if (mSecurityPolicy.canDispatchAccessibilityEventLocked(event)) {mSecurityPolicy.updateActiveAndAccessibilityFocusedWindowLocked(event.getWindowId(),event.getSourceNodeId(), event.getEventType(), event.getAction());mSecurityPolicy.updateEventSourceLocked(event);// 開始分發AccessibilityEventnotifyAccessibilityServicesDelayedLocked(event, false);notifyAccessibilityServicesDelayedLocked(event, true);}if (mHasInputFilter && mInputFilter != null) {mMainHandler.obtainMessage(MainHandler.MSG_SEND_ACCESSIBILITY_EVENT_TO_INPUT_FILTER,AccessibilityEvent.obtain(event)).sendToTarget();}event.recycle();}return (OWN_PROCESS_ID != Binder.getCallingPid()); }

8. 【AMS】 AccessibilityManagerService.notifyAccessibilityServicesDelayedLocked(AccessibilityEvent event, boolean isDefault)

UserState是AccessibilityManagerService一個內部類,在這個類里保存了一個用戶當前安裝了的、開啟了的、已經建立連接的AccessibilityService列表等等信息。在初始化、安裝/卸載應用、切換用戶、開關輔助功能等等操作時,系統會對UserState的信息進行更新。mBoundServices中保存的就是當前已經啟動了的Service列表,Service類也是AccessibilityManagerService的一個內部類,里面儲存了從輔助App讀取到的配置信息,即我們在輔助App的xml里配置的內容,并且Service類還會負責與各個AccessibilityService建立連接、進行通訊,管理著AccessibilityService的生命周期。此時會調用每個Service的notifyAccessibilityEvent(AccessibilityEvent event)進行事件的分發。

其中canDispatchEventToServiceLocked(Service service, AccessibilityEvent event)方法是用于判斷該Service是否可以接收當前的AccessibilityEvent,即根據輔助App配置的需要接收的EventType和packageName等信息進行判斷。

private void notifyAccessibilityServicesDelayedLocked(AccessibilityEvent event, boolean isDefault) {try {UserState state = getCurrentUserStateLocked();for (int i = 0, count = state.mBoundServices.size(); i < count; i++) {Service service = state.mBoundServices.get(i);if (service.mIsDefault == isDefault) {// 輔助App接收該packageName和該EventType時才會分發if (canDispatchEventToServiceLocked(service, event)) {service.notifyAccessibilityEvent(event);}}}} catch (IndexOutOfBoundsException oobe) {// An out of bounds exception can happen if services are going away// as the for loop is running. If that happens, just bail because// there are no more services to notify.} }

9. 【AMS】 AccessibilityManagerService.Service.notifyAccessibilityEvent(AccessibilityEvent event)

利用Service里定義的Handler把事件發出去,在handleMessage中進而調用了notifyAccessibilityEventInternal(int eventType, AccessibilityEvent event)方法。

public void notifyAccessibilityEvent(AccessibilityEvent event) {synchronized (mLock) {final int eventType = event.getEventType();// 復制當前的AccessibilityEventAccessibilityEvent newEvent = AccessibilityEvent.obtain(event);Message message;if ((mNotificationTimeout > 0)&& (eventType != AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED)) {// Allow at most one pending eventfinal AccessibilityEvent oldEvent = mPendingEvents.get(eventType);mPendingEvents.put(eventType, newEvent);if (oldEvent != null) {mEventDispatchHandler.removeMessages(eventType);oldEvent.recycle();}message = mEventDispatchHandler.obtainMessage(eventType);} else {// Send all messages, bypassing mPendingEventsmessage = mEventDispatchHandler.obtainMessage(eventType, newEvent);}mEventDispatchHandler.sendMessageDelayed(message, mNotificationTimeout);}}public Handler mEventDispatchHandler = new Handler(mMainHandler.getLooper()) {@Overridepublic void handleMessage(Message message) {final int eventType = message.what;AccessibilityEvent event = (AccessibilityEvent) message.obj;notifyAccessibilityEventInternal(eventType, event);}};

10. 【AMS】 AccessibilityManagerService.Service.notifyAccessibilityEventInternal(int eventType, AccessibilityEvent event)

該方法中的IAccessibilityServiceClient是AccessibilityService中的內部類IAccessibilityServiceClientWrapper,通過Binder調用了其onAccessibilityEvent(AccessibilityEvent event)方法。之后我們便轉入了輔助App也就是接收輔助事件的App中。

private void notifyAccessibilityEventInternal(int eventType, AccessibilityEvent event) {IAccessibilityServiceClient listener;synchronized (mLock) {listener = mServiceInterface;// If the service died/was disabled while the message for dispatching// the accessibility event was propagating the listener may be null.if (listener == null) {return;}if (event == null) {event = mPendingEvents.get(eventType);if (event == null) {return;}mPendingEvents.remove(eventType);}if (mSecurityPolicy.canRetrieveWindowContentLocked(this)) {event.setConnectionId(mId);} else {event.setSource(null);}event.setSealed(true);}try {// 分發給輔助Applistener.onAccessibilityEvent(event);if (DEBUG) {Slog.i(LOG_TAG, "Event " + event + " sent to " + listener);}} catch (RemoteException re) {Slog.e(LOG_TAG, "Error during sending " + event + " to " + listener, re);} finally {event.recycle();}}

11. 【輔助App】 AccessibilityService.IAccessibilityServiceClientWrapper.onAccessibilityEvent(AccessibilityEvent event)

此時通過mCaller發送了message code為DO_ON_ACCESSIBILITY_EVENT的Message,mCaller是IAccessibilityServiceClientWrapper中持有的一個HandlerCaller,在IAccessibilityServiceClientWrapper的構造方法中通過mCaller = new HandlerCaller(context, looper, this, true /asyncHandler/)創建,其中第三個參數即HandlerCaller的Callback,因此最終會回調IAccessibilityServiceClientWrapper的executeMessage方法。

在此我們只看message code為DO_ON_ACCESSIBILITY_EVENT的實現,可以看到最后調用的是mCallback.onAccessibilityEvent(event),這個mCallback是什么呢?在AccessibilityService里定義了一個接口Callbacks,IAccessibilityServiceClientWrapper中持有的這個Callbacks是由其構造方法傳入的參數。而IAccessibilityServiceClientWrapper是在AccessibilityService的onBind(Intent intent)方法中生成了,其中Callbacks的onAccessibilityEvent(AccessibilityEvent event)方法實現非常簡單,直接調用了AccessibilityService.this.onAccessibilityEvent(event),這個也就是我們在輔助App中重寫的onAccessibilityEvent(AccessibilityEvent event)方法了。

public void onAccessibilityEvent(AccessibilityEvent event) {Message message = mCaller.obtainMessageO(DO_ON_ACCESSIBILITY_EVENT, event);mCaller.sendMessage(message); }public void executeMessage(Message message) {switch (message.what) {case DO_ON_ACCESSIBILITY_EVENT: {AccessibilityEvent event = (AccessibilityEvent) message.obj;if (event != null) {// 如果是設計UI方面的eventType會對一些緩存進行更新AccessibilityInteractionClient.getInstance().onAccessibilityEvent(event);mCallback.onAccessibilityEvent(event);// Make sure the event is recycled.try {event.recycle();} catch (IllegalStateException ise) {/* ignore - best effort */}}} return;...// 其他實現省略}}@Override public void onAccessibilityEvent(AccessibilityEvent event) {AccessibilityService.this.onAccessibilityEvent(event); }

到此,AccessibilityEvent便由目標App經由AccessibilityManagerService發送到了輔助App上,如果用圖展示的話大致如下(圖中省去了部分Handler的流程):

點擊查看大圖


補遺

目標App與AccessibilityManagerService的通訊

其實目標App與AccessibilityManagerService之間除了在發送AccessibilityEvent時進行了通訊外,在第一次連接獲取輔助服務開關狀態以及開關狀態發生變化時都會進行通訊。判斷輔助服務是否開啟的邏輯如下:

public boolean isEnabled() {synchronized (mLock) {IAccessibilityManager service = getServiceLocked();if (service == null) {return false;}return mIsEnabled;} }private IAccessibilityManager getServiceLocked() {if (mService == null) {tryConnectToServiceLocked(null);}return mService; }private void tryConnectToServiceLocked(IAccessibilityManager service) {if (service == null) {IBinder iBinder = ServiceManager.getService(Context.ACCESSIBILITY_SERVICE);if (iBinder == null) {return;}service = IAccessibilityManager.Stub.asInterface(iBinder);}try {// 向AccessibilityManagerService添加client時會返回當前開關狀態final int stateFlags = service.addClient(mClient, mUserId);setStateLocked(stateFlags);mService = service;} catch (RemoteException re) {Log.e(LOG_TAG, "AccessibilityManagerService is dead", re);} }

AccessibilityManager中用mIsEnabled變量標識當前輔助功能是否開啟,如果當前已經和AccessibilityManagerService建立了聯系則直接返回該標識,如果沒有會嘗試和AccessibilityManagerService聯系,調用AccessibilityManagerService.addClient(mClient, mUserId)方法就能得到當前輔助功能的開關狀態,之后通過setStateLocked(stateFlags)給mIsEnabled變量賦值。

private void setStateLocked(int stateFlags) {final boolean enabled = (stateFlags & STATE_FLAG_ACCESSIBILITY_ENABLED) != 0;final boolean touchExplorationEnabled =(stateFlags & STATE_FLAG_TOUCH_EXPLORATION_ENABLED) != 0;final boolean highTextContrastEnabled =(stateFlags & STATE_FLAG_HIGH_TEXT_CONTRAST_ENABLED) != 0;final boolean wasEnabled = mIsEnabled;final boolean wasTouchExplorationEnabled = mIsTouchExplorationEnabled;final boolean wasHighTextContrastEnabled = mIsHighTextContrastEnabled;// Ensure listeners get current state from isZzzEnabled() calls.mIsEnabled = enabled;mIsTouchExplorationEnabled = touchExplorationEnabled;mIsHighTextContrastEnabled = highTextContrastEnabled;if (wasEnabled != enabled) {mHandler.sendEmptyMessage(MyHandler.MSG_NOTIFY_ACCESSIBILITY_STATE_CHANGED);}if (wasTouchExplorationEnabled != touchExplorationEnabled) {mHandler.sendEmptyMessage(MyHandler.MSG_NOTIFY_EXPLORATION_STATE_CHANGED);}if (wasHighTextContrastEnabled != highTextContrastEnabled) {mHandler.sendEmptyMessage(MyHandler.MSG_NOTIFY_HIGH_TEXT_CONTRAST_STATE_CHANGED);} }

除此之外還可以看到我們可以向AccessibilityManager注冊一些AccessibilityStateChangeListener,當開關狀態發生變化時我們能拿到相應的回調。

在調用AccessibilityManagerService.addClient(mClient, mUserId)時,目標App就向AccessibilityManagerService注冊了自己,mClient代碼如下:

private final IAccessibilityManagerClient.Stub mClient =new IAccessibilityManagerClient.Stub() {public void setState(int state) {mHandler.obtainMessage(MyHandler.MSG_SET_STATE, state, 0).sendToTarget();} };

當輔助功能開關變化時,AccessibilityManagerService會調用每個client的setState(int state)方法,通過Handler又調用了setStateLocked(state)方法修改了開關狀態。

第7步AccessibilityManagerService進行了哪些檢查和準備

系統不允許后臺用戶發送AccessibilityEvent,所以首先會檢查處理后的UserId是否和當前UserId一樣。實際使用中,多用戶的情況并不多,所以我們基本無需考慮UserId的問題。

public int resolveCallingUserIdEnforcingPermissionsLocked(int userId) {final int callingUid = Binder.getCallingUid();if (callingUid == 0|| callingUid == Process.SYSTEM_UID|| callingUid == Process.SHELL_UID) {if (userId == UserHandle.USER_CURRENT|| userId == UserHandle.USER_CURRENT_OR_SELF) {return mCurrentUserId;}return resolveProfileParentLocked(userId);}final int callingUserId = UserHandle.getUserId(callingUid);if (callingUserId == userId) {return resolveProfileParentLocked(userId);}final int callingUserParentId = resolveProfileParentLocked(callingUserId);if (callingUserParentId == mCurrentUserId &&(userId == UserHandle.USER_CURRENT|| userId == UserHandle.USER_CURRENT_OR_SELF)) {return mCurrentUserId;}if (!hasPermission(Manifest.permission.INTERACT_ACROSS_USERS)&& !hasPermission(Manifest.permission.INTERACT_ACROSS_USERS_FULL)) {throw new SecurityException("Call from user " + callingUserId + " as user "+ userId + " without permission INTERACT_ACROSS_USERS or "+ "INTERACT_ACROSS_USERS_FULL not allowed.");}if (userId == UserHandle.USER_CURRENT|| userId == UserHandle.USER_CURRENT_OR_SELF) {return mCurrentUserId;}throw new IllegalArgumentException("Calling user can be changed to only "+ "UserHandle.USER_CURRENT or UserHandle.USER_CURRENT_OR_SELF.");}private int resolveProfileParentLocked(int userId) {if (userId != mCurrentUserId) {final long identity = Binder.clearCallingIdentity();try {UserInfo parent = mUserManager.getProfileParent(userId);if (parent != null) {return parent.getUserHandle().getIdentifier();}} finally {Binder.restoreCallingIdentity(identity);}}return userId;}

之后會檢查這個AccessibilityEvent能不能分發,見下面的代碼,一部分EventType是必定可以分發的,其他的EventType會再檢查Window的情況。

private boolean canDispatchAccessibilityEventLocked(AccessibilityEvent event) {final int eventType = event.getEventType();switch (eventType) {case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:case AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:case AccessibilityEvent.TYPE_ANNOUNCEMENT:case AccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_START:case AccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_END:case AccessibilityEvent.TYPE_GESTURE_DETECTION_START:case AccessibilityEvent.TYPE_GESTURE_DETECTION_END:case AccessibilityEvent.TYPE_TOUCH_INTERACTION_START:case AccessibilityEvent.TYPE_TOUCH_INTERACTION_END:case AccessibilityEvent.TYPE_VIEW_HOVER_ENTER:case AccessibilityEvent.TYPE_VIEW_HOVER_EXIT:case AccessibilityEvent.TYPE_ASSIST_READING_CONTEXT:case AccessibilityEvent.TYPE_WINDOWS_CHANGED: {return true;}default: {return isRetrievalAllowingWindow(event.getWindowId());}}}private boolean isRetrievalAllowingWindow(int windowId) {// The system gets to interact with any window it wants.if (Binder.getCallingUid() == Process.SYSTEM_UID) {return true;}if (windowId == mActiveWindowId) {return true;}return findWindowById(windowId) != null;}

這2項檢查通過之后,就準備分發事件了,updateActiveAndAccessibilityFocusedWindowLocked方法主要更新了一些跟Window相關的東西,而updateEventSourceLocked方法則是會把不在RETRIEVAL_ALLOWING_EVENT_TYPES之中的AccessibilityEvent的source置為null。

private static final int RETRIEVAL_ALLOWING_EVENT_TYPES =AccessibilityEvent.TYPE_VIEW_CLICKED| AccessibilityEvent.TYPE_VIEW_FOCUSED| AccessibilityEvent.TYPE_VIEW_HOVER_ENTER| AccessibilityEvent.TYPE_VIEW_HOVER_EXIT| AccessibilityEvent.TYPE_VIEW_LONG_CLICKED| AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED| AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED| AccessibilityEvent.TYPE_VIEW_SELECTED| AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED| AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED| AccessibilityEvent.TYPE_VIEW_SCROLLED| AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED| AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED| AccessibilityEvent.TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY; 原文地址: https://darkness463.github.io/2017/04/17/accessibility-event/

總結

以上是生活随笔為你收集整理的总结】Android辅助功能(一)-AccessibilityEvent的分发的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产一级片久久 | 久久99精品国产麻豆婷婷 | 一区二区三区免费 | 三级动态视频在线观看 | 日韩精品一区不卡 | 免费av大片 | 中文字幕一区二区三区久久蜜桃 | 九九综合久久 | 日韩在线观看中文 | 欧美一区二区日韩一区二区 | 日日爱影视| 亚洲精品在线视频观看 | 国内精品视频久久 | 美女免费网站 | 久热国产视频 | 色婷婷综合久久久中文字幕 | 美女视频黄免费 | 狠狠伊人 | 丁香婷婷综合五月 | 国产男女无遮挡猛进猛出在线观看 | 国产精品久久电影网 | 特黄免费av| 最新av在线播放 | 日韩中文字幕免费在线播放 | 亚洲一区av | 人人插人人草 | 亚洲日日射 | 国产精品国产三级国产不产一地 | 精品久久久一区二区 | 精品久久久久久综合 | 玖草在线观看 | 天天操天天怕 | 一区在线免费观看 | www.久久91| 九九免费精品 | 久久国产精品小视频 | 欧美激情综合五月色丁香 | 成人蜜桃网 | 免费三级大片 | 黄色精品在线看 | 久草视频免费 | av成人动漫在线观看 | 日韩免费观看av | 久久亚洲福利 | 成人作爱视频 | 99久久精品视频免费 | 色婷婷导航 | 日韩高清在线不卡 | 日本不卡一区二区三区在线观看 | 日韩综合视频在线观看 | 91大神一区二区三区 | 五月婷婷影视 | 97电影在线观看 | 婷婷色网站 | 天堂成人在线 | 成年人免费电影在线观看 | 久久久久国 | 青草视频免费观看 | 日韩欧美国产精品 | 九九色在线观看 | 天天综合区 | 久久精品99视频 | 亚洲视频专区在线 | 国产精品毛片久久久久久久久久99999999 | 亚洲美女免费视频 | 久久只精品99品免费久23小说 | 成人毛片a | 久久伦理网 | 国产精品麻豆欧美日韩ww | 国内丰满少妇猛烈精品播 | 日韩免费在线一区 | 99久久超碰中文字幕伊人 | 亚洲一区二区视频在线播放 | 欧美精品久久久久a | 久久精品国产免费看久久精品 | www日日 | 欧美日韩色婷婷 | 国产成人福利在线观看 | 国产乱老熟视频网88av | 在线免费看黄网站 | 国产乱码精品一区二区三区介绍 | 911免费视频| 成年人视频免费在线播放 | 人人玩人人添人人澡超碰 | 欧美精品中文在线免费观看 | 亚洲特级片 | 久久久亚洲电影 | 日韩资源视频 | 久久伊人91| 中文字幕在线免费看线人 | 国产成人一区二区三区在线观看 | 日韩视频免费看 | 久久精品一二区 | 国产精品麻豆99久久久久久 | 亚洲视频精品在线 | 久久精品一区二区三区国产主播 | 国产精品激情偷乱一区二区∴ | 国产精品久久二区 | 日韩网站中文字幕 | 日韩中文字幕在线 | 国产亚洲人成网站在线观看 | 亚洲无人区小视频 | 亚洲精品国产综合99久久夜夜嗨 | 中文字幕资源站 | 美女av免费| 久久久国产一区二区三区 | 国产尤物视频在线 | 亚洲精品在线观看的 | avav99| 亚洲五月综合 | 久久国产精品免费观看 | 国产婷婷| 天无日天天操天天干 | 久射网| 国产高清视频在线 | 色丁香久久 | 日韩激情视频在线观看 | 国产精品久久人 | 成人免费视频播放 | 久久精品久久综合 | 日韩成人黄色 | av网在线观看 | 一区二区三区四区不卡 | 肉色欧美久久久久久久免费看 | 久久精品一区二区三区视频 | 日韩欧美视频一区二区三区 | 国产精品一区二区白浆 | 黄色的视频网站 | 中文字幕av一区二区三区四区 | 天天看天天操 | 91看片淫黄大片一级在线观看 | 人人爽人人爽人人爽 | 亚洲色图 校园春色 | 亚洲高清精品在线 | 91香蕉视频在线下载 | 中文字幕丰满人伦在线 | 久久久久亚洲精品中文字幕 | 久久国产精品一二三区 | 免费十分钟 | 国产中文伊人 | 亚洲国产精品人久久电影 | 天天干天天综合 | 欧美日韩国产在线一区 | 在线观看免费91 | 91成年人网站| 久久久久亚洲精品国产 | 久久系列 | 六月丁香六月婷婷 | 五月婷婷操 | 国产福利免费在线观看 | 日韩网站在线 | 欧美色插 | 亚洲精品久久久蜜桃 | 亚洲国产婷婷 | 日韩欧美国产激情在线播放 | 精品国产乱码久久久久久1区二区 | 免费看国产a | 人人插人人射 | 国模精品一区二区三区 | 超碰在线亚洲 | 午夜精品婷婷 | 97在线观看免费观看高清 | 中文字幕在线观看2018 | 久久午夜色播影院免费高清 | 亚洲aaa毛片 | 人人干狠狠干 | 日韩天堂在线观看 | 天天爱天天 | 免费av黄色 | 九九久久久久久久久激情 | av中文字幕剧情 | 肉色欧美久久久久久久免费看 | 亚洲国产综合在线 | 免费精品国产 | 中文字幕乱码视频 | 黄色网址av| 亚洲美女视频在线观看 | 国产一区二区在线免费观看 | 青春草视频在线播放 | 欧美精品午夜 | 免费在线黄 | 国产精品久久久久久五月尺 | 精品国产伦一区二区三区观看方式 | 国产精品一区电影 | 国产精品国产三级国产 | 中文字幕的 | 国产精品久久久久一区 | 成人免费视频观看 | 一级性视频 | 九九热视频在线免费观看 | av网站在线观看播放 | 婷婷久月| 国内精品小视频 | 91免费版成人 | 久久久午夜精品福利内容 | 国产精品黑丝在线观看 | 97狠狠操 | 久草在线免费电影 | 中文字幕在线观看亚洲 | 精品日韩在线 | 玖玖在线资源 | 日韩欧美国产精品 | 欧美日韩在线观看一区二区三区 | 一级成人免费视频 | 久久久网 | 三级a视频 | 五月天亚洲婷婷 | 久久国产精品免费 | 亚洲三级网站 | 日本中文字幕久久 | 国产福利在线免费观看 | 日韩在线视频播放 | av官网| 亚洲高清在线观看视频 | 婷婷成人亚洲综合国产xv88 | 97在线看片 | 99亚洲精品 | 在线电影91 | 国产视频一二三 | 中国成人一区 | www.天天操| 久草久草视频 | 婷婷午夜 | 国产精品亚洲人在线观看 | 国产拍揄自揄精品视频麻豆 | 色在线视频网 | 激情五月av| 欧美日韩不卡一区 | 日日夜夜精品视频天天综合网 | 欧美性视频网站 | 午夜视频一区二区 | 久久久久久久网站 | 日韩精品字幕 | 99热最新网址 | 97精品国产91久久久久久 | 久久爱992xxoo| 最新99热 | 午夜av剧场 | 国产精品久久二区 | 久久午夜电影 | 国产精品国产三级国产 | 操久 | 精品欧美一区二区三区久久久 | 日韩伦理片一区二区三区 | 九色自拍视频 | 日韩免费在线播放 | 中国一级片在线观看 | 亚洲国产中文字幕在线观看 | 国产精品欧美日韩在线观看 | 国产小视频精品 | 91香蕉视频720p | 亚洲综合色视频在线观看 | 国产精品一区二区三区在线免费观看 | 中文字幕一区av | 天天爽天天射 | 欧美天天干 | 狠狠激情中文字幕 | 黄色亚洲 | 一区二区三区免费在线播放 | 久久综合综合久久综合 | 麻豆精品视频 | 久草线 | 婷婷在线免费观看 | 日韩羞羞 | 欧美在线不卡一区 | 91探花视频 | www.色爱| 少妇高潮冒白浆 | 欧美日韩在线观看视频 | 国产日韩欧美在线观看 | 国产精品成人免费 | 日日干干夜夜 | av亚洲产国偷v产偷v自拍小说 | 在线观看视频97 | 久久久久中文字幕 | av中文字幕在线观看网站 | 香蕉视频亚洲 | 国产精品毛片久久久久久久久久99999999 | 日韩啪视频 | 久久精品国产成人精品 | 久久久久成 | 中文字幕黄色av | 日日夜夜天天 | 肉色欧美久久久久久久免费看 | 国产成在线观看免费视频 | 在线黄色国产电影 | 国产精品一区二区三区免费看 | 在线黄频 | 欧美色一色 | 亚洲欧美在线综合 | 国产日韩视频在线观看 | 久久久国产一区二区 | 免费在线观看日韩视频 | 亚洲最大激情中文字幕 | 深夜免费小视频 | 免费看片色 | 亚洲在线网址 | 国产久草在线 | 狠狠躁日日躁狂躁夜夜躁 | 色综合久久综合中文综合网 | 99免费精品 | 夜夜躁日日躁狠狠久久av | 久久久久久久久久福利 | 91精品视频网站 | 青青草国产精品视频 | 亚洲激情精品 | 久久蜜臀一区二区三区av | 日韩试看| 日本在线中文 | 天天色草| www.久久爱.cn | 最新国产在线视频 | 黄色成品视频 | 国产精品久久久久一区二区 | 欧美久久精品 | 在线日韩精品视频 | 欧美黄色软件 | 日韩欧美国产精品 | 人人超碰在线 | 欧美狠狠色 | 人人射人人 | 一本一本久久a久久精品综合妖精 | 天天插日日操 | 欧美视频99 | 精壮的侍卫呻吟h | 深夜福利视频在线观看 | 在线观看福利网站 | www亚洲一区 | 亚洲精品久久久久久久蜜桃 | 亚洲精品字幕 | 久草网在线观看 | 99久高清在线观看视频99精品热在线观看视频 | 婷婷深爱网 | 国产精品一区电影 | 久久夜色电影 | 97香蕉久久国产在线观看 | 99精品欧美一区二区三区 | 五月婷婷综合在线视频 | 欧美一级黄色视屏 | 免费人成网 | 一二区av | 激情丁香综合 | a级一a一级在线观看 | 人人狠狠综合久久亚洲婷 | 亚洲免费在线观看视频 | 亚洲精品网站在线 | 在线三级播放 | 中文字幕在线免费 | 粉嫩av一区二区三区免费 | 中文字幕专区高清在线观看 | 欧美精品亚洲精品 | 精品欧美一区二区精品久久 | 中文字幕日韩av | 草草草影院 | 欧美日韩在线观看一区二区 | 99久久久免费视频 | 又紧又大又爽精品一区二区 | 天天摸日日摸人人看 | 国产在线97 | 96国产在线 | 日韩美女久久 | 丁香高清视频在线看看 | 精品主播网红福利资源观看 | 国产在线精品观看 | 人人爽人人乐 | 国产在线a视频 | 欧美片网站yy | 91成人午夜| 国产在线专区 | 开心丁香婷婷深爱五月 | 亚洲成人精品在线 | 深夜免费福利视频 | 日日爱网址 | 久久精品成人热国产成 | 国产乱对白刺激视频在线观看女王 | 免费看污在线观看 | 欧美性大战| 亚洲视频免费在线 | 免费观看性生交大片3 | 久久情爱 | 99久久99久久精品国产片果冰 | 久草在线视频免赞 | 亚洲成人免费观看 | 中文字幕在线观看网址 | 国产69精品久久99的直播节目 | 婷婷精品国产一区二区三区日韩 | 国产一区二区免费 | 精品视频在线免费观看 | 天天色天天干天天 | 狠狠精品 | www.夜夜干.com| 麻豆系列在线观看 | 免费黄色看片 | 亚洲国产手机在线 | 69精品 | 99久久这里有精品 | 久99久中文字幕在线 | 欧美最猛性xxxxx免费 | av先锋中文字幕 | 99久久精品免费看 | 亚洲丝袜一区二区 | 久色婷婷 | 国产青春久久久国产毛片 | 日韩色中色| 一区二区三区高清在线 | 成人黄色大片在线观看 | 亚洲精品在线国产 | 免费看特级毛片 | 免费视频久久久久 | 午夜性色 | 久久一精品 | 国产精品久久久久久久久婷婷 | 国产区在线视频 | 成人黄色免费在线观看 | 欧美亚洲免费在线一区 | 91精品国产一区二区在线观看 | 国产免费视频一区二区裸体 | 99精品视频免费看 | 欧美色插| 手机在线中文字幕 | 色偷偷网站视频 | 久久激情五月婷婷 | 国产精品久久久久三级 | 日韩免费av网址 | 中文字幕在线观看免费观看 | 久久久久这里只有精品 | 国产精品久久久久久高潮 | 久久九九免费视频 | 免费观看午夜视频 | 日韩欧美一区二区不卡 | 亚洲性少妇性猛交wwww乱大交 | 91原创在线观看 | 日韩免费网址 | 国产精品综合在线 | 国产亚洲精品免费 | 69视频网站| 精品免费国产一区二区三区四区 | 97超碰人人 | 又黄又刺激的网站 | 99精品欧美一区二区三区黑人哦 | 成人小视频在线免费观看 | 久久人人添人人爽添人人88v | 亚洲一级二级 | 久久精品aaa | 国产精品短视频 | 在线观看视频色 | 国产高清一 | 免费看黄色毛片 | 成人午夜电影网站 | 国产一二区在线观看 | 看毛片的网址 | 国产精品视频你懂的 | 日韩成人看片 | 欧美一级性生活视频 | av电影免费在线 | 中文字幕日本在线 | 一区二区三区日韩视频在线观看 | 成人免费视频观看 | a资源在线 | 奇米777777 | 在线播放一区二区三区 | 一区二区三区在线观看 | 日韩精品一二三 | 最新精品视频在线 | 国产精品精品国产色婷婷 | av一本久道久久波多野结衣 | 中文字幕在 | 97精品在线观看 | 婷婷久久久 | 中文字幕有码在线 | 伊人手机在线 | 久久精品一区二区 | 亚洲精品一区二区三区在线观看 | 色婷婷啪啪免费在线电影观看 | 麻豆传媒一区二区 | 久久国产免费看 | 国产午夜视频在线观看 | 日韩av一区二区三区在线观看 | 亚洲视频免费在线看 | www色av| 日韩一二三| www.av免费| 西西人体4444www高清视频 | 久久99视频免费 | 精品国产一区二区三区久久久蜜臀 | 福利久久| 久久av中文字幕片 | 亚洲成人网在线 | 免费网站看v片在线a | 国产女人18毛片水真多18精品 | 激情视频区 | av播放在线 | 久久在线免费视频 | 色就色,综合激情 | 激情片av | 中文在线www| 国产三级国产精品国产专区50 | 天天做日日做天天爽视频免费 | 国产成人精品午夜在线播放 | 亚洲激色 | 精品免费国产一区二区三区四区 | 日韩爱爱片 | 亚洲最新在线 | 久久亚洲私人国产精品 | 91热| 97香蕉超级碰碰久久免费软件 | 97国产超碰 | 99国产在线视频 | www亚洲国产 | 国产精彩在线视频 | 国产亚洲精品福利 | 国产一区二区三区免费视频 | 亚洲每日更新 | 狠狠亚洲| 人人射人人澡 | 国产99久久| 波多野结衣网址 | 色网站在线免费观看 | av日韩在线网站 | 免费看成人 | 亚洲97在线 | 果冻av在线 | 日日夜夜骑| 色网影音先锋 | 又大又硬又黄又爽视频在线观看 | 特级黄色片免费看 | 日本久久视频 | 91在线国内视频 | 在线免费黄色av | 精品一区91 | 久久短视频 | 亚洲视频 一区 | 精品美女国产在线 | 成人影片免费 | 天天曰天天射 | 五月激情丁香婷婷 | 亚洲精品午夜国产va久久成人 | 国产999精品久久久久久 | 97在线观看 | 日韩免费视频线观看 | 九九热久久免费视频 | 在线国产一区二区 | 精品资源在线 | 精品在线播放 | 911av视频| 在线观看日韩精品 | 国产专区视频在线 | 婷婷国产在线观看 | 99热这里只有精品久久 | 欧美日韩在线免费观看 | 成人av资源| 免费亚洲黄色 | 三级在线国产 | 欧美日韩亚洲在线 | 婷婷久久一区 | 久久公开视频 | 99精品欧美一区二区蜜桃免费 | 精品久久久久久国产91 | 亚洲午夜久久久久久久久电影网 | 国产成人一区在线 | 亚洲伦理一区二区 | 国产成人一区二区三区在线观看 | 天天操天天干天天干 | 久久久久国产一区二区 | 国产在线视频一区 | 免费a网站 | 国产自制av | 久久久精品久久日韩一区综合 | 精品亚洲欧美无人区乱码 | 国产日产精品一区二区三区四区的观看方式 | 丁香综合五月 | 一区二区伦理电影 | 日韩伦理一区二区三区av在线 | 午夜在线观看影院 | 国产精品理论片在线播放 | 精品毛片在线 | 免费看的黄色 | 日本精品视频在线 | 成人看片| 嫩草伊人久久精品少妇av | 国产在线a免费观看 | 成人动态视频 | av 一区二区三区 | 五月婷婷中文网 | 成人在线视频你懂的 | 黄色软件视频大全免费下载 | 在线看小早川怜子av | aaa亚洲精品一二三区 | 免费美女久久99 | 91亚洲视频在线观看 | 色综合婷婷久久 | 九9热这里真品2 | 91手机视频在线 | 99超碰在线播放 | 91精品1区2区 | 综合铜03 | 久久久久久99精品 | 综合久久久久久久 | 国产人成精品一区二区三 | 亚洲国产免费看 | 欧美日韩一区二区在线观看 | 青青河边草免费直播 | 免费黄a | 黄色成年片 | 日本精品视频网站 | 日韩 在线观看 | 91亚洲精品在线 | 日韩乱色精品一区二区 | 91视频亚洲| 国产精品美女久久久久久久久久久 | 国产福利电影网址 | 99精品视频免费看 | 国产高清专区 | 欧美日韩xxx | 日韩精品视频久久 | 久久免费视频精品 | 亚洲 欧美 日韩 综合 | 最新国产中文字幕 | 国产中文在线播放 | 国产成人精品免费在线观看 | 日日干av | 综合网天天 | 色吊丝在线永久观看最新版本 | 日韩精品免费在线观看 | 国产做aⅴ在线视频播放 | 国产成人亚洲在线观看 | 久久久久免费精品国产小说色大师 | 欧美片一区二区三区 | 国产免费一区二区三区最新6 | 中文字幕中文字幕 | www.久久com | 久久无码av一区二区三区电影网 | 天天干天天天 | 日韩午夜在线观看 | 91超碰免费在线 | 久久精品日产第一区二区三区乱码 | 超碰av在线播放 | 草莓视频在线观看免费观看 | 丁香久久 | 天天射射天天 | 日韩欧美一二三 | 亚洲高清视频在线观看免费 | 亚洲黄色精品 | 天天干,天天射,天天操,天天摸 | 一区二区三区在线免费观看 | 国产日韩精品一区二区三区 | 国产精品美女在线 | 国产精品对白一区二区三区 | 欧美精品日韩 | 国产精品尤物视频 | 精品久久福利 | 天天爽天天爽天天爽 | 久热av在线| 久草视频在线观 | a色视频| 亚洲播播| 黄色在线成人 | 在线视频1卡二卡三卡 | 狠狠操.com| 国产蜜臀av | 色姑娘综合天天 | 欧美日韩国产综合网 | 久久久精华网 | а中文在线天堂 | 国产精品婷婷午夜在线观看 | 久久99热国产 | 麻豆视频观看 | 久久综合九色综合97婷婷女人 | 久久精品理论 | 欧美日韩久久一区 | 91精品国产99久久久久久久 | 久久精品久久精品久久 | 99九九热只有国产精品 | 在线免费视频 你懂得 | 欧美午夜久久久 | 欧美日韩裸体免费视频 | 欧美激情精品久久久久久 | 亚洲视频h | 美女网站黄免费 | 久久精品女人毛片国产 | 欧美aaa大片 | 精品一区二区久久久久久久网站 | 天天综合网国产 | 国产一级特黄毛片在线毛片 | 国产一区二区三区高清播放 | 国产69精品久久99不卡的观看体验 | 亚洲视频久久久久 | 国产一级视频在线 | 中日韩在线视频 | 人人干天天干 | 国产 日韩 中文字幕 | 久久激情五月婷婷 | 国产又粗又猛又爽又黄的视频先 | 国产成人99av超碰超爽 | 一区二区三区在线免费观看 | 亚洲国产中文字幕在线 | 免费在线黄网 | 一区二区三区高清在线 | 国产在线观看av | 操操操夜夜操 | 黄色av一级片 | 久久激情视频 | 中文字幕在线观看一区二区三区 | 亚洲欧洲美洲av | 国产剧情一区二区在线观看 | 久久国产女人 | 国产精品自在欧美一区 | 视频国产区 | 天天干天天做天天操 | 99久久精| 麻豆免费在线播放 | 国产精品久久久久久一二三四五 | 日韩动漫免费观看高清完整版在线观看 | av天天澡天天爽天天av | 成人资源网| 久久综合色影院 | 亚洲国产美女精品久久久久∴ | 在线国产欧美 | 久久免费视频在线观看30 | 99久热在线精品视频成人一区 | 国产成人黄色片 | 亚洲精品在线播放视频 | 成人资源网 | 欧美日韩一区二区三区免费视频 | 中文字幕在线视频国产 | 国产玖玖在线 | 国产精品3| 国产手机精品视频 | 黄色国产精品 | 中文字幕在线观看免费高清电影 | 欧美精品少妇xxxxx喷水 | 91在线在线观看 | 麻豆一二| 2021国产精品视频 | 亚洲国产视频网站 | 亚洲精品国产精品国自产 | 国产精品午夜久久久久久99热 | 国产午夜精品一区二区三区 | 激情www| 天天天天天干 | 亚洲精品高清视频 | 国产91综合一区在线观看 | 97在线观看免费视频 | 国产精品一区二区在线免费观看 | 91精品看片 | 国产97在线看 | 亚洲少妇天堂 | 97涩涩视频 | 四虎在线影视 | 国产美女免费 | 六月色婷| 天天做天天干 | 免费成人看片 | 国产高清99| 亚洲1区在线 | 天天干天天干天天干天天干天天干天天干 | 欧美日韩二区三区 | 一级一级一片免费 | 91人人插| 精品播放| 夜夜操狠狠干 | 91精品国自产拍天天拍 | 日韩成人精品在线观看 | 99视频99 | 日本一区二区免费在线观看 | 不卡日韩av| 97香蕉视频 | 亚洲成av人片一区二区梦乃 | 色资源在线 | 国产成人精品综合 | 成人h视频在线播放 | 一二三区视频在线 | 视频福利在线观看 | 成人黄色小说在线观看 | 又黄又刺激又爽的视频 | 欧美性生爱 | 国产高清在线看 | 人人插人人看 | 在线电影 一区 | 午夜av免费看 | 日韩高清免费在线 | 天天av在线播放 | 国产精品成人aaaaa网站 | 国产成人精品一区二区三区免费 | 成人亚洲精品国产www | 成人黄色影片在线 | av丝袜制服 | 日韩欧美一区二区在线播放 | 欧美日本中文字幕 | 91超级碰 | 成人av在线一区二区 | 96视频免费在线观看 | 日韩午夜高清 | 人人爽人人舔 | 天天色天天射天天操 | 麻豆视频在线免费 | 国产视频九色蝌蚪 | 久草在线免费色站 | 日韩精品免费在线视频 | 五月婷色 | 天天摸天天弄 | 久久网站最新地址 | 色偷偷888欧美精品久久久 | 91日韩精品一区 | 美女网站黄在线观看 | 国产精品免费不卡 | 国产精选在线观看 | 中文字幕乱码日本亚洲一区二区 | 国际精品网 | 综合久久网 | 日日日日日 | 免费看特级毛片 | 狠狠躁日日躁狂躁夜夜躁 | 亚洲最新av在线网址 | av 一区二区三区四区 | 99久久久成人国产精品 | 精品国产乱码久久久久久1区2匹 | 国产粉嫩在线观看 | www.久久com | 国产五十路毛片 | 国产亚洲综合在线 | 美女网站在线看 | 天天爽天天爽天天爽 | 亚洲国产日韩一区 | 久久在线看 | 亚洲精品国产精品国自 | 色a在线观看| 久久久久久久久久久久久久电影 | 伊人网综合在线观看 | av大全在线观看 | 黄色网址在线播放 | 国产在线中文字幕 | 国产无套精品久久久久久 | 亚洲精品乱码久久久久久按摩 | 久久精品一区二区三区国产主播 | 激情网在线观看 | 久久人人97超碰国产公开结果 | 中文字幕一区二区在线播放 | 免费观看全黄做爰大片国产 | 欧美精品久久久久久久久久丰满 | 一区在线电影 | 久久免费片 | 黄av免费 | 日韩一区在线免费观看 | 国产精品96久久久久久吹潮 | 国产精品一区免费在线观看 | 精品中文字幕在线观看 | 在线观看中文字幕第一页 | 成年人在线观看视频免费 | 在线国产一区二区 | 成人黄色大片 | 91在线看网站 | 国产精品毛片一区视频播不卡 | 欧美精品成人在线 | 69av在线播放| 婷婷九九 | 日韩av成人在线 | 免费观看成年人视频 | 五月丁色| 久久成人午夜视频 | 亚洲精品视频免费看 | 91高清视频免费 | 黄色小说视频在线 | 日韩一级电影在线 | 日韩在线视 | 精品一区二区电影 | 国产69精品久久app免费版 | 98超碰在线 | 中文字幕在线观看视频免费 | 欧美性色19p | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 久久深夜福利免费观看 | 国产精品一区二区三区电影 | 九九99| 国产涩涩网站 | 97精品免费视频 | 伊甸园av在线 | 夜夜爽夜夜操 | 在线a人v观看视频 | 91av免费观看 | 亚洲经典视频 | 天天综合网天天 | 五月天中文字幕mv在线 | 99精品视频一区二区 | www.天天射| 丁香婷婷综合激情五月色 | 免费毛片一区二区三区久久久 | 久久人人爽爽人人爽人人片av | 狠狠艹夜夜干 | 黄色网在线免费观看 | 美女免费视频一区 | 亚洲精品字幕在线观看 | 午夜av色| 日韩网站在线播放 | 久久免费视频一区 | aaa亚洲精品一二三区 | 久久精品美女视频网站 | 国产成人精品a | 97精品国自产拍在线观看 | 国产伦精品一区二区三区无广告 | 黄色三级在线 | 欧美日韩免费观看一区=区三区 | 中文字幕一区二区三区视频 | 麻豆一精品传二传媒短视频 | 日韩av一区二区在线播放 | 8x成人免费视频 | 国产精品久久久精品 | 久久人人爽人人爽人人片av免费 | 久久精品日产第一区二区三区乱码 | 日韩在线视频不卡 | 午夜免费电影院 | 99热超碰在线 | 天天狠狠操 | 日韩理论在线视频 | 一本一道久久a久久精品蜜桃 | 国产精品区免费视频 | 在线观看色网 | 亚洲成人一二三 | 成人免费网站视频 | 久久美女免费视频 | 欧美精品视| 久久久网| 免费观看的黄色 | 在线精品视频免费播放 | 波多野结衣视频一区 | 亚洲黄色免费在线 | 久久久午夜精品理论片中文字幕 | 久久情网| 精品国产电影一区二区 | 国产精品99久久久久久久久久久久 | 国产午夜麻豆影院在线观看 | 成人va天堂 | 久久久久电影网站 | 91精品免费看 | 欧美激情精品久久 | 99精品国产免费久久久久久下载 | 伊人宗合网 | 久久久久久久综合色一本 | 中文字幕av日韩 | 国产淫片 | 2018精品视频| 婷婷精品国产欧美精品亚洲人人爽 | 91精品国产自产在线观看永久 | 99在线精品免费视频九九视 | 国产视频 亚洲视频 | 精品久久久亚洲 | 麻豆国产精品一区二区三区 | 精品一区二区三区久久久 | 中文字幕欧美日韩va免费视频 | 亚洲人成人99网站 | 九色视频网 | 欧美日韩国产亚洲乱码字幕 | 日韩精品欧美专区 | 久久天堂亚洲 | 日韩深夜在线观看 | 国产精品久久久久久久久婷婷 | 天天干天天干天天射 | 国内精品久久久久久久影视简单 | 91中文字幕在线播放 | 亚洲v欧美v国产v在线观看 | 精品免费国产一区二区三区四区 | 久久久免费国产 | 中文字幕一区二区三区久久蜜桃 | 国产一区二区在线免费视频 | 成片视频在线观看 | 91精品国产网站 | 一区二区视频免费在线观看 | 久久99国产精品 | 欧美黑人巨大xxxxx | www.com黄色| 欧洲一区二区在线观看 | 久久国产精品免费看 | 欧美日韩在线免费观看 | 在线观看黄网站 | 五月婷婷综合网 | 国产中年夫妇高潮精品视频 | 日韩精品短视频 | 亚洲精品在线观看中文字幕 | 521色香蕉网站在线观看 | av电影在线免费观看 | 国产裸体视频bbbbb | 亚洲成人av影片 | 国产一区二区三区四区大秀 | 久久精品久久精品久久精品 | 亚洲欧美日韩国产一区二区三区 | 久久久久久网站 | 成人 国产 在线 | 激情五月亚洲 | 999日韩| 有没有在线观看av | 亚洲综合在线一区二区三区 | 三级黄色欧美 | 天堂av在线 | 色综合天天综合网国产成人网 | 天天天操操操 | 午夜成人影视 | 伊人春色电影网 | 精品久久九九 |