RedWallet 微信抢红包 Wilson

3 篇文章 0 订阅
3 篇文章 0 订阅

RedWallet 微信抢红包 Wilson

Flipboard playing multiple GIFs

  • 当前抢红包有两种模式
    • 外挂抢红包模式
    • 当前聊天窗口抢红包模式
  • 外挂抢红包模式
    • 开启服务默认就开启了”外挂抢红包模式”
    • 外挂模式就是不在当前聊天界面聊天都可以抢红包
  • 当前聊天窗口抢红包模式
    • 就是只能抢当前聊天界面的模式,
    • bug:抢完每个当前聊天界面的红包,必须要把当前聊天界面的红包删掉。自己发的红包要自己点击抢红包才能抢到,不能自动帮你抢。
  • 使用心得
    • 速度
      • 网络:一定要保证手机网络或者本身手机的无线是好的
      • 手机:这也是影响抢到红包的重要的,在当前聊天窗口抢红包最能体现,首先手机处理速度快。
      • iPhone:这里提到下这个外挂都是基于Android手机写的,但是实际在与iPhone6s抢红包发现问题,在网络和手机都相当好的情况下才能抢的过iPhone6s(测试手机:Nexus6,mx3Nexus6与iPhone6s基本:1:1,mx3与iPhone6s基本:0:n)
    • 时间
      • 外挂模式:3s(正常)
      • 当前聊天窗口抢红包模式:1-2s(正常)
  • 代码:可以先参考下抢红包的鼻祖,我也是基于他的代码修改,优化的

    • 代码优化

      • switch:jdk使用1.7,如果有if-elseif都采用switch


      @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
      private void switchClickRedWallet(AccessibilityEvent event) {
      String eventName = String.valueOf(event.getClassName());
      switch (eventName) {
      case "com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI":
      //拆红包
      openRedWalletView();
      break;
      case "com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyDetailUI":
      //拆完红包后看详细的纪录界面
      break;
      case "com.tencent.mm.ui.LauncherUI":
      //点中领取红包
      clickRedWalletView();
      break;
      default:
      break;
      }
      }

      • synchronized:在使用中发现有多线程安全问题


      public synchronized void onAccessibilityEvent(AccessibilityEvent event) {

      • 去掉部分for循环:


      case AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:
      List<CharSequence> messages = event.getText();
      if (!messages.isEmpty()) {
      String message = String.valueOf(messages.get(0));
      if (!message.contains(WECHAT_RED_TEXT_KEY)) {
      return;
      }
      openNotification(event);
      }
      break;

      在抢红包通知中“[微信红包]”判断就取第一个,其他点击’微信红包’,点击’抢红包’都取一条。

      • 简化逻辑:每次只做一件事
        • 外挂抢红包模式:用红包通知–>点击通知–>触发 AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED–>点击微信红包–>触发 AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED-点击抢红包–>触发 AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED-跳转抢红包详情页面,鼻祖的代码中有个一问题,点击完通知就立即获取当前页面是否有“微信红包”这个按钮。实际要触发了AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED这个事件才能有”微信红包”按钮
      • 通知延迟都设置为0


      <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
      android:accessibilityEventTypes="typeWindowStateChanged|typeNotificationStateChanged"
      android:accessibilityFeedbackType="feedbackGeneric"
      android:canRetrieveWindowContent="true"
      android:description="@string/server_description"
      android:notificationTimeout="0"
      android:packageNames="com.tencent.mm" />

  • 当前聊天窗口抢红包模式:重点说下这个吧这也是别人没有我却有的功能
    • 地球人知道:微信当前页面聊天没有通知
    • 当前窗口有消息只有三种状态改变:具体tag可以设置这个

      android:accessibilityEventTypes="typeAllMask"

      • AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:
        • 微信每个页面跳转都会触发这个
      • AccessibilityEvent.TYPE_VIEW_SCROLLED:
        • 当前页面有消息发过来都会触发这个,要是自己发信息就不会触发这个,而且一次短信就触发一次,触发对象ListView
      • AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED
        • 有消息就会触发,每次都触发4次
      • 最后选择AccessibilityEvent.TYPE_VIEW_SCROLLED这个事件来监听是不是这个页面有消息发送过来的标志,主要发生一次,
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值