微信6.53抢红包
微信 抢红包
2023-09-27 14:27:47 时间
此软件运行的时候 微信并不能好好聊天 ....这个是软件存在的bug 如果你能改好 可以联系下我0.0 万分感谢
免责声明
此软件就是学习用的,请不要用作商业用途,否则后果自负。
apk百度云连接
链接:http://pan.baidu.com/s/1bo3AIPD 密码:nbju
清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.liuan.accessibilityservicedemo">
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name=".RobService"
android:enabled="true"
android:exported="true"
android:label="LA-微信红包"
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>
</application>
</manifest>
accessibility.xml
<?xml version="1.0" encoding="utf-8"?>
<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:notificationTimeout="100"
android:description="@string/description"
android:packageNames="com.tencent.mm" />
res/values 文件
strings.xml
<resources> <string name="app_name">LA微信红包</string> <string name="description">android交流群:582951247 \n\t当前软件仅支持微信6.53,请确认版本是否一致</string> <string name="tips">找到【LA-微信红包】确认开启即可</string> </resources>
styles.xml
<resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> <style name="QR_Dialog_Theme" parent="Theme.AppCompat.Light.Dialog"> <item name="android:windowFrame">@null</item> <item name="android:windowIsFloating">true</item> <item name="android:windowIsTranslucent">true</item> <item name="android:windowNoTitle">true</item> <item name="android:background">@android:color/transparent</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:backgroundDimEnabled">true</item> </style> </resources>
布局文件
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.liuan.accessibilityservicedemo.MainActivity"> <Button android:id="@+id/bt_check" android:layout_margin="7dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="开启/关闭服务" /> <Button android:layout_margin="7dp" android:id="@+id/bt_backer" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="后台运行" /> <Button android:layout_margin="7dp" android:id="@+id/bt_explain" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="说明" /> <Button android:layout_margin="7dp" android:id="@+id/bt_reward" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="打赏" /> </LinearLayout>
donate_dialog_layout.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:gravity="center" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:text="长按保存,单击扫码,选择图片,~~~," android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:textColor="@android:color/white" android:textSize="14dp"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/zhifuma"/> </LinearLayout>
核心代码
MainActivity
package com.example.liuan.accessibilityservicedemo; import android.app.Dialog; import android.content.ContentValues; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.provider.Settings; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.Toast; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button bt_check; private Button bt_backer; private Button bt_explain; private Button bt_reward; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bt_check = (Button) findViewById(R.id.bt_check); bt_backer = (Button) findViewById(R.id.bt_backer); bt_explain = (Button) findViewById(R.id.bt_explain); bt_reward = (Button) findViewById(R.id.bt_reward); bt_check.setOnClickListener(this); bt_backer.setOnClickListener(this); bt_explain.setOnClickListener(this); bt_reward.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.bt_check: Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS); startActivity(intent); Toast.makeText(this, R.string.tips, Toast.LENGTH_LONG).show(); break; case R.id.bt_backer: Intent intent2 = new Intent(Intent.ACTION_MAIN, null); intent2.addCategory(Intent.CATEGORY_HOME); startActivity(intent2); break; case R.id.bt_explain: AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("说明"); builder.setMessage("由于开发者能力有限制\n这就很尴尬...\n本软件仅供学习使用\n我只是一个单纯的开发者\n 已知bug\n 开启服务时,不能正常聊天"); builder.setPositiveButton("已阅读", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); builder.create().show(); break; case R.id.bt_reward: showDonateDialog(); break; } } /** 显示捐赠的对话框*/ private void showDonateDialog() { final Dialog dialog = new Dialog(this, R.style.QR_Dialog_Theme); View view = getLayoutInflater().inflate(R.layout.donate_dialog_layout, null); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //跳到支付宝 try { //利用Intent打开支付宝 //支付宝跳过开启动画打开扫码和付款码的url scheme分别是alipayqr://platformapi/startapp?saId=10000007 //和alipayqr://platformapi/startapp?saId=20000056 Uri uri = Uri.parse("alipayqr://platformapi/startapp?saId=10000007"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); } catch (Exception e) { //若无法正常跳转,在此进行错误处理 Toast.makeText(MainActivity.this, "无法跳转到支付宝,请检查您是否安装了支付宝!", Toast.LENGTH_SHORT).show(); } Toast.makeText(getApplicationContext(), "已复制到粘贴板", Toast.LENGTH_LONG).show(); dialog.dismiss(); } }); view.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { File output = new File(android.os.Environment.getExternalStorageDirectory(), "LA_ZFB_二维码.jpg"); if(!output.exists()) { Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.zhifuma); saveBitmap(MainActivity.this, output, bitmap); } Toast.makeText(MainActivity.this, "已保存到:" + output.getAbsolutePath(), Toast.LENGTH_LONG).show(); return true; } }); dialog.setContentView(view); dialog.show(); } public static boolean saveBitmap(Context context, File output, Bitmap bitmap) { if(output.exists()) { return false; } FileOutputStream fos = null; try { fos = new FileOutputStream(output); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); insertMedia(context, output, "image/jpeg"); return true; } catch (FileNotFoundException e) { e.printStackTrace(); return false; } finally { if(fos != null) { try { fos.close(); } catch (Exception e) {} } } } private static void insertMedia(Context context, File output,String mime) { try { ContentValues values = new ContentValues(); values.put(MediaStore.Video.Media.DATA, output.getAbsolutePath()); values.put(MediaStore.Video.Media.MIME_TYPE, mime); //记录到系统媒体数据库,通过系统的gallery可以即时查看 context.getContentResolver().insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values); //通知系统去扫描 context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(output))); } catch (Exception e){} } }
RobService
package com.example.liuan.accessibilityservicedemo;
import android.accessibilityservice.AccessibilityService;
import android.annotation.TargetApi;
import android.app.Notification;
import android.app.PendingIntent;
import android.os.Build;
import android.util.Log;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
/**
* Name: RobService
* Action:
* Author: liuan
* creatTime:2017-01-14 19:36
*/
public class RobService extends AccessibilityService {
private List<AccessibilityNodeInfo> parents=new ArrayList<>();
private int lastbagnum;
private boolean WXMAIN = false;
private boolean auto = false;
String pubclassName;
//对话内监控
private boolean ALL=true;
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
int eventType = event.getEventType();
switch (eventType) {
//当通知栏发生改变时
case 2048:
pubclassName = event.getClassName().toString();
if (!auto && pubclassName.equals("android.widget.TextView") && ALL) {
getLastPacket();
}
if (auto && WXMAIN) {
getLastPacket();
auto = false;
}
break;
case AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:
handleNotification(event);
break;
case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:
// case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED:
String className = event.getClassName().toString();
if (className.equals("com.tencent.mm.ui.LauncherUI")) {
//点击最后一个红包
Log.e("AAAAAAAA", "点击红包");
//手动加的代码
if(auto)
//[微信红包]恭喜发财,大吉大利!
click("com.tencent.mm:id/adu");
//微信红包
click("com.tencent.mm:id/a57");
getLastPacket();
WXMAIN=true;
//getPacket();
} else if (className.equals("com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI")) {
click("com.tencent.mm:id/be_");
// openPacket();
WXMAIN=false;
} else if (className.equals("com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyDetailUI")) {
//点击的返回 明明点击了但是却没有反应 这大概就叫做尴尬
click("com.tencent.mm:id/gs");
// //没抢到的返回
click("com.tencent.mm:id/bed");
//获取红包的金额
AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
if (nodeInfo != null) {
List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByViewId("com.tencent.mm:id/bbe");
for (AccessibilityNodeInfo item : list) {
// item.performAction(AccessibilityNodeInfo.ACTION_CLICK);
Toast.makeText(this, "你抢到了一个"+item.getText()+"的红包 是不是很开心" , Toast.LENGTH_SHORT).show();
}
}
//
}else{
}
break;
}
}
/**
* 处理通知栏信息
*
* 如果是微信红包的提示信息,则模拟点击
*
* @param event
*/
private void handleNotification(AccessibilityEvent event) {
List<CharSequence> texts = event.getText();
if (!texts.isEmpty()) {
for (CharSequence text : texts) {
String content = text.toString();
//如果微信红包的提示信息,则模拟点击进入相应的聊天窗口
if (content.contains("[微信红包]")) {
if (event.getParcelableData() != null && event.getParcelableData() instanceof Notification) {
Notification notification = (Notification) event.getParcelableData();
PendingIntent pendingIntent = notification.contentIntent;
auto=true;
try {
pendingIntent.send();
} catch (PendingIntent.CanceledException e) {
e.printStackTrace();
}
}
}
}
}
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
private void click(String clickId) {
AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
if (nodeInfo != null) {
List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByViewId(clickId);
for (AccessibilityNodeInfo item : list) {
item.performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
}
}
public void recycle(AccessibilityNodeInfo info) {
try {
if (info.getChildCount() == 0) {
if (info.getText() != null) {
if ("领取红包".equals(info.getText().toString())) {
if (info.isClickable()) {
info.performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
AccessibilityNodeInfo parent = info.getParent();
while (parent != null) {
if (parent.isClickable()) {
parents.add(parent);
break;
}
parent = parent.getParent();
}
}
}
} else {
for (int i = 0; i < info.getChildCount(); i++) {
if (info.getChild(i) != null) {
recycle(info.getChild(i));
}
}
}
} catch (Exception e) {
}
}
private void getLastPacket() {
AccessibilityNodeInfo rootNode = getRootInActiveWindow();
recycle(rootNode);
if (parents.size() > 0) {
parents.get(parents.size() - 1).performAction(AccessibilityNodeInfo.ACTION_CLICK);
lastbagnum = parents.size();
parents.clear();
}
}
@Override
public void onInterrupt() {
}
@Override
protected void onServiceConnected() {
super.onServiceConnected();
}
@Override
public void onDestroy() {
super.onDestroy();
parents.clear();
}
}