简单实现了微信自动抢红包的服务,原理就是根据关键字找到相应的View, 然后自动点击。主要是用到AccessibilityService这个辅助服务,基本可以满足自动抢红包的功能,但是有些逻辑需要优化,比如,拆完一个红包后,必须手动点击返回键,才能进行下一次自动抢红包。

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.jackie.webchatenvelope" ><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name=".MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><serviceandroid:enabled="true"android:exported="true"android:label="@string/app_name"android:name=".EnvelopeService"android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"><intent-filter><action android:name="android.accessibilityservice.AccessibilityService"/></intent-filter><meta-dataandroid:name="android.accessibilityservice"android:resource="@xml/envelope_service_config"/></service></application></manifest>

envelope_service_config.xml

<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"android:accessibilityEventTypes="typeNotificationStateChanged|typeWindowStateChanged"android:accessibilityFeedbackType="feedbackGeneric"android:accessibilityFlags=""android:canRetrieveWindowContent="true"android:description="@string/accessibility_description"android:notificationTimeout="100"android:packageNames="com.tencent.mm" />

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity"><Buttonandroid:id="@+id/start"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="10dp"android:layout_centerInParent="true"android:textSize="18sp"android:text="打开辅助服务"/></RelativeLayout>

MainActivity.java

package com.jackie.webchatenvelope;  import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;  public class MainActivity extends Activity {  private Button startBtn;  @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  startBtn = (Button) findViewById(R.id.start);  startBtn.setOnClickListener(new View.OnClickListener() {  @Override  public void onClick(View v) {  try {  //打开系统设置中辅助功能  Intent intent = new Intent(android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS);  startActivity(intent);  Toast.makeText(MainActivity.this, "找到抢红包,然后开启服务即可", Toast.LENGTH_LONG).show();  } catch (Exception e) {  e.printStackTrace();  }  }  });  }  @Override  public boolean onCreateOptionsMenu(Menu menu) {  // Inflate the menu; this adds items to the action bar if it is present.  getMenuInflater().inflate(R.menu.menu_main, menu);  return true;  }  @Override  public boolean onOptionsItemSelected(MenuItem item) {  // Handle action bar item clicks here. The action bar will  // automatically handle clicks on the Home/Up button, so long  // as you specify a parent activity in AndroidManifest.xml.  int id = item.getItemId();  //noinspection SimplifiableIfStatement  if (id == R.id.action_settings) {  return true;  }  return super.onOptionsItemSelected(item);  }
}

EnvelopeService.java

package com.jackie.webchatenvelope;import android.accessibilityservice.AccessibilityService;
import android.annotation.TargetApi;
import android.app.Notification;
import android.app.PendingIntent;
import android.os.Build;
import android.os.Handler;
import android.util.Log;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.Toast;import java.util.List;/*** <p>Created by Administrator</p>* <p/>* 抢红包外挂服务*/
public class EnvelopeService extends AccessibilityService {static final String TAG = "Jackie";/*** 微信的包名*/static final String WECHAT_PACKAGENAME = "com.tencent.mm";/*** 红包消息的关键字*/static final String ENVELOPE_TEXT_KEY = "[微信红包]";Handler handler = new Handler();@Overridepublic void onAccessibilityEvent(AccessibilityEvent event) {final int eventType = event.getEventType();Log.d(TAG, "事件---->" + event);//通知栏事件if (eventType == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED) {List<CharSequence> texts = event.getText();if (!texts.isEmpty()) {for (CharSequence t : texts) {String text = String.valueOf(t);if (text.contains(ENVELOPE_TEXT_KEY)) {openNotification(event);break;}}}} else if (eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {openEnvelope(event);}}/*@Overrideprotected boolean onKeyEvent(KeyEvent event) {//return super.onKeyEvent(event);return true;}*/@Overridepublic void onInterrupt() {Toast.makeText(this, "中断抢红包服务", Toast.LENGTH_SHORT).show();}@Overrideprotected void onServiceConnected() {super.onServiceConnected();Toast.makeText(this, "连接抢红包服务", Toast.LENGTH_SHORT).show();}private void sendNotificationEvent() {AccessibilityManager manager = (AccessibilityManager) getSystemService(ACCESSIBILITY_SERVICE);if (!manager.isEnabled()) {return;}AccessibilityEvent event = AccessibilityEvent.obtain(AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED);event.setPackageName(WECHAT_PACKAGENAME);event.setClassName(Notification.class.getName());CharSequence tickerText = ENVELOPE_TEXT_KEY;event.getText().add(tickerText);manager.sendAccessibilityEvent(event);}/*** 打开通知栏消息*/@TargetApi(Build.VERSION_CODES.JELLY_BEAN)private void openNotification(AccessibilityEvent event) {if (event.getParcelableData() == null || !(event.getParcelableData() instanceof Notification)) {return;}//以下是精华,将微信的通知栏消息打开Notification notification = (Notification) event.getParcelableData();PendingIntent pendingIntent = notification.contentIntent;try {pendingIntent.send();} catch (PendingIntent.CanceledException e) {e.printStackTrace();}}@TargetApi(Build.VERSION_CODES.JELLY_BEAN)private void openEnvelope(AccessibilityEvent event) {if ("com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI".equals(event.getClassName())) {//点中了红包,下一步就是去拆红包checkKey1();} else if ("com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyDetailUI".equals(event.getClassName())) {//拆完红包后看详细的纪录界面//nonething} else if ("com.tencent.mm.ui.LauncherUI".equals(event.getClassName())) {//在聊天界面,去点中红包checkKey2();}}@TargetApi(Build.VERSION_CODES.JELLY_BEAN)private void checkKey1() {AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();if (nodeInfo == null) {Log.w(TAG, "rootWindow为空");return;}List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText("拆红包");for (AccessibilityNodeInfo n : list) {n.performAction(AccessibilityNodeInfo.ACTION_CLICK);}}@TargetApi(Build.VERSION_CODES.JELLY_BEAN)private void checkKey2() {AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();if (nodeInfo == null) {Log.w(TAG, "rootWindow为空");return;}List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText("领取红包");if (list.isEmpty()) {list = nodeInfo.findAccessibilityNodeInfosByText(ENVELOPE_TEXT_KEY);for (AccessibilityNodeInfo n : list) {Log.i(TAG, "-->微信红包:" + n);n.performAction(AccessibilityNodeInfo.ACTION_CLICK);break;}} else {//最新的红包领起for (int i = list.size() - 1; i >= 0; i--) {AccessibilityNodeInfo parent = list.get(i).getParent();Log.i(TAG, "-->领取红包:" + parent);if (parent != null) {parent.performAction(AccessibilityNodeInfo.ACTION_CLICK);break;}}}}
}

Android实现微信自动抢红包的程序相关推荐

  1. android实现微信自动抢红包

    android实现微信自动抢红包 转载请标明出处:http://blog.csdn.net/yaodong379/article/details/50625948: 本文出自:oden的博客 简介 本 ...

  2. Android 微信自动抢红包(源码以及apk下载可以参考末文)

    微信自动抢红包 一.调试环境搭建: 二.具体代码实现可以参考:https://github.com/xiaxiaxa/RedWechat (近期整理并且debug的一个基础版本) 一.调试环境搭建: ...

  3. 腾讯获赔 475 万!首例“微信自动抢红包”不正当竞争案宣判

    整理 | 王晓曼 出品 | 程序人生(ID:coder _life) 7月16日,北京知识产权法院在官方微信发文称,该院日前审结了一起与"自动抢红包"有关的不正当竞争纠纷案. 因开 ...

  4. 微信自动抢红包软件被判赔 475 万;日本科学家打破网速全球纪录;JavaScript蝉联最受欢迎编程语言|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  5. 极客日报:微信自动抢红包软件被判赔 475 万;日本科学家打破网速全球纪录;JavaScript蝉联最受欢迎编程语言

    一分钟速览新闻点! 6700 万次下载,微信自动抢红包软件被判赔 475 万 美团上线 "美团打车" 微信小程序 腾讯回应 "造芯" :基于业务需要进行尝试 非 ...

  6. 判了!腾讯获赔 475 万!首例“微信自动抢红包”不正当竞争案宣判

    点击 机器学习算法与Python学习 ,选择加星标 精彩内容不迷路 出品 | 程序人生(ID:coder _life) 7月16日,北京知识产权法院在官方微信发文称,该院日前审结了一起与"自 ...

  7. 微信自动抢红包软件被判赔475万

    7月18日消息,据京法网事报发布,北京知识产权法院近期审结了一起与"自动抢红包"有关的不正当竞争纠纷案.知产法院最终认定掌上远景公司构成不正当竞争,判决掌上远景公司赔偿二原告经济损 ...

  8. 插件 iOS微信自动抢红包(非越狱)

    微信红包 前言:最近笔者在研究iOS逆向工程,顺便拿微信来练手,在非越狱手机上实现了微信自动抢红包的功能. 题外话:此教程是一篇严肃的学术探讨类文章,仅仅用于学习研究,也请读者不要用于商业或其他非法途 ...

  9. 使用AccessibilityService实现微信自动抢红包

    最近要实现微信自动抢红包的功能,使用AccessibilityService来开发,这里主要写一下逻辑以及注意点. 注意点 1.搜索关键字 我们实现某个功能比如点击等需要找到对应的对象然后模拟点击事件 ...

最新文章

  1. linux里那些依赖包
  2. 高仿网易新闻频道选择器
  3. Asp.net中防止用户多次登录的方法
  4. 【数据分析】干货!一文教会你 Scrapy 爬虫框架的基本使用
  5. 成功移植mplayer到mini2440
  6. ToString格式大全
  7. 通过Source insight查看内核源码
  8. Python PIP Mysql-python 报错 ERROR: Command errored out with exit status 1: python setup.py egg_info C
  9. 绘图库:Matplotlib
  10. CCF CSP 201512-02 消除类游戏
  11. 【Pytorch-手写字体识别】手写字体识别项目
  12. AJAX参数传递时有特殊符号时解决办法
  13. PowerPivot——DAX(初识)
  14. 教你前端如何用js写一个跑酷小游戏
  15. 梦泪的服务器是qq还是微信,梦泪发现微信区1奇特现象,赛季末分数远不如QQ区,看到1细节,懂了...
  16. 用raptor计算计算机课成绩,RAPTOR程序设计例题参考答案课案
  17. matlab cond含糊,入坑MATLAB必会的吐血总结
  18. MySQL补充——索引,流程控制,数据备份,python操作mysql,SQLAlchemy
  19. Leetcode 2390. Removing Stars From a String
  20. [robot_state_publisher-4] process has died [pid 20533, exit code 1, cmd /opt/ros/melodic/lib/robot_s

热门文章

  1. 【磁盘】Linux dm-0 dm-1 dm-2 设备映射
  2. 电脑显示器有波纹怎么回事
  3. 花式表白和赞美(Python)
  4. IE浏览器自动打开文档
  5. 更新 EVGA86 模块手册
  6. dovecot mysql_dovecot+mysql认证问题
  7. 《炬丰科技-半导体工艺》清洗硅片两步法
  8. Python:小球反弹
  9. CUDA RUNTIME
  10. 我的两次UFO目击经历