Android輔助功能基本操作

在手機的設(shè)置界面凄敢,有一個叫輔助功能的設(shè)置韧衣,點擊進去可以看到已安裝的輔助服務(wù)极颓,點擊具體的服務(wù)進去可以看到該服務(wù)的一些描述朱盐,可以在此開啟該服務(wù),這也是唯一一個能開啟服務(wù)的地方菠隆。

輔助功能介紹

開啟輔助功能相當(dāng)于開啟了一個服務(wù)兵琳,在手機界面改變的時候,就能監(jiān)聽到該頁面的一些信息并且能拿到界面的一些控件骇径,然后可以對控件進行模擬點擊躯肌,從而實現(xiàn)我們想要的功能。

除此以外破衔,不僅能夠?qū)Λ@取到的控件進行模擬點擊清女,在Android7.0及以上的版本,我們可以模擬任意位置的點擊包括觸摸晰筛、滑動等等嫡丙,就是說我們可以實現(xiàn)任何人能夠進行的操作,這個是很有用的读第,可以做出很多有意思的東西迄沫,如果再配上截圖、錄屏和圖像識別卦方,就更有意思了羊瘩。

模擬點擊,就是說我們的手機界面自己動盼砍,整個流程像是一只手在幫你操作一樣的尘吗;

實現(xiàn)

新建一個Service繼承AccessibilityService

public class LuckMoneyService extends AccessibilityService

然后去AndroidManifest文件里面去注冊一下這個Service

    <service
            android:name=".service.LuckMoneyService"
            android:label="小圓臉的紅包助手"
            android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
            <intent-filter>
                <action android:name="android.accessibilityservice.AccessibilityService" />
            </intent-filter>
            <meta-data
                android:name="android.accessibilityservice"
                android:resource="@xml/accessible_service_wx_config" />
        </service>

meta-data節(jié)點下有個resource值,這是個xml文件浇坐,里面配置了該輔助的一些信息睬捶,在res目錄下新建一個文件夾,名字叫xml近刘,然后新建一個xml文件擒贸,名字和resource配置的一樣就行了

<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:accessibilityEventTypes="typeWindowStateChanged|typeWindowContentChanged|typeNotificationStateChanged"
    android:accessibilityFeedbackType="feedbackAllMask"
    android:accessibilityFlags="flagDefault|flagRetrieveInteractiveWindows|flagIncludeNotImportantViews|flagReportViewIds"
    android:canRetrieveWindowContent="true"
    android:canRequestFilterKeyEvents="true"
    android:description="@string/wx_luck_money"
    android:canRequestEnhancedWebAccessibility="true"
    android:notificationTimeout="20"
    android:packageNames="com.tencent.mm"
    android:canPerformGestures="true" />

里面配置了一些參數(shù),比如notificationTimeout是指定多少毫秒監(jiān)聽一次界面變化的觉渴,packageNames是指定監(jiān)聽哪個應(yīng)用的介劫,刪掉這個配置就是監(jiān)聽全局,description是對于該輔助的描述案淋,其他配置不管也罷座韵。

然后在LuckMoneyService里面重寫一下onAccessibilityEvent方法

  @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
    //界面發(fā)生了變化
    }

每當(dāng)界面改變的時候就會回調(diào)這個方法,通過event我們就可以獲取到界面的信息包括界面上的控件

簡單的用法

//獲取當(dāng)前界面包名
String packageName = event.getPackageName().toString();
//獲取當(dāng)前類名
String className = event.getClassName().toString();
//獲取當(dāng)前界面父布局的控件
AccessibilityNodeInfo accessibilityNodeInfo = getRootInActiveWindow();
//在父布局里面根據(jù)子控件**顯示的文字**找到該子控件
List<AccessibilityNodeInfo> nodeInfoList = accessibilityNodeInfo.findAccessibilityNodeInfosByText(text);
//在父布局里面根據(jù)子控件的**id**找到該子控件
List<AccessibilityNodeInfo> nodeInfoList = accessibilityNodeInfo.findAccessibilityNodeInfosByViewId(id);
//點擊該控件
nodeInfo.performAction(AccessibilityNodeInfo.ACTION_CLICK);

上面的操作都比較基礎(chǔ),根據(jù)控件顯示的文字查找控件誉碴,找出來的肯定是TextView和Button了宦棺,根據(jù)ID查找控件,ID就是指的寫布局文件的時候設(shè)置的控件的ID

模擬觸摸

模擬觸摸就是可以模擬人的觸摸動作黔帕,也比較簡單

   protected void gestureOnScreen(Path path, long startTime, long duration,
                                   AccessibilityService.GestureResultCallback callback) {
        GestureDescription.Builder builde = new GestureDescription.Builder();
        builde.addStroke(new GestureDescription.StrokeDescription(path, startTime, duration));
        GestureDescription gestureDescription = builde.build();
        dispatchGesture(gestureDescription, callback, null);
    }

可以看到需要傳入path就是一個路徑嘛代咸,模擬滑動的路徑,用canvas畫過畫的都知道這東西還是比較簡單的成黄,startTime就是多久后開始模擬事件侣背,duration就是該滑動的時間,其他回調(diào)什么的為空就可以了慨默;

Monitor

如何獲取控件的ID呢贩耐,而我又是如何知道界面上有哪些控件呢,可以通過一個工具來實現(xiàn)厦取,就是在sdk工具下面的一個叫monitor的工具潮太,其實之前的AndroidStudio是帶這個工具的,但是后來界面上是沒有了虾攻,但是其實還在的

/Users/Tyhj/Library/Android/sdk/tools/monitor

連上手機铡买,打開這個工具,手機上打開你要查看的界面霎箍,點擊工具手機的小手機的圖標(biāo)奇钞,就會截屏,顯示出這個界面的信息


截屏2019-12-09上午1.00.04.png-752.2kB

最后

輔助功能能做的東西大概就上面這些了漂坏,能做出什么功能就靠自己的想象了
推薦閱讀:Android微信搶紅包輔助

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末景埃,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子顶别,更是在濱河造成了極大的恐慌谷徙,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驯绎,死亡現(xiàn)場離奇詭異完慧,居然都是意外死亡,警方通過查閱死者的電腦和手機剩失,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門屈尼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拴孤,你說我怎么就攤上這事脾歧。” “怎么了乞巧?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵涨椒,是天一觀的道長摊鸡。 經(jīng)常有香客問我绽媒,道長蚕冬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任是辕,我火速辦了婚禮囤热,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘获三。我一直安慰自己旁蔼,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布疙教。 她就那樣靜靜地躺著棺聊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪贞谓。 梳的紋絲不亂的頭發(fā)上限佩,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音裸弦,去河邊找鬼祟同。 笑死,一個胖子當(dāng)著我的面吹牛理疙,可吹牛的內(nèi)容都是我干的晕城。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼窖贤,長吁一口氣:“原來是場噩夢啊……” “哼砖顷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起赃梧,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤择吊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后槽奕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體几睛,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年粤攒,在試婚紗的時候發(fā)現(xiàn)自己被綠了所森。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡夯接,死狀恐怖焕济,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情盔几,我是刑警寧澤晴弃,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響上鞠,放射性物質(zhì)發(fā)生泄漏际邻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一芍阎、第九天 我趴在偏房一處隱蔽的房頂上張望世曾。 院中可真熱鬧,春花似錦谴咸、人聲如沸轮听。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽血巍。三九已至,卻和暖如春珊随,著一層夾襖步出監(jiān)牢的瞬間藻茂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工玫恳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留辨赐,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓京办,卻偏偏與公主長得像掀序,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子惭婿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344