自己寫一個不會被微信封掉的Android搶紅包助手

轉載請注明出處:http://www.itdecent.cn/p/19ddd41aa349

最近才剛開始用簡書來寫博客,富文本編輯器用的太不習慣了,文本格式大家多包含吧!后面會改用Markdown編輯器。同時在編碼的過程中,參考了lendylongli關于搶紅包的算法,感興趣的同學可以去看一下:https://github.com/lendylongli/qianghongbao。

又到年末,公司微信群里各種紅包飛。對于我等手慢黨來說,如果有一個能在第一時間打開紅包的輔助程序,那將是最大的福音。雖然第一個搶到的人,并不一定能搶到最大的紅包。但是,本著”生死看淡,不服就干“的原則,let's do something!

一、前期準備

這里主要用到兩個類:NotificationListenerService和AccessibilityService。還有一個工具:uiautomatorviewer。

NotificationListenerService

從API 18開始,用來監(jiān)聽過濾通知欄中的信息。當微信處于后臺,或者當前界面處于聊天列表的時候,有新消息到來的時候,微信會已Notification的形式彈出。這里我們要監(jiān)聽微信彈出的Notification,并從中過濾出是“微信紅包”的信息。如果是微信紅包,那么就自動點開這條消息,并把紅包打開。

AccessibilityService

搶紅包主要用到的就是這個類。用來監(jiān)聽界面變化,并執(zhí)行本應該由用戶來執(zhí)行的操作,比如點開聊天消息,打開紅包等。AccessibilityService,本是Android對于那些由于視力、聽力或其它身體原因導致不能方便使用Android智能手機的用戶,提供的幫助這些用戶更加簡單地操作設備,包括文字轉語音(不支持中文)、觸覺反饋、手勢操作、軌跡球和手柄操作的一個工具。只不過,咱們都用來做了一些更方便的事情。

uiautomatorviewer

這是Android SDK下的一個工具。用來掃描和分析 Android 設備上當前顯示的 UI 組件。使用此工具檢查布局層次結構,并查看在設備前臺顯示的 UI 組件屬性。主要用來在編寫自動化測試代碼的時候,定位目標控件。

二、思路

先來看下手動搶紅包的流程:①從聊天列表中點擊進入聊天詳情,然后點擊微信紅包的消息,彈出一個紅包的dialog,最后點擊dialog中間的“開”完成搶紅包;②當微信在后臺時,有紅包消息通知Notification彈出,點擊通知,進入聊天詳情,然后和上一種方式一樣。

再來說下紅包助手的大致思路:開啟一個AccessibilityService來監(jiān)聽手機界面的變化。如果有微信紅包,就用AccessibilityService模擬手動搶紅包的流程去完成搶紅包。如果微信彈出的Notification消息是一條“微信紅包”的消息,那么去點擊這個Notification,然后和上面一樣,模擬點擊,完成搶紅包的整個過程。

三、動手開干

1、先寫一個主界面,用來引導用戶初始化一些Service的一些操作,以及統(tǒng)計一下幫助用戶搶到的紅包數(shù)量。直接上圖

2、配置我們的AccessibilityService。主要分為3步:

①繼承AccessibilityService,并重寫onAccessibilityEvent方法。當服務啟動后,手機界面發(fā)上變化就會回調這個方法。然后我們根據(jù)新界面中的內容來判斷是否有微信紅包,如果有的話就去模擬點擊,去搶紅包。代碼有些多,但都注釋的很清楚。

②在res下新建一個xml文件夾,然后新建一個名為luckymoney_service_config.xml的文件,加上下面的代碼

這里主要的幾個參數(shù):

accessibilityEventTypes是配置響應哪些操作包括單擊、長按、滑動等,這里是響應全部類型的事件。

accessibilityFeedbackType是反饋給用戶的方式,比如語音和震動等。

notificationTimeout是相同類型的兩個事件之間的最小時間發(fā)送到該服務。

packageNames是響應的程序的包名,這里響應微信和QQ。

③在AndroidManifest中配置這個Service。下面的meta-data要指定上一步中定義的配置文件

配置AccessibilityService

3、配置NotificationService

①繼承NotificationListenerService,并實現(xiàn)onNotificationPosted和onNotificationRemoved這個方法;

②在AndroidManifest中配置這個Service

配置NotificationListenerService

4、至此基本配置就已經完成了。下面開始監(jiān)聽微信紅包,并搶紅包。下面說一下從微信聊天列表中篩選出有紅包的聊天,以及聊天詳情中識別微信消息中有微信紅包,并打開紅包的核心代碼。完整版代碼,可以從文末鏈接下載。


下面以聊天列表、聊天詳情中點擊紅包消息,并在彈出的dialog上拆開紅包為例:

1、打開SDK→tools→uiautomatorviewer,去解析當前手機界面的布局。下面這個是點擊拆紅包的button,可以獲取id,后面就可以通過這個id來查找到這個button,并執(zhí)行點擊操作。

2、手機界面發(fā)生變化,比如收到一條紅包消息。那么AccessibilityService的onAccessibilityEvent會被回調,并傳入一個AccessibilityEvent對象。通過這個對象中獲取當前手機屏幕的信息。通過event.getClassName()獲取當前界面的類名,通過比對微信紅包界面的類名來確定當前進行到了搶紅包的第幾步,然后去執(zhí)行相應的操作。微信紅包相關的類名如下:

? ? ? ? ? "com.tencent.mm.ui.LauncherUI"是最近聯(lián)系人列表和聊天詳情。當出現(xiàn)這個的時候,我們去判斷是否有紅包。

? ? ? ? ? "com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI"是點擊了紅包消息,彈出了dialog,等待用戶點擊“開”的界面。

? ? ? ? ? "com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyDetailUI"是拆完紅包后的界面。

這些類名在筆者當前6.5.4版本的微信上是這樣的。如果后期微信新版做出了更換,大家可以通過查看手機堆棧頂層的類名來重新獲取。

3、在最近聯(lián)系人列表和聊天詳情中查找紅包的代碼

過濾有紅包的消息

4、點擊彈出待拆的紅包dialog,去執(zhí)行拆開的代碼。這段代碼有點多,而且微信不同版本下,拆開紅包的按鈕也不一樣。這里大家可以去源碼中查看,注釋的很清楚。老版本中是“拆紅包”的文字,新版本是Button圖片。這里從百度上找到一張圖片,引用一下,十分感謝。

總結

其實,學會了AccessibilityService的用法,可以讓手機為你做更多的事情。比如筆者也寫了一個支付寶自動掃福字的程序,雖然后來支付寶限定了每天只能掃出一張福,自動掃也沒什么軟用。后期我會分享更多自己的東西,希望大家喜歡,有不足之處,敬請指出。

源碼下載

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,030評論 25 709
  • 微信紅包自打出世以來就極其受歡迎,搶紅包插件可謂紅極一時.今天,我們重新談談?chuàng)尲t包插件的哪些事兒.本質上,搶紅包插...
    于加澤閱讀 2,096評論 0 6
  • 前天放學,我們家孩子把茶文化主題手抄報帶回來了,一起帶回來的還有孩子一臉的失落和一句話。媽媽,老師說我的手抄報不合...
    暖兒_8833閱讀 343評論 0 0
  • 白天看了一天的攻略,規(guī)劃暑假的行程,對我來說,一段旅行的結束,就代表下一次旅行的開始,熱衷行走在路上,為之期待和向...
    misang閱讀 269評論 1 6
  • 佛說 凡所有相 皆是虛妄 不管是花開花落 還是雄鷹翱翔 我看著世界不停地轉 忍不住地幻想 我要用多少輪回 來看到那...
    bz活在當下閱讀 209評論 0 3

友情鏈接更多精彩內容