AccessibilityService實(shí)現(xiàn)微信發(fā)紅包功能
在AccessibilityService中我們可以做模擬操作,下面記述下通過(guò)AccessibilityService實(shí)現(xiàn)微信發(fā)紅包的功能
1.配置AccessibilityService,需要通過(guò)集成AccessibilityService來(lái)執(zhí)行操作。
public class TestAccessibilityService extends AccessibilityService { @Override public void onAccessibilityEvent(AccessibilityEvent event) { ... } @Override public void onInterrupt() { VirtualControlManager.getInstance().onCancel(); } }
使用時(shí),需要在AndroidManifest.xml進(jìn)行配置
<service android:name=".TestAccessibilityService" android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" android:label="@string/accessibility_service_label"> <intent-filter> <action android:name="android.accessibilityservice.AccessibilityService" /> </intent-filter> <meta-data android:name="android.accessibilityservice" android:resource="@xml/accessibility_service_config" /> </service>
在res文件夾下創(chuàng)建xml文件夾,存放accessibility_service_config.xml
<?xml version="1.0" encoding="utf-8"?> <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:accessibilityEventTypes="typeAllMask" android:accessibilityFeedbackType="feedbackGeneric" android:accessibilityFlags="flagDefault|flagRetrieveInteractiveWindows|flagIncludeNotImportantViews" android:canRetrieveWindowContent="true" android:description="@string/accessibility_service_description" android:notificationTimeout="100"/> <!--accessibilityEventTypes:表示該服務(wù)對(duì)界面中的哪些變化感興趣,即哪些事件通知,比如窗口打開,滑動(dòng), 焦點(diǎn)變化,長(zhǎng)按等.具體的值可以在AccessibilityEvent類中查到,如typeAllMask表示接受所有的事件通知.--> <!--accessibilityFeedbackType:表示反饋方式,比如是語(yǔ)音 ,還是震動(dòng)--> <!--canRetrieveWindowContent:表示該服務(wù)能否訪問(wèn)活動(dòng)窗口中的內(nèi)容.也就是如果你希望在服務(wù)中獲取窗體內(nèi)容的化,則需要設(shè)置其值為true.--> <!--notificationTimeout:接受事件的時(shí)間間隔,通常將其設(shè)置為100即可.--> <!--packageNames:表示對(duì)該服務(wù)是用來(lái)監(jiān)聽哪個(gè)包的產(chǎn)生的事件-->
這句話非常重要,后面會(huì)用到,切記
android:accessibilityFlags="flagDefault|flagRetrieveInteractiveWindows|flagIncludeNotImportantViews"
2.啟動(dòng)微信
Intent intent = new Intent(Intent.ACTION_MAIN); // intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent // .FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); //加這個(gè)flag為了讓微信能夠進(jìn)入的時(shí)候在會(huì)話列表 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.addCategory(Intent.CATEGORY_LAUNCHER); ComponentName cn = new ComponentName(“com.tencent.mm”, “com.tencent.mm.ui.LauncherUI”); intent.setComponent(cn); context.startActivity(intent);
網(wǎng)上很多啟動(dòng)微信的代碼在setFlags中的參數(shù)都是我注釋的那段,用那段確實(shí)可以啟動(dòng)微信,但是不能保證微信啟動(dòng)后就是最原始的消息列表,而是微信任何界面(用戶上次操作微信停留的界面),這樣在想做模擬點(diǎn)擊的操作,要加好多的判斷界面的代碼和操作,那么能否我啟動(dòng)微信時(shí)一定在消息列表呢,答案是可以的,那就是用下面這個(gè)flag,在啟動(dòng)微信的時(shí)候肯定會(huì)到消息列表,省去了我們的操作。
Intent.FLAG_ACTIVITY_CLEAR_TOP
3.執(zhí)行操作
通過(guò)AccessibilityService的onAccessibilityEvent(...)方法,我們可以獲取到界面view的信息,用getRootInActiveWindow(),一步步通過(guò)view的id,來(lái)模擬操作,到發(fā)紅包界面。
這里需要注意,微信在跳轉(zhuǎn)到紅包界面的時(shí)候是有一個(gè)dialog加載動(dòng)畫的,不少人在跳轉(zhuǎn)到發(fā)紅包界面時(shí),通過(guò)getRootInActiveWindow()獲取到的對(duì)象不是null就是節(jié)點(diǎn)信息不對(duì),這是因?yàn)橐粋€(gè)dialog快速加載過(guò)去了,部分機(jī)器能看一閃的效果,如果手機(jī)性能比較好,這個(gè)dialog可能就看不到,但是代碼執(zhí)行的時(shí)候就拿不到節(jié)點(diǎn)信息。
嘗試過(guò)加延時(shí),但是延時(shí)過(guò)后,onAccessibilityEvent方法不執(zhí)行,還是等于沒(méi)有。
這時(shí)候就需要用到開篇講的了這段代碼了:
android:accessibilityFlags="flagDefault|flagRetrieveInteractiveWindows|flagIncludeNotImportantViews"
加上這段代碼后,我們就能通過(guò)onAccessibilityEvent來(lái)獲取到發(fā)紅包界面的view了,發(fā)一段在發(fā)紅包界面填寫金額的代碼:
private void sendLuckMoney() { AccessibilityNodeInfo rootInfo = accessibilityService.getRootInActiveWindow(); if (rootInfo != null) { List<AccessibilityNodeInfo> nodeInfoList = rootInfo.findAccessibilityNodeInfosByViewId("com.tencent.mm:id/clu"); for (AccessibilityNodeInfo nodeInfo : nodeInfoList) { Bundle arguments = new Bundle(); arguments.putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, "10"); nodeInfo.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, arguments); } } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
上一篇:Android自定義控件實(shí)現(xiàn)時(shí)鐘效果
欄 目:Android
本文標(biāo)題:AccessibilityService實(shí)現(xiàn)微信發(fā)紅包功能
本文地址:http://mengdiqiu.com.cn/a1/Android/8999.html
您可能感興趣的文章
- 01-10Android實(shí)現(xiàn)雙擊返回鍵退出應(yīng)用實(shí)現(xiàn)方法詳解
- 01-10android實(shí)現(xiàn)記住用戶名和密碼以及自動(dòng)登錄
- 01-10android實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能
- 01-10Android 友盟第三方登錄與分享的實(shí)現(xiàn)代碼
- 01-10C++自定義API函數(shù)實(shí)現(xiàn)大數(shù)相乘算法
- 01-10如何給Flutter界面切換實(shí)現(xiàn)點(diǎn)特效
- 01-10android實(shí)現(xiàn)指紋識(shí)別功能
- 01-10Android實(shí)現(xiàn)圓形漸變加載進(jìn)度條
- 01-10RecyclerView仿應(yīng)用列表實(shí)現(xiàn)網(wǎng)格布局
- 01-10Android實(shí)現(xiàn)底部導(dǎo)航欄的主界面


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-10Android自定義View之繪制圓形頭像功能
- 01-10Android實(shí)現(xiàn)雙擊返回鍵退出應(yīng)用實(shí)現(xiàn)方
- 01-10android實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能
- 01-10android實(shí)現(xiàn)記住用戶名和密碼以及自動(dòng)
- 01-10C++自定義API函數(shù)實(shí)現(xiàn)大數(shù)相乘算法
- 01-10Android 友盟第三方登錄與分享的實(shí)現(xiàn)代
- 01-10android實(shí)現(xiàn)指紋識(shí)別功能
- 01-10如何給Flutter界面切換實(shí)現(xiàn)點(diǎn)特效
- 01-10Android實(shí)現(xiàn)圓形漸變加載進(jìn)度條
- 01-10Emoji表情在Android JNI中的兼容性問(wèn)題詳
隨機(jī)閱讀
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 04-02jquery與jsp,用jquery
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10C#中split用法實(shí)例總結(jié)
- 01-10delphi制作wav文件的方法
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?