eclipse+adt下开发android微信红包自动抢(AccessibilityService类)
纯粹是兴趣,google提供了android操作系统的钩子AccessibilityService类,用于监听我们手机的焦点、窗口变化、按钮点击、通知栏变化等。微信红包自动抢通过AccessibilityService类,截取通知栏中有[微信红包]字样的通知,然后跳到微信红包界面领取红包。从网上的公开的代码调测了通过,但具体部署到手机上实操未进行,因此代码只做参考,留待后续需要时再深入研究AccessibilityService类。
1、eclipse+adt环境下新建android工程,命名为wxhb,AndroidManifest.xml配置如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.wxhb"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="17"android:targetSdkVersion="17" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activity android: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> <service android: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-data android:name="android.accessibilityservice" android:resource="@xml/envelope_service_config"/> </service> </application></manifest>
2、wxhb工程res目录下新建xml文件夹,并创建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" />
3、wxhb工程res目录下layout的文件activity_main.xml代码如下:
<?xml version="1.0" encoding="utf-8"?>
<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"> <Button android: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>
4、wxhb工程res目录下values的文件strings.xml代码如下:
<resources><string name="app_name">wxhb</string><string name="accessibility_description">wechatdesc</string></resources>
5、wxhb工程res目录下values的文件dimens.xml代码如下:
<?xml version="1.0" encoding="utf-8"?>
<resources><dimen name="activity_vertical_margin">10dp</dimen> <dimen name="activity_horizontal_margin">10dp</dimen>
</resources>
6、wxhb工程src目录下新建包com.wxhb,主类MainActivity代码如下:
package com.wxhb;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); } */
}
7、wxhb工程src目录下新建包com.wxhb,集成AccessibilityService类的代码如下:
package com.wxhb;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 = "Jason"; /** * 微信的包名 */ static final String WECHAT_PACKAGENAME = "com.tencent.mm"; /** * 红包消息的关键字 */ static final String ENVELOPE_TEXT_KEY = "[微信红包]"; Handler handler = new Handler(); @Override public 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); } } /*@Override protected boolean onKeyEvent(KeyEvent event) { //return super.onKeyEvent(event); return true; }*/ @Override public void onInterrupt() { Toast.makeText(this, "中断抢红包服务", Toast.LENGTH_SHORT).show(); } @Override protected 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; } } } }
}
eclipse+adt下开发android微信红包自动抢(AccessibilityService类)相关推荐
- android 最新微信红包,分享Android微信红包插件
本文实例为大家分享了Android微信红包插件,供大家参考,具体内容如下 效果图: 具体代码 @TargetApi(Build.VERSION_CODES.JELLY_BEAN) private vo ...
- xposed开发11 - 微信红包
xposed开发11 - 微信红包 private static Activity launcherUIActivity = null;// 微信红包 hookClass = "com.te ...
- 微信抢红包MATLAB,微信红包怎么抢才是运气王?有人做了实验,看结果!
在抢微信红包的过程中,可能许多人有这样一种感觉,抢红包貌似后抢比先抢能拿到更多的钱?有人就做了一个实验-- 友情提示: 全文约6400字,阅读全文约10分钟.如果觉得时间紧张,可以跳过实验过程直接拉至 ...
- 微信公众 mysql回复图片_微信公众号开发之微信公共平台消息回复类实例
本文实例讲述了微信公众号开发之微信公共平台消息回复类.分享给大家供大家参考.具体如下: 微信公众号开发代码我在网上看到了有不少,其实都是大同小义了都是参考官方给出的demo文件进行修改的,这里就给各位 ...
- Android+eclipse+adt搭建开发环境
一.下载相关软件 android开发环境 准备工作:下载Eclipse.JDK.Android SDK.ADT插件 下载地址:JDK:http://www.oracle.com/technetwork ...
- Android微信/QQ红包自动抢(AccessibilityService)
关于抢红包的文章已经很多了,我再来总结下,QQ的顺便也实现下,原理很简单,搜索屏幕中的文字,搜索到了就点击,QQ相对来说要简单一些 关键代码: AccessibilityNodeInfo nodeIn ...
- Android入门教程三之使用Eclipse+ADT+SDK开发安卓APP
前言: 1.这里我们有两条路可以选,直接使用封装好的用于开发Android的ADT Bundle,或者自己进行配置 因为谷歌已经放弃了ADT的更新,官网上也取消的下载链接,这里提供谷歌放弃更新前最新版 ...
- 微信小程序红包开发思路 微信红包小程序开发思路讲解
之前公司开发小程序红包,将自己在开发的过程中遇到的一些坑分享到了博客里.不少人看了以后,还是不明白怎么开发.也加了我微信咨询.所以今天,我就特意再写一篇文章,这次就不谈我开发中遇到的坑了.就主要给大家 ...
- eclipse adt with the android sdk for windows,关于Windows:Eclipse:不允许我使用Android SDK,错误地声称我的ADT已过时...
我正在使用Eclipse开发Android系统,直到昨天一切都运行良好. 我使用Ninite更新了我的所有内容,包括JRE和所有内容(提示:请勿这样做),它重新启动了计算机,而没有在编辑工作区的过程中 ...
最新文章
- 遍历百万级Redis的键值的大结局
- C#生成的图片无法在ps中打开
- 马云口中的“计划经济”其实是一种大数据和人工智能
- 1-jQuery - AJAX load() 方法【基础篇】
- 【控制】《最优控制理论与系统》-胡寿松老师-第2章-最优控制中的变分法
- 普通大学生的 Java 开发能力到什么水平才能进大厂?
- 次短路 Yen氏算法 凸包
- Python百度语音合成
- excel、doc等office文件转pdf方法总结
- CentOS7安装Pentaho Server 8.1 CE 社区版
- YOLOV5改进||YOLOV5+GSConv+Slim Neck
- Excel数组与数组公式
- 一个合格的项目经理都需要做哪些事情?
- redis mysql qps_测算Redis处理实际生产请求的QPS/TPS
- 西门子P L C 1200与smart的S 7通讯
- 启动hive的时候master:8020 failed on connection exception
- python识别电脑图像_计算机屏幕图像识别
- Python列表去重顺序不变
- 这个将996反对到极致的网站,在GitHub上的Star数已经狂飙到 10 万+了
- 通过百度坐标获取地址