Android微信自動搶紅包插件優(yōu)化和實(shí)現(xiàn)
又是興趣系列
網(wǎng)上有很多自動強(qiáng)紅包的例子和代碼,筆者也是做了一些優(yōu)化。
先說說自己的兩個個優(yōu)勢
1.可以在聊天界面自動強(qiáng)不依賴于通知欄推送
2.可以在屏幕熄滅的時(shí)候的時(shí)候點(diǎn)亮屏幕自動搶(目前只測過flyme)
先上圖:

代碼傳送門:
https://github.com/AndroidMsky/WXhongbao
歡迎點(diǎn)星星~
原理:
通過AccessibilityService監(jiān)聽到狀態(tài)欄通知,進(jìn)行模擬點(diǎn)擊,獲取屏幕中view節(jié)點(diǎn)為領(lǐng)取紅包的list并且點(diǎn)擊最后一個。
如果不通過狀態(tài)欄通知,通過視圖變化AccessibilityEvent的2048事件也是就
public static final int TYPE_WINDOW_CONTENT_CHANGED = 0x00000800;
每次接受到新消息都會有這個時(shí)間的回調(diào):
public void onAccessibilityEvent(AccessibilityEvent event) {
int eventType = event.getEventType();
if (auto)
Log.e("AAAAAAAA", "有事件" + eventType);
switch (eventType) {
//當(dāng)通知欄發(fā)生改變時(shí)
case 2048:
pubclassName = event.getClassName().toString();
Log.e("AAAAAAAA", "有2048事件" + pubclassName + auto);
if (!auto && pubclassName.equals("android.widget.TextView") && ALL) {
Log.e("AAAAAAAA", "有2048事件被識別" + auto + pubclassName);
getLastPacket(1);
}
if (auto && WXMAIN) {
getLastPacket();
auto = false;
}
break;
所以在接受的時(shí)候,去處理一下去點(diǎn)擊領(lǐng)取紅包。然而這個方法會被頻發(fā)調(diào)用,我們就加一個”Android.widget.TextView”事件類的篩選,然后還是會被很頻繁調(diào)用,會比較遲性能耗電。
那就加個布爾ALL標(biāo)志位,讓用戶控制是否開啟聊天界面內(nèi)也搶紅包的模式。
為了不反復(fù)領(lǐng)取要記錄上次界面內(nèi)的紅包數(shù)量在紅包增加的時(shí)候才去領(lǐng)?。?/p>
private void getLastPacket(int c) {
Log.e("AAAAAAAA", "新方法" + parents.size());
AccessibilityNodeInfo rootNode = getRootInActiveWindow();
recycle(rootNode);
Log.e("AAAAAAAA", "last++" + lastbagnum + "當(dāng)前頁面紅包數(shù)" + parents.size());
if (parents.size() > 0 && WXMAIN) {
Log.e("AAAAAAAA", "頁面大于O且在微信界面");
if (lastbagnum < parents.size())
parents.get(parents.size() - 1).performAction(AccessibilityNodeInfo.ACTION_CLICK);
lastbagnum = parents.size();
parents.clear();
}
}
目前在通過插件領(lǐng)過幾個紅包后,一個聊天界面突然發(fā)第一個紅包(沒有通知欄)會有一定幾率領(lǐng)取不到,再繼續(xù)發(fā)就正常了,應(yīng)該是清空問題,該bug筆者也在更改邏輯中。
點(diǎn)亮屏幕方法(有密碼肯定是不行的):
private void wakeAndUnlock2(boolean b)
{
if(b)
{
//獲取電源管理器對象
pm=(PowerManager) getSystemService(Context.POWER_SERVICE);
//獲取PowerManager.WakeLock對象,后面的參數(shù)|表示同時(shí)傳入兩個值,最后的是調(diào)試用的Tag
wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "bright");
//點(diǎn)亮屏幕
wl.acquire();
//得到鍵盤鎖管理器對象
km= (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
kl = km.newKeyguardLock("unLock");
//解鎖
kl.disableKeyguard();
}
else
{
//鎖屏
kl.reenableKeyguard();
//釋放wakeLock,關(guān)燈
wl.release();
}
}
接受到通知欄的紅包消息亮屏設(shè)置標(biāo)志位為自動領(lǐng)取,調(diào)取領(lǐng)取函數(shù):
if (content.contains("[微信紅包]")) {
if (event.getParcelableData() != null &&
event.getParcelableData() instanceof Notification) {
Notification notification = (Notification) event.getParcelableData();
PendingIntent pendingIntent = notification.contentIntent;
try {
auto = true;
wakeAndUnlock2(true);
pendingIntent.send();
Log.e("demo", "進(jìn)入微信" + auto + event.getClassName().toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
點(diǎn)擊界面控件方法:(不同微信版本控件id不一樣我的是6.3.25)如果不知道怎么獲取這個id可以看下面的參考文獻(xiàn)最后一個,右側(cè)的resource-id就是這個id

click("com.tencent.mm:id/bag");
在Activity中設(shè)置聊天中領(lǐng)取開關(guān):
public void start(View v) {
if (AirAccessibilityService.ALL) {
AirAccessibilityService.ALL = false;
((Button) v).setText("對話內(nèi)監(jiān)控+關(guān)");
} else {
AirAccessibilityService.ALL = true;
((Button) v).setText("對話內(nèi)監(jiān)控+開");
}
;
}
AccessibilityService的確很吊,你用AccessibilityService或者root后的安卓手機(jī)能干太多事了,或好或壞,但畢竟技術(shù)是無罪的。
同時(shí)也推薦我的文章:
歡迎關(guān)注作者。歡迎評論討論。歡迎拍磚。 如果覺得這篇文章對你有幫助,歡迎打賞, 歡迎star,F(xiàn)ork我的github。 喜歡作者的也可以Follow。也算對作者的一種支持。 本文Github代碼鏈接
https://github.com/AndroidMsky/WXhongbao
也是看了很多資料謝謝各路英雄好漢們
參考文章:
Android實(shí)現(xiàn)微信自動搶紅包的程序
Android AccessibilityService實(shí)現(xiàn)微信搶紅包插件
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
直接應(yīng)用項(xiàng)目中的Android圖片緩存技術(shù)
這篇文章主要為大家詳細(xì)介紹了直接應(yīng)用項(xiàng)目中的Android圖片緩存技術(shù),簡單、方便、高效,感興趣的小伙伴們可以參考一下2016-04-04
Flutter實(shí)現(xiàn)漸變色加描邊字體效果
這篇文章介紹了Flutter實(shí)現(xiàn)漸變色描邊字體效果的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-11-11
Android GridView實(shí)現(xiàn)橫向列表水平滾動
這篇文章主要為大家詳細(xì)介紹了Android GridView實(shí)現(xiàn)橫向列表水平滾動,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07
Android DataBinding單向數(shù)據(jù)綁定深入探究
看了谷歌官方文章確實(shí)寫的太簡略了,甚至看完之后有很多地方還不知道怎么回事兒或者怎么用,那么接下來我將通過文章全面介紹一下DataBinding單向數(shù)據(jù)綁定2022-11-11
AndroidStudio接入U(xiǎn)nity工程并實(shí)現(xiàn)相互跳轉(zhuǎn)的示例代碼
這篇文章主要介紹了AndroidStudio接入U(xiǎn)nity工程并實(shí)現(xiàn)相互跳轉(zhuǎn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
Android傳感器SensorEventListener之加速度傳感器
今天小編就為大家分享一篇關(guān)于Android傳感器SensorEventListener之加速度傳感器,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-02-02
Android使用TouchDelegate增加View的觸摸范圍
這篇文章主要為大家詳細(xì)介紹了Android使用TouchDelegate增加View的觸摸范圍,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
android編程實(shí)現(xiàn)圖片庫的封裝方法
這篇文章主要介紹了android編程實(shí)現(xiàn)圖片庫的封裝方法,涉及Android針對圖片的下載、保存、獲取及操作緩存圖片等相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11

