微信自动抢红包的实现方法,主要实现以下几个功能:
- 自动拆开屏幕上出现的红包
- 处于桌面或聊天列表时接收到红包信息时自动进入聊天界面并拆红包
- 日志功能,记录抢红包的详细日志
实现原理:
- 利用AccessibilityService辅助服务,监测屏幕内容,实现自动拆红包的目的。
- 利用ActiveAndroid数据库简单记录红包日志
- 利用preference实现监控选项纪录
最终界面:

抢红包核心代码:
AccessibilityService配置
- android:accessibilityEventTypes 设置触发监听回调的事件类型;
- android:packageNames 设置监听的应用,这里监听的是微信,因此填上微信的包名com.tencent.mm
- <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
- android:accessibilityEventTypes="typeNotificationStateChanged|typeWindowStateChanged|typeWindowContentChanged"
- android:accessibilityFeedbackType="feedbackGeneric"
- android:accessibilityFlags="flagDefault"
- android:canRetrieveWindowContent="true"
- android:description="@string/accessibility_description"
- android:notificationTimeout="100"
- android:packageNames="com.tencent.mm"
- android:settingsActivity="com.oden.annotations.app.activity.ManActivity" />
在AndroidManifest.xml中声明:
- <service
- android:name=".app.service.HongbaoService_"
- android:enabled="true"
- android:exported="true"
- android:label="@string/app_name"
- android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" >
- <intent-filter>
- <action android:name="android.accessibilityservice.AccessibilityService" />
- </intent-filter>
- <meta-data
- android:name="android.accessibilityservice"
- android:resource="@xml/accessibility_service_config" />
- </service>
抢红包实现代码
接收系统发送来的AccessibilityEvent
- private static final String GET_RED_PACKET = "领取红包";
- private static final String CHECK_RED_PACKET = "查看红包";
- private static final String RED_PACKET_PICKED = "手慢了,红包派完了";
- private static final String RED_PACKET_PICKED2 = "手气";
- private static final String RED_PACKET_PICKED_DETAIL = "红包详情";
- private static final String RED_PACKET_SAVE = "已存入零钱";
- private static final String RED_PACKET_NOTIFICATION = "[微信红包]";
-
- @Override
- public void onAccessibilityEvent(AccessibilityEvent event) {
- L.d("RECEIVE EVENT!");
- if (watchedFlags == null) return;
- /* 检测通知消息 */
- if (!mMutex) {
- if (watchedFlags.get("pref_watch_notification") && watchNotifications(event)) return;
- if (watchedFlags.get("pref_watch_list") && watchList(event)) return;
- }
- if (!watchedFlags.get("pref_watch_chat")) return;
-
- this.rootNodeInfo = event.getSource();
- if (rootNodeInfo == null) return;
-
- mReceiveNode = null;
- mUnpackNode = null;
-
- checkNodeInfo();
-
- /* 如果已经接收到红包并且还没有戳开 */
- if (mLuckyMoneyReceived && !mLuckyMoneyPicked && (mReceiveNode != null)) {
- mMutex = true;
- AccessibilityNodeInfo cellNode = mReceiveNode;
- cellNode.getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
- mLuckyMoneyReceived = false;
- mLuckyMoneyPicked = true;
- L.d("正在打开!");
- }
-
- /* 如果戳开但还未领取 */
- if (mNeedUnpack && (mUnpackNode != null)) {
- AccessibilityNodeInfo cellNode = mUnpackNode;
- cellNode.performAction(AccessibilityNodeInfo.ACTION_CLICK);
- mNeedUnpack = false;
- L.d("正在领取!");
- }
-
- if (mNeedBack) {
- performGlobalAction(GLOBAL_ACTION_BACK);
- mMutex = false;
- mNeedBack = false;
- L.d("正在返回!");
- //总次数和金额统计
- if (isGetMoney) {
- T.showShort(this, "抢到一个红包: " + gotMoney + "元!");
- totalMoney = totalMoney + gotMoney;
- totalSuccessNum++;
- myPrefs.totalMoney().put(totalMoney);
- myPrefs.successNum().put(totalSuccessNum);
- L.d("totalMoney: " + totalMoney);
- L.d("totalSuccessNum: " + totalSuccessNum);
- saveToLog(hongbaoInfo);
- isGetMoney = false;
- }
- }
- }
(编辑:威海站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|