Android自動化之AccessibilityService模擬操作(快速集成)

AccessibilityService是Android官方給出的一個無障礙輔助的API,可以實現(xiàn)一系列Android自動化行為立润,諸如自動化測試狂窑、自動搶紅包、自動安裝應用桑腮、清理系統(tǒng)運存泉哈、劫持瀏覽器、等等破讨。

AccessibilityService快速集成

繼承系統(tǒng)AccessibilityService

AccessibilityService是抽象類丛晦,要實現(xiàn)它的抽象方法。

public class MyAccessibilityService extends AccessibilityService {

    private static final String TAG = "MyAccessibilityService";

    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        //此處寫事件的處理提陶,常用eventType和className來做判斷烫沙。
        int eventType = event.getEventType();
        String className = event.getClassName().toString();
        Log.d(TAG, "當前事件類型:" + eventType);
        Log.d(TAG, "當前執(zhí)行類名:" + className);
        //根據(jù)不同的eventType和className,來進行具體的事件處理
        
    }

    @Override
    public void onInterrupt() {

    }
}
寫配置文件

有兩種方式隙笆,一種是在資源文件夾下新建xml文件夾锌蓄,然后新建一個xml格式的文件來寫配置。

<?xml version="1.0" encoding="UTF-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:accessibilityEventTypes="typeWindowStateChanged"
    android:accessibilityFeedbackType="feedbackGeneric"
    android:accessibilityFlags="flagDefault"
    android:canRetrieveWindowContent="true"
    android:notificationTimeout="100"
    android:description="@string/accessibility_description" 
    android:packageNames="com.tencent.mm,com.android.systemui" />

accessibilityEventTypes:要監(jiān)聽的事件類型撑柔。
accessibilityFeedbackType:反饋方式瘸爽,有語音播出和振動。
description:開啟服務處處看到的描述信息铅忿。
packageNames:要監(jiān)控的應用的包名剪决,多應用包名用英文逗號隔開。
配置文件的其他屬性含義參考:
http://blog.csdn.net/zhou452840622/article/details/51734677

另一種方式是復寫AccessibilityService中的onServiceConnected方法檀训,在里面設置參數(shù)信息柑潦。參數(shù)含義與xml形式的配置的屬性一一對應。
該方法可以在運行期間動態(tài)修改服務配置肢扯。
注意:動態(tài)配置方法只能用來配置動態(tài)屬性:eventTypes妒茬,feedbackType,flags蔚晨,notificaionTimeout及packageNames。

@Override
protected void onServiceConnected() {
    // 如果僅僅在此處配置,就new一個AccessibilityServiceInfo铭腕;
    AccessibilityServiceInfo serviceInfo = new AccessibilityServiceInfo();

    // 如果需要與xml配置方式混用银择,就用getServiceInfo
    // AccessibilityServiceInfo serviceInfo = getServiceInfo();
    serviceInfo.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
    serviceInfo.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
    serviceInfo.packageNames = new String[] { "com.tencent.mm","com.android.systemui" };
    serviceInfo.notificationTimeout = 100;//單位:毫秒
    //設置配置
    setServiceInfo(serviceInfo);

    super.onServiceConnected();
}
注冊服務

與一般服務注冊方式基本一致,如果是使用xml來寫的配置累舷,則在AndroidManifest.xml中注冊的同時浩考,用meta-data標簽配置。
注意:
1被盈、meta-data標簽只對4.0以上系統(tǒng)可用析孽,如需兼容4.0以下,可以用代碼動態(tài)的來配置只怎。
2袜瞬、不能在一個service里同時寫兩個或多個這樣的配置文件,一次只能寫一個meta-data標簽身堡,比較復雜的業(yè)務邏輯可以用動態(tài)配置的方式來控制邓尤。

<service
    android:name="com.sk.androidauto.service.MyAccessibilityService"
    android:enabled="true"
    android:exported="true"
    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/accessibility_systemui" />
    //不能在一個service里同時寫兩個或多個這樣的配置文件,一次只能寫一個meta-data標簽贴谎,比較復雜的業(yè)務邏輯可以用動態(tài)配置的方式來控制
    <!-- <meta-data -->
    <!-- android:name="android.accessibilityservice" -->
    <!-- android:resource="@xml/accessibility_wx" /> -->
</service>
手動啟用服務

安裝完實現(xiàn)了AccessibilityService的應用后汞扎,需要到系統(tǒng)的“設置--其他高級設置--輔助功能”里找到該應用,“開啟服務”擅这。
不需要在代碼里start或bind澈魄。



至此,AccessibilityService已經(jīng)集成完成仲翎,可以根據(jù)自己的業(yè)務邏輯來寫代碼了痹扇。

使用AccessibilityService來自動模擬操作的常用操作和注意點參考我的另一篇文章:
Android自動化之AccessibilityService模擬操作(經(jīng)驗總結)
另外,AccessibilityService使用起來受限很大谭确,不能做到諸如隨意點擊屏幕任意一點等操作帘营,許多情況下,可能還需要結合adb命令來共同實現(xiàn)某些操作逐哈,使用adb命令來自動模擬操作請參考:
Android自動化之a(chǎn)db模擬操作(可實現(xiàn)按鍵精靈和手機輸入法)

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芬迄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子昂秃,更是在濱河造成了極大的恐慌禀梳,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肠骆,死亡現(xiàn)場離奇詭異算途,居然都是意外死亡,警方通過查閱死者的電腦和手機蚀腿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門嘴瓤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扫外,“玉大人,你說我怎么就攤上這事廓脆∩秆瑁” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵停忿,是天一觀的道長驾讲。 經(jīng)常有香客問我,道長席赂,這世上最難降的妖魔是什么吮铭? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮颅停,結果婚禮上谓晌,老公的妹妹穿的比我還像新娘。我一直安慰自己便监,他們只是感情好扎谎,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著烧董,像睡著了一般毁靶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逊移,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天预吆,我揣著相機與錄音,去河邊找鬼胳泉。 笑死拐叉,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的扇商。 我是一名探鬼主播凤瘦,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼案铺!你這毒婦竟也來了蔬芥?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤控汉,失蹤者是張志新(化名)和其女友劉穎笔诵,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體姑子,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡乎婿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了街佑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谢翎。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡捍靠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出岳服,到底是詐尸還是另有隱情剂公,我是刑警寧澤希俩,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布吊宋,位于F島的核電站,受9級特大地震影響颜武,放射性物質(zhì)發(fā)生泄漏璃搜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一鳞上、第九天 我趴在偏房一處隱蔽的房頂上張望这吻。 院中可真熱鬧,春花似錦篙议、人聲如沸唾糯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽移怯。三九已至,卻和暖如春这难,著一層夾襖步出監(jiān)牢的瞬間舟误,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工姻乓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嵌溢,地道東北人。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓蹋岩,卻偏偏與公主長得像赖草,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子剪个,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內(nèi)容