国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android微信自動搶紅包插件優(yōu)化和實現(xiàn)

2019-12-12 04:25:09
字體:
供稿:網(wǎng)友

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

代碼傳送門:
https://github.com/AndroidMsky/WXhongbao
歡迎點星星~

原理:

通過AccessibilityService監(jiān)聽到狀態(tài)欄通知,進行模擬點擊,獲取屏幕中view節(jié)點為領取紅包的list并且點擊最后一個。
如果不通過狀態(tài)欄通知,通過視圖變化AccessibilityEvent的2048事件也是就

public static final int TYPE_WINDOW_CONTENT_CHANGED = 0x00000800;

每次接受到新消息都會有這個時間的回調(diào):

public void onAccessibilityEvent(AccessibilityEvent event) {  int eventType = event.getEventType();  if (auto)   Log.e("AAAAAAAA", "有事件" + eventType);  switch (eventType) {   //當通知欄發(fā)生改變時   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;

所以在接受的時候,去處理一下去點擊領取紅包。然而這個方法會被頻發(fā)調(diào)用,我們就加一個”Android.widget.TextView”事件類的篩選,然后還是會被很頻繁調(diào)用,會比較遲性能耗電。
那就加個布爾ALL標志位,讓用戶控制是否開啟聊天界面內(nèi)也搶紅包的模式。
為了不反復領取要記錄上次界面內(nèi)的紅包數(shù)量在紅包增加的時候才去領取:

private void getLastPacket(int c) {  Log.e("AAAAAAAA", "新方法" + parents.size());  AccessibilityNodeInfo rootNode = getRootInActiveWindow();  recycle(rootNode);  Log.e("AAAAAAAA", "last++" + lastbagnum + "當前頁面紅包數(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();  } }

目前在通過插件領過幾個紅包后,一個聊天界面突然發(fā)第一個紅包(沒有通知欄)會有一定幾率領取不到,再繼續(xù)發(fā)就正常了,應該是清空問題,該bug筆者也在更改邏輯中。

點亮屏幕方法(有密碼肯定是不行的):

private void wakeAndUnlock2(boolean b) {  if(b)  {   //獲取電源管理器對象   pm=(PowerManager) getSystemService(Context.POWER_SERVICE);   //獲取PowerManager.WakeLock對象,后面的參數(shù)|表示同時傳入兩個值,最后的是調(diào)試用的Tag   wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "bright");   //點亮屏幕   wl.acquire();   //得到鍵盤鎖管理器對象   km= (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);   kl = km.newKeyguardLock("unLock");   //解鎖   kl.disableKeyguard();  }  else  {   //鎖屏   kl.reenableKeyguard();   //釋放wakeLock,關燈   wl.release();  } }

接受到通知欄的紅包消息亮屏設置標志位為自動領取,調(diào)取領取函數(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", "進入微信" + auto + event.getClassName().toString());        } catch (Exception e) {         e.printStackTrace();        }       }      }

點擊界面控件方法:(不同微信版本控件id不一樣我的是6.3.25)如果不知道怎么獲取這個id可以看下面的參考文獻最后一個,右側(cè)的resource-id就是這個id

 click("com.tencent.mm:id/bag");

在Activity中設置聊天中領取開關:

public void start(View v) {  if (AirAccessibilityService.ALL) {   AirAccessibilityService.ALL = false;   ((Button) v).setText("對話內(nèi)監(jiān)控+關");  } else {   AirAccessibilityService.ALL = true;   ((Button) v).setText("對話內(nèi)監(jiān)控+開");  }  ; }

AccessibilityService的確很吊,你用AccessibilityService或者root后的安卓手機能干太多事了,或好或壞,但畢竟技術是無罪的。

同時也推薦我的文章:

安卓手機變攝像頭,自動接起QQ電話

歡迎關注作者。歡迎評論討論。歡迎拍磚。 如果覺得這篇文章對你有幫助,歡迎打賞, 歡迎star,F(xiàn)ork我的github。 喜歡作者的也可以Follow。也算對作者的一種支持。 本文Github代碼鏈接
https://github.com/AndroidMsky/WXhongbao

也是看了很多資料謝謝各路英雄好漢們
參考文章:

Android喚醒、解鎖屏幕代碼實例

Android實現(xiàn)微信自動搶紅包的程序

Android AccessibilityService實現(xiàn)微信搶紅包插件

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 西华县| 四子王旗| 兴仁县| 柳江县| 衡东县| 进贤县| 商南县| 金坛市| 松滋市| 赫章县| 皋兰县| 贞丰县| 济南市| 岢岚县| 克拉玛依市| 吴江市| 东阿县| 竹山县| 桐梓县| 株洲县| 涟水县| 新津县| 太原市| 武安市| 莆田市| 晋江市| 广丰县| 全南县| 西乌| 庆云县| 会理县| 石渠县| 九龙坡区| 定远县| 双鸭山市| 龙岩市| 霞浦县| 乌拉特中旗| 武威市| 白银市| 竹山县|