99偷拍视频精品区一区二,口述久久久久久久久久久久,国产精品夫妇激情啪发布,成人永久免费网站在线观看,国产精品高清免费在线,青青草在线观看视频观看,久久久久久国产一区,天天婷婷久久18禁,日韩动漫av在线播放直播

通過源碼角度看看AccessibilityService-創新互聯

簡介

專業從事網站設計制作、成都網站設計,高端網站制作設計,小程序定制開發,網站推廣的成都做網站的公司。優秀技術團隊竭力真誠服務,采用H5高端網站建設+CSS3前端渲染技術,響應式網站,讓網站在手機、平板、PC、微信下都能呈現。建站過程建立專項小組,與您實時在線互動,隨時提供解決方案,暢聊想法和感受。

AccessibilityService的設計初衷是為了輔助有身體缺陷的群體使用Android應用,它的設計貫穿著Android的控件樹View, ViewGroup, ViewRootImpl體系。借助于system_server進程的中轉,能夠注冊Accessibility事件的客戶端可以具備通過system_server提供的Accessibility服務來實現監聽、操作其它應用視圖的功能。這個功能十分強大,可以模擬用戶的行為去操作其它APP,常常被用在自動化測試、微信搶紅包、自動回復等功能實現中。

寫這個的初衷有二:

  • 之前已經完成了Android View控件樹的繪制、事件分發的源碼分析,知識儲備足夠
  • 最近接觸到了一些自動化方面的項目,并且對使用無障礙服務實現的自動微信搶紅包功能原理十分好奇

整體圖


類圖

  • AccessibilityService: APP端直接繼承的類,本質上是Service,通過onBind獲取匿名Binder對象實現通信
  • IAccessibilityServiceClientWrapper: 用于和system_server通信的匿名Binder服務
  • AccessibilityInteractionClient: 本質上是個binder服務,用于獲取Node信息
  • AccessibilityManagerService: 運行在system_server的實名binder服務,是整體的管理類
  • Service: AccessibilityManagerService的內部類,用于響應AccessibilityInteractionClient的binder通信請求
  • AccessibilityInteractionConnection: 運行在被監測的APP端,提供查找、點擊視圖等服務
  • AccessibilityManager: 運行在各個APP端,用于發送視圖變化事件
  • AccessibilityInteractionController: 具體視圖查找、點擊服務的中間控制器
  • AccessibilityNodeProvider: 由客戶端實現的視圖節點內容提供者,最終操作的實現者

整體設計圖

實例代碼

public class AutoDismissService extends AccessibilityService {
 @Override
 public void onAccessibilityEvent(AccessibilityEvent event) {
 if (event == null) {
 return;
 }
 
 // 自動將android系統彈出的其它crash dialog取消
 dismissAppErrorDialogIfExists(event);
 }
 
 private void dismissAppErrorDialogIfExists(AccessibilityEvent event) {
 // WINDOW視圖變化才進行對應操作
 if ((event.getEventType() == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED
 && event.getPackageName().equals("android")) {
 // 查找帶有"OK"字符的可點擊Node
 AccessibilityNodeInfo nodeInfo = findViewByText("OK", true);
 if (nodeInfo != null) {
 // 查找到后執行點擊操作
 performViewClick(nodeInfo);
 }
 }
 public AccessibilityNodeInfo findViewByText(String text, boolean clickable) {
 // 獲取當前窗口父節點
 AccessibilityNodeInfo accessibilityNodeInfo = getRootInActiveWindow();
 if (accessibilityNodeInfo == null) {
 return null;
 }
 // 獲取到滿足字符要求的節點
 List<AccessibilityNodeInfo> nodeInfoList = accessibilityNodeInfo.findAccessibilityNodeInfosByText(text);
 if (nodeInfoList != null && !nodeInfoList.isEmpty()) {
 for (AccessibilityNodeInfo nodeInfo : nodeInfoList) {
 if (nodeInfo != null && (nodeInfo.isClickable() == clickable)) {
  return nodeInfo;
 }
 }
 }
 return null;
 }
 
 public void performViewClick(AccessibilityNodeInfo nodeInfo) {
 if (nodeInfo == null) {
 return;
 }
 // 由下至上進行查詢,直到尋找到可點擊的節點
 while (nodeInfo != null) {
 if (nodeInfo.isClickable()) {
 nodeInfo.performAction(AccessibilityNodeInfo.ACTION_CLICK);
 break;
 }
 nodeInfo = nodeInfo.getParent();
 }
 }
}

標題名稱:通過源碼角度看看AccessibilityService-創新互聯
分享路徑:http://www.yijiale78.com/article18/djjigp.html

成都網站建設公司_創新互聯,為您提供定制網站App設計響應式網站網站營銷網站改版服務器托管

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

外貿網站建設