Android微信自动抢红包插件优化和实现

作者:AndroidMsky 时间:2021-12-08 10:25:28 

又是兴趣系列

网上有很多自动强红包的例子和代码,笔者也是做了一些优化。

先说说自己的两个个优势

1.可以在聊天界面自动强不依赖于通知栏推送
2.可以在屏幕熄灭的时候的时候点亮屏幕自动抢(目前只测过flyme)

先上图:

Android微信自动抢红包插件优化和实现

代码传送门:
https://github.com/AndroidMsky/WXhongbao
欢迎点星星~

原理:

通过AccessibilityService监听到状态栏通知,进行模拟点击,获取屏幕中view节点为领取红包的list并且点击最后一个。
如果不通过状态栏通知,通过视图变化AccessibilityEvent的2048事件也是就


public static final int TYPE_WINDOW_CONTENT_CHANGED = 0x00000800;

每次接受到新消息都会有这个时间的回调:


public void onAccessibilityEvent(AccessibilityEvent event) {
int eventType = event.getEventType();
if (auto)
 Log.e("AAAAAAAA", "有事件" + eventType);
switch (eventType) {
 //当通知栏发生改变时
 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;

所以在接受的时候,去处理一下去点击领取红包。然而这个方法会被频发调用,我们就加一个”Android.widget.TextView”事件类的筛选,然后还是会被很频繁调用,会比较迟性能耗电。
那就加个布尔ALL标志位,让用户控制是否开启聊天界面内也抢红包的模式。
为了不反复领取要记录上次界面内的红包数量在红包增加的时候才去领取:


private void getLastPacket(int c) {

Log.e("AAAAAAAA", "新方法" + parents.size());
AccessibilityNodeInfo rootNode = getRootInActiveWindow();
recycle(rootNode);
Log.e("AAAAAAAA", "last++" + lastbagnum + "当前页面红包数" + 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();
}
}

目前在通过插件领过几个红包后,一个聊天界面突然发第一个红包(没有通知栏)会有一定几率领取不到,再继续发就正常了,应该是清空问题,该bug笔者也在更改逻辑中。

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


private void wakeAndUnlock2(boolean b)
{
if(b)
{
 //获取电源管理器对象
 pm=(PowerManager) getSystemService(Context.POWER_SERVICE);

//获取PowerManager.WakeLock对象,后面的参数|表示同时传入两个值,最后的是调试用的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();
}

}

接受到通知栏的红包消息亮屏设置标志位为自动领取,调取领取函数:


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可以看下面的参考文献最后一个,右侧的resource-id就是这个id

Android微信自动抢红包插件优化和实现

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

在Activity中设置聊天中领取开关:


public void start(View v) {
if (AirAccessibilityService.ALL) {
 AirAccessibilityService.ALL = false;
 ((Button) v).setText("对话内监控+关");
} else {
 AirAccessibilityService.ALL = true;
 ((Button) v).setText("对话内监控+开");
}
;

}

AccessibilityService的确很吊,你用AccessibilityService或者root后的安卓手机能干太多事了,或好或坏,但毕竟技术是无罪的。

同时也推荐我的文章:

安卓手机变摄像头,自动接起QQ电话

欢迎关注作者。欢迎评论讨论。欢迎拍砖。 如果觉得这篇文章对你有帮助,欢迎打赏, 欢迎star,Fork我的github。 喜欢作者的也可以Follow。也算对作者的一种支持。 本文Github代码链接
https://github.com/AndroidMsky/WXhongbao

也是看了很多资料谢谢各路英雄好汉们
参考文章:

Android唤醒、解锁屏幕代码实例

Android实现微信自动抢红包的程序

Android AccessibilityService实现微信抢红包插件

来源:http://blog.csdn.net/androidmsky/article/details/53490459

标签:Android,微信,红包
0
投稿

猜你喜欢

  • Android Fragment的回退栈示例详细介绍

    2023-06-21 12:30:55
  • 使用JMX连接JVM实现过程详解

    2022-07-25 23:05:45
  • 深入浅析TomCat Session管理分析

    2022-12-16 02:44:16
  • C#算法之无重复字符的最长子串

    2021-05-24 21:56:59
  • java list集合排序按某一属性排序操作

    2021-06-24 03:33:25
  • Spring Security学习笔记(一)

    2023-09-10 06:25:09
  • Android 登录Web 时对cookie 处理

    2022-05-08 20:16:11
  • Android简单获取经纬度的方法

    2021-07-28 05:26:47
  • 企业级Kubernetes管理平台Wayne功能特性介绍

    2021-11-05 08:58:33
  • SPRING IOC注入方式过程解析

    2023-10-11 12:59:13
  • Android 中RecyclerView顶部刷新实现详解

    2022-08-20 17:22:39
  • C#对Word文档的创建、插入表格、设置样式等操作实例

    2021-10-24 23:13:46
  • Diycode开源项目实例搭建上拉加载和下拉刷新的Fragment

    2023-06-17 01:13:03
  • Jsoup获取全国地区数据属性值(省市县镇村)

    2023-12-08 01:27:25
  • C#实现绘制鼠标的示例代码

    2023-06-11 04:40:54
  • Spring Boot + Vue 前后端分离项目如何踢掉已登录用户

    2021-07-23 21:57:35
  • java 发送http和https请求的实例

    2023-11-29 12:46:52
  • C#中的预处理器指令详解

    2022-05-04 21:22:32
  • 浅谈Java中复制数组的方式

    2022-04-14 23:30:27
  • MyBatis快速入门

    2023-11-13 06:45:14
  • asp之家 软件编程 m.aspxhome.com