Accessibility輔助功能--一念天堂,一念地獄

来源:http://www.cnblogs.com/happyhacking/archive/2017/02/05/6368888.html
-Advertisement-
Play Games

0x00什麼是Accessibility(輔助功能) 考慮到部分用戶不能很好地使用Android設備,比如由於視力、身體、年齡方面的限制,造成閱讀內容、觸控操作、聲音信息等方面的獲取困難,Android提供了Accessibility特性和服務幫助用戶更好地使用Android設備。 依據Androi ...


0x00什麼是Accessibility(輔助功能)

考慮到部分用戶不能很好地使用Android設備,比如由於視力、身體、年齡方面的限制,造成閱讀內容、觸控操作、聲音信息等方面的獲取困難,Android提供了Accessibility特性和服務幫助用戶更好地使用Android設備。

依據Android官方的詳細介紹,開發者在增加視圖屬性如contentDescription等內容後,可以在不修改原有代碼邏輯的情況下使用戶體驗得到優化,如預裝在Android 設備上的屏幕閱讀器TalkBack,在沒有修改系統源碼的情況下,滿足了視力不足的用戶使用Android設備的需求,TalkBack會使用語音反饋描述用戶所執行的操作,以及告知用戶收到的提醒和通知,可以幫助視力水平較低的用戶順利進行手機的觸控、閱讀內容的進行。

0x01如何使用Accessibility(輔助功能)

在項目中應用AccessibilityService的三個步驟:

①繼承AccessibilibityService,實現onAccessibilityEvent()和onInterrupt()方法。

 

 

 在onAccessibilityEvent()方法中,我們可以接收所監聽的事件。

新建配置文件

res目錄下新建xml文件夾,新建accessibility.xml文件,如下所示:

 

 

 

欄位名

欄位說明

android:packageNames

指明瞭自己的輔助服務關心哪些應用發出的事件,多個應用包名之間用逗號分隔,如果不填,則關註手機上所有應用發出的事件。例如我們現在要利用輔助點擊做app的自動安裝功能,那麼只需要關註 com.android.packageinstaller這個包發出的事件。如果只關註微信發出的事件,則這裡填com.tencent.mm。

android:accessibilityEventTypes

輔助服務關註的事件類型,例如TYPE_VIEW_FOCUSED,TYPE_WINDOW_STATE_CHANGED,TYPE_NOTIFICATION_STATE_CHANGED等等。如果只關心微信的通知欄,那麼這個屬性可以設置為TYPE_NOTIFICATION_STATE_CHANGED。

android:accessibilityFlags

輔助服務額外的flag信息。例如FLAG_REPORT_VIEW_IDS可以使回調的事件帶上view的ID。

android:accessibilityFeedbackType

事件的反饋類型,例如聲音反饋、觸覺反饋、視覺反饋等。

android:notificationTimeout

兩個同樣類型的輔助事件發給輔助服務的最小時間間隔

android:canRetrieveWindowContent

是否可以獲取視窗內容

 

③在AndroidMainifest中註冊:

 

 

service需要許可權android.permission.BIND_ACCESSIBILITY_SERVICE和action:android.accessibilityservice.AccessibilityService,使用名為android.accessibilityservice的meta-data指定配置文件。

 

重要參數及方法:

①AccessibilityEvent:

TYPE_NOTIFICATION_STATE_CHANGED:通知欄狀態變化

TYPE_VIEW_CLICKED:視圖被點擊

TYPE_WINDOW_CONTENT_CHANGED:視窗內容變化

TYPE_WINDOW_STATE_CHANGED:視窗狀態變化

....

②AccessibilityService:

onServiceConnected() :可選。系統會在成功連接上你的服務的時候調用這個方法,在這個方法里你可以做一下初始化工作,例如設備的聲音震動管理,也可以調用setServiceInfo()進行配置AccessibilityServiceInfo。

onAccessibilityEvent() :必須。通過這個函數可以接收系統發送來的AccessibilityEvent,接收來的AccessibilityEvent是經過過濾的,過濾是在配置工作時設置的。

onInterrupt() :必須。這個在系統想要中斷AccessibilityService返給的響應時會調用。在整個生命周期里會被調用多次。

onUnbind() :可選。在系統將要關閉這個AccessibilityService會被調用。在這個方法中進行一些釋放資源的工作。

getRootInActiveWindow():獲取當前活動視窗中的根節點。

performGlobalAction():執行全局動作,例如返回等操作。

...

③AccessibilityNodeInfo:

getParent():獲取父節點。

getChild():獲取子節點。

performAction():在節點上執行一個動作。

findAccessibilityNodeInfosByText():通過字元串查找節點元素。

findAccessibilityNodeInfosByViewId():通過視圖id查找節點元素。

...

 

0x02 Accessibility(輔助功能)應用實例

AccessibilityService一般應用步驟

①分析操作的流程,拆解成單步可實現的過程;

②通過UIAutomator和adb shell dumpsys來查看對應的UI控制項ID、文本或者是具體的Activity;

③通過邏輯組合進行代碼編寫;

④調試、相容性處理。

 

實例1.免root自動安裝

 

 

實例2.微信自動搶紅包(僅供技術交流)

①流程拆分(通知欄觸發)

 

 

第一步:當通知欄變化時,檢測是否包含“[微信紅包]”關鍵字,若包含,則觸發這個通知消息包含的intent。

第二步:跳轉到聊天頁面(com.tencent.mm.ui.LauncherUI),根據關鍵字“領取紅包”占到對應的view,模擬點擊觸發ACTION_CLICK點擊事件。

第三步:跳轉到開紅包界面(com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI),根據開紅包按鈕的id:com.tencent.mm:id/bg7模擬點擊觸發ACTION_CLICK點擊事件。

第四步:進入紅包詳情頁面(com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyDetailUI),

根據返回鍵的id:com.tencent.mm:id/gd模擬點擊觸發ACTION_CLICK點擊事件。

 

②微信UI結構

涉及微信界面的類:

微信主界面或聊天界面 -- com.tencent.mm.ui.LauncherUI

開紅包界-- com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI

紅包詳情 -- com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyDetailUI

相關控制項ID:

l “開”按鈕:com.tencent.mm:id/bg7

紅包詳情頁返回按鈕:com.tencent.mm:id/gd

 

 

③具體代碼實現:

1)重寫MyAccessibilityService中的onAccessibilityEvent方法,監聽通知欄消息,判斷消息中是否“[微信紅包]”,若包含,則跳轉到對應的聊天界面。

 

2)onAccessibilityEvent方法中的第二個case,監聽com.tencent.mm.ui.LauncherUI,com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI,com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyDetailUI三個界面,分別進行點擊最近收到的紅包,拆紅包,推出紅包詳情頁面的操作。

 

3)遍歷所有節點,獲取最近收到的紅包,進行模擬點擊。

 

 

4)根據控制項ID對相應的view進行模擬點擊,領取紅包。

 

 

0x03 延伸閱讀

Android Accessibility 安全性研究報告

http://www.freebuf.com/articles/terminal/114045.html

 

0x04 參考

Building Accessibility Services

https://developer.android.com/guide/topics/ui/accessibility/services.html

AccessibilityService從入門到出軌

http://mp.weixin.qq.com/s/7L2ysyTlFR1Xz4tk73dxuA

管家在手,紅包我有 —手機管家紅包提醒原理揭秘

http://km.oa.com/group/16523/articles/show/256070?kmref=search&from_page=1&no=1


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 解決方法出自 http://stackoverflow.com/questions/23261301/required-attribute-not-work-in-safari-browser Safari不支持input的required屬性,可用js解決 本文原創,轉載請註明出處:http:// ...
  • (一)頁面變數對象data 對象data 有兩個方面用途 第一,前端wxml的數據渲染是通過設置此對象中定義的變數進行關聯展現的 第二,定義JS頁面中的頁面局部變數,使其整個頁面中可使用或調用 對象data定義的變數支持各種數據類型,string,int,[],{} 第一.wxml數據渲染,只要通過 ...
  • ▓▓▓▓▓▓ 大致介紹 經過前面的學習(小白學Git)已經建立了版本庫,並上傳了文件,這次來學習對這些文件進行基本的操作,即: ◆ 撤銷操作 ◆ 刪除文件 ◆ 恢覆文件 我在此之前,已經將三個文件提交到了版本庫 ▓▓▓▓▓▓ 撤銷操作 撤銷操作的語法: 撤銷操作一般有兩種情況: ◆ 文件修改後還沒有 ...
  • 可能是因為正當校招季,最近關於程式媛(女性程式員)的話題很火,朋友圈裡一下就冒出很多相關文章,有的寫自己求職入職的心路歷程,有的從客觀數據角度分析女性優劣勢,也有過來人分享自己和周圍人的看法,加之幾天前我所在的公司ThoughtWorks贏得了2016最佳女性科技人員雇主,忽然間,”程式媛”成了每天 ...
  • 一、CSS書寫順序 1.位置屬性(position, top, right, z-index, display, float等)2.大小(width, height, padding, margin)3.文字系列(font, line-height, letter-spacing, color- t ...
  • 如果是事件處理函數綁定的函數,瀏覽器會預設傳遞一個參數,而這個參數就是事件對象。 因為arguments[0]這樣使用這個參數比較麻煩,所以我們可以傳遞一個參數evt來進行使用。 ...
  • 通過JavaScript使用正則表達式驗證用戶輸入的是否為正整數。 ...
  • 這裡介紹的是大家以後要用到的html強大功能,可直接給輸入框增加語音功能,下麵我們先來看看實現方法。 大家可以看到在輸入框右邊的麥克風圖標,點擊麥克風就能夠進行語音識別了。 其實很簡單,語音識別是html5的基本功能,它的用法是 如果喜歡XHTML類似的語法,可以這樣表示 語音識別在十年前是讓人覺得 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...