1. 程式人生 > >Android中微信搶紅包助手的實現

Android中微信搶紅包助手的實現

複製程式碼
package com.cxk.redpacket;

import android.accessibilityservice.AccessibilityService;
import android.app.Instrumentation;
import android.app.KeyguardManager;
import android.app.Notification;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder; import android.os.PowerManager; import android.text.TextUtils; import android.util.Log; import android.view.KeyEvent; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; import android.widget.Toast; import java.util.List;
/** * 搶紅包Service,繼承AccessibilityService */ public class RedPacketService extends AccessibilityService { /** * 微信幾個頁面的包名+地址。用於判斷在哪個頁面 * LAUCHER-微信聊天介面 * LUCKEY_MONEY_RECEIVER-點選紅包彈出的介面 * LUCKEY_MONEY_DETAIL-紅包領取後的詳情介面 */ private String LAUCHER = "com.tencent.mm.ui.LauncherUI";
private String LUCKEY_MONEY_DETAIL = "com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyDetailUI"; private String LUCKEY_MONEY_RECEIVER = "com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI"; /** * 用於判斷是否點選過紅包了 */ private boolean isOpenRP; private boolean isOpenDetail = false; /** * 用於判斷是否螢幕是亮著的 */ private boolean isScreenOn; /** * 獲取PowerManager.WakeLock物件 */ private PowerManager.WakeLock wakeLock; /** * KeyguardManager.KeyguardLock物件 */ private KeyguardManager.KeyguardLock keyguardLock; @Override public void onAccessibilityEvent(AccessibilityEvent event) { int eventType = event.getEventType(); switch (eventType) { //通知欄來資訊,判斷是否含有微信紅包字樣,是的話跳轉 case AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED: List<CharSequence> texts = event.getText(); for (CharSequence text : texts) { String content = text.toString(); if (!TextUtils.isEmpty(content)) { //判斷是否含有[微信紅包]字樣 if (content.contains("[微信紅包]")) { if (!isScreenOn()) { wakeUpScreen(); } //如果有則開啟微信紅包頁面 openWeChatPage(event); isOpenRP = false; } } } break; //介面跳轉的監聽 case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED: String className = event.getClassName().toString(); //判斷是否是微信聊天介面 if (LAUCHER.equals(className)) { //獲取當前聊天頁面的根佈局 AccessibilityNodeInfo rootNode = getRootInActiveWindow(); //開始找紅包 findRedPacket(rootNode); } //判斷是否是顯示‘開’的那個紅包介面 if (LUCKEY_MONEY_RECEIVER.equals(className)) { AccessibilityNodeInfo rootNode = getRootInActiveWindow(); //開始搶紅包 openRedPacket(rootNode); } //判斷是否是紅包領取後的詳情介面 if (isOpenDetail && LUCKEY_MONEY_DETAIL.equals(className)) { isOpenDetail = false; //返回桌面 back2Home(); //如果之前是鎖著螢幕的則重新鎖回去 release(); } break; } } /** * 開始開啟紅包 */ private void openRedPacket(AccessibilityNodeInfo rootNode) { for (int i = 0; i < rootNode.getChildCount(); i++) { AccessibilityNodeInfo node = rootNode.getChild(i); if ("android.widget.Button".equals(node.getClassName())) { node.performAction(AccessibilityNodeInfo.ACTION_CLICK); isOpenDetail = true; } openRedPacket(node); } } /** * 遍歷查詢紅包 */ private void findRedPacket(AccessibilityNodeInfo rootNode) { if (rootNode != null) { //從最後一行開始找起 for (int i = rootNode.getChildCount() - 1; i >= 0; i--) { AccessibilityNodeInfo node = rootNode.getChild(i); //如果node為空則跳過該節點 if (node == null) { continue; } CharSequence text = node.getText(); if (text != null && text.toString().equals("領取紅包")) { AccessibilityNodeInfo parent = node.getParent(); //while迴圈,遍歷"領取紅包"的各個父佈局,直至找到可點選的為止 while (parent != null) { if (parent.isClickable()) { //模擬點選 parent.performAction(AccessibilityNodeInfo.ACTION_CLICK); //isOpenRP用於判斷該紅包是否點選過 isOpenRP = true; break; } parent = parent.getParent(); } } //判斷是否已經開啟過那個最新的紅包了,是的話就跳出for迴圈,不是的話繼續遍歷 if (isOpenRP) { break; } else { findRedPacket(node); } } } } /** * 開啟紅包所在的聊天頁面 */ private void openWeChatPage(AccessibilityEvent event) { //A instanceof B 用來判斷記憶體中實際物件A是不是B型別,常用於強制轉換前的判斷 if (event.getParcelableData() != null && event.getParcelableData() instanceof Notification) { Notification notification = (Notification) event.getParcelableData(); //開啟對應的聊天介面 PendingIntent pendingIntent = notification.contentIntent; try { pendingIntent.send(); } catch (PendingIntent.CanceledException e) { e.printStackTrace(); } } } /** * 服務連線 */ @Override protected void onServiceConnected() { Toast.makeText(this, "搶紅包服務開啟", Toast.LENGTH_SHORT).show(); super.onServiceConnected(); } /** * 必須重寫的方法:系統要中斷此service返回的響應時會呼叫。在整個生命週期會被呼叫多次。 */ @Override public void onInterrupt() { Toast.makeText(this, "我快被終結了啊-----", Toast.LENGTH_SHORT).show(); } /** * 服務斷開 */ @Override public boolean onUnbind(Intent intent) { Toast.makeText(this, "搶紅包服務已被關閉", Toast.LENGTH_SHORT).show(); return super.onUnbind(intent); } /** * 返回桌面 */ private void back2Home() { Intent home = new Intent(Intent.ACTION_MAIN); home.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); home.addCategory(Intent.CATEGORY_HOME); startActivity(home); } /** * 判斷是否處於亮屏狀態 * * @return true-亮屏,false-暗屏 */ private boolean isScreenOn() { PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); isScreenOn = pm.isScreenOn(); Log.e("isScreenOn", isScreenOn + ""); return isScreenOn; } /** * 解鎖螢幕 */ private void wakeUpScreen() { //獲取電源管理器物件 PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); //後面的引數|表示同時傳入兩個值,最後的是除錯用的Tag wakeLock = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.FULL_WAKE_LOCK, "bright"); //點亮螢幕 wakeLock.acquire(); //得到鍵盤鎖管理器 KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); keyguardLock = km.newKeyguardLock("unlock"); //解鎖 keyguardLock.disableKeyguard(); } /** * 釋放keyguardLock和wakeLock */ public void release() { if (keyguardLock != null) { keyguardLock.reenableKeyguard(); keyguardLock = null; } if (wakeLock != null) { wakeLock.release(); wakeLock = null; } } }
複製程式碼

相關推薦

Android紅包助手實現

package com.cxk.redpacket; import android.accessibilityservice.AccessibilityService; import android.app.Instrumentation; import android.app.KeyguardManage

Android紅包助手實現(程式碼整理)

實現原理   通過利用AccessibilityService輔助服務,監測螢幕內容,如監聽狀態列的資訊,螢幕跳轉等,以此來實現自動拆紅包的功能。關於AccessibilityService輔助服務,可以自行百度瞭解更多。 程式碼基礎: 1.首先宣告一個RedPac

Android紅包外掛原理解析和開發實現

一、前言自從去年中微信新增搶紅包的功能,微信的電商之旅算是正式開始正式火爆起來。但是作為Android開發者來說,我們在搶紅包的同時意識到了很多問題,就是手動去搶紅包的速度慢了,當然這些有很多原因導致了。或許是網路的原因,而且這個也是最大的原因。但是其他的不可忽略的因素也是要

Android進階——學習AccessibilityService實現紅包外掛

前言 在你的手機更多設定或者高階設定中,我們會發現有個無障礙的功能,很多人不知道這個功能具體是幹嘛的,其實這個功能是為了增強使用者介面以幫助殘障人士,或者可能暫時無法與裝置充分互動的人們 它的具體實現是通過AccessibilityService服務執行

紅包外掛與Android輔助功能

      逢年過節大家都少不了發微信紅包,通過微信紅包來表達祝福。同時,微信還有拼手氣群紅包。各種群好友群,親戚群,工作群逢年過節常常會有紅包可搶。搶紅包的口訣是:“網速要好,手速要快”。搶到紅包固然欣喜,搶不到紅包的失落和遺憾的感覺卻讓人非常不爽。有時等紅包

紅包的演算法實現(C++)

目前只能實現對於整數的錢數的紅包的實現,經過隨機數從而實現隨機人搶紅包的演算法 /* vs 2013 wk */ #include<iostream> #include&l

js實現紅包

金額隨機:額度在0.01和(剩餘平均值*2)之間。 /** * 搶紅包 * @param {[number]} totalAmount [總金額] * @param {[number]}

AccessibilityService2016終極解決方案包括(紅包外掛原理解析和開發實現

一、前言 自從去年中微信新增搶紅包的功能,微信的電商之旅算是正式開始正式火爆起來。但是作為Android開發者來說,我們在搶紅包的同時意識到了很多問題,就是手動去搶紅包的速度慢了,當然這些有很多原因導致了。或許是網路的原因,而且這個也是最大的原因。但是其他的不可忽略的因

一步一步實現紅包

  聖誕過後,又到了搶紅包的季節。各個公司的年會將逐漸展開,各個紅包群就熱鬧了起來。為了應對領導在群裡時不時的一個紅包,寫一個搶紅包的應用迫在眉睫了。之前由於沒有自動搶紅包錯失了100RMB+的紅包啊!   先來整理下思路。要實現搶紅包,那麼就要在紅包來的時候

仿紅包(js 轉)

lis new ner check p s .config put get none <!DOCTYPE html> <html> <head> <meta charset="UTF-8">

紅包 PHP 實現

follow 鏈接 scheme 好的 lan tools exit req reac 最近做生日營銷,需要微信發紅包,特此從網上找了一篇教程 首先你的有個服務號,並且開通了微信支付,我在這就不說怎麽去申請和開通了,我是看了微信官方文檔後,想看官方文檔的朋友可以到下面這個鏈

紅包算法

nmon ins money can scanner clas lose tint ring 微信搶紅包算法: package test;import java.util.Random;import java.util.Scanner;public class WeXi

紅包的架構設計

微信紅包的架構設計簡介 @來源於QCon某高可用架構群整理,整理by朱玉華。 背景:有某個朋友在朋友圈諮詢微信紅包的架構,於是乎有了下面的文字(有誤請提出,謝謝) 概況:2014年微信紅包使用資料庫硬抗整個流量,2015年使用cache抗流量。 微信的金額什麼時候

紅包遊戲繞過指定尾數

最近朋友推薦玩微信紅包賭博遊戲,大概的意思就是你搶到了制定尾數的紅包,你就要給那個人發相同數量的金額。比如你發紅包的時候這邊寫10/2或者10.....2等等的寫法,就表示發了10塊錢,指定尾數是2,

紅包演算法

package com.das.controller; import java.util.Random; public class Test { public static void main(

java紅包簡易版

微信搶紅包簡易版,比較簡單,大夥別見笑,拿去直接用 import java.math.BigDecimal; import java.util.Random; public class CatchMoney { public static void main(Str

android、朋友圈分享無回撥的問題

如果在您的專案中集成了微信或者微信朋友圈,並且您需要準確的分享回撥,則需要在AndroidManifest.xml中下注冊下面的回撥Activity。 <activity android:name=".wxapi.WXEntryActivity

Android仿開啟紅包動畫(逐幀動畫)

Frame Animation(逐幀動畫):        逐幀動畫(Frame-by-frame Animations)從字面上理解就是一幀挨著一幀的播放圖片,就像放電影一樣。和補間動畫一樣可以通過xml實現也可以通過java程式碼實現。接下來藉助目前專案中的一個開

android支付!! 其實沒那麼難

最近這段時間在做微信支付,把一些開發的流程及遇到的一些問題記錄下來,以後遇到的話也能做個參考!畢竟剛接觸這個支付的時候也是走了好多彎路。 首先第一步肯定是要去申請你的公眾號,服務號各種的。。。 如果一

淺談最近的扣扣、紅包背後的故事

double total=10000;     //紅包金額總數         int num=100;       //紅包總數         double money;      //個人得到紅包裡的金額         double safe_total=50;     //只要紅包沒搶完,每人至少