发布时间:2025-12-11 00:34:15 浏览次数:6
简单实现了微信自动抢红包的服务,原理就是根据关键字找到相应的View, 然后自动点击。主要是用到AccessibilityService这个辅助服务,基本可以满足自动抢红包的功能,但是有些逻辑需要优化,比如,拆完一个红包后,必须手动点击返回键,才能进行下一次自动抢红包。
AndroidManifest.xml<?xmlversion="1.0"encoding="utf-8"?><manifestxmlns: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><actionandroid:name="android.intent.action.MAIN"/><categoryandroid: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><actionandroid:name="android.accessibilityservice.AccessibilityService"/></intent-filter><meta-dataandroid:name="android.accessibilityservice"android:resource="@xml/envelope_service_config"/></service></application></manifest>envelope_service_config.xml<?xmlversion="1.0"encoding="utf-8"?><accessibility-servicexmlns: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<RelativeLayoutxmlns: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.javapackagecom.jackie.webchatenvelope;importandroid.app.Activity;importandroid.content.Intent;importandroid.os.Bundle;importandroid.view.Menu;importandroid.view.MenuItem;importandroid.view.View;importandroid.widget.Button;importandroid.widget.Toast;publicclassMainActivityextendsActivity{privateButtonstartBtn;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);startBtn=(Button)findViewById(R.id.start);startBtn.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){try{//打开系统设置中辅助功能Intentintent=newIntent(android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS);startActivity(intent);Toast.makeText(MainActivity.this,"找到抢红包,然后开启服务即可",Toast.LENGTH_LONG).show();}catch(Exceptione){e.printStackTrace();}}});}@OverridepublicbooleanonCreateOptionsMenu(Menumenu){//Inflatethemenu;thisaddsitemstotheactionbarifitispresent.getMenuInflater().inflate(R.menu.menu_main,menu);returntrue;}@OverridepublicbooleanonOptionsItemSelected(MenuItemitem){//Handleactionbaritemclickshere.Theactionbarwill//automaticallyhandleclicksontheHome/Upbutton,solong//asyouspecifyaparentactivityinAndroidManifest.xml.intid=item.getItemId();//noinspectionSimplifiableIfStatementif(id==R.id.action_settings){returntrue;}returnsuper.onOptionsItemSelected(item);}}EnvelopeService.javapackagecom.jackie.webchatenvelope;importandroid.accessibilityservice.AccessibilityService;importandroid.annotation.TargetApi;importandroid.app.Notification;importandroid.app.PendingIntent;importandroid.os.Build;importandroid.os.Handler;importandroid.util.Log;importandroid.view.accessibility.AccessibilityEvent;importandroid.view.accessibility.AccessibilityManager;importandroid.view.accessibility.AccessibilityNodeInfo;importandroid.widget.Toast;importjava.util.List;/***<p>CreatedbyAdministrator</p>*<p/>*抢红包外挂服务*/publicclassEnvelopeServiceextendsAccessibilityService{staticfinalStringTAG="Jackie";/***微信的包名*/staticfinalStringWECHAT_PACKAGENAME="com.tencent.mm";/***红包消息的关键字*/staticfinalStringENVELOPE_TEXT_KEY="[微信红包]";Handlerhandler=newHandler();@OverridepublicvoidonAccessibilityEvent(AccessibilityEventevent){finalinteventType=event.getEventType();Log.d(TAG,"事件---->"+event);//通知栏事件if(eventType==AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED){List<CharSequence>texts=event.getText();if(!texts.isEmpty()){for(CharSequencet:texts){Stringtext=String.valueOf(t);if(text.contains(ENVELOPE_TEXT_KEY)){openNotification(event);break;}}}}elseif(eventType==AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED){openEnvelope(event);}}/*@OverrideprotectedbooleanonKeyEvent(KeyEventevent){//returnsuper.onKeyEvent(event);returntrue;}*/@OverridepublicvoidonInterrupt(){Toast.makeText(this,"中断抢红包服务",Toast.LENGTH_SHORT).show();}@OverrideprotectedvoidonServiceConnected(){super.onServiceConnected();Toast.makeText(this,"连接抢红包服务",Toast.LENGTH_SHORT).show();}privatevoidsendNotificationEvent(){AccessibilityManagermanager=(AccessibilityManager)getSystemService(ACCESSIBILITY_SERVICE);if(!manager.isEnabled()){return;}AccessibilityEventevent=AccessibilityEvent.obtain(AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED);event.setPackageName(WECHAT_PACKAGENAME);event.setClassName(Notification.class.getName());CharSequencetickerText=ENVELOPE_TEXT_KEY;event.getText().add(tickerText);manager.sendAccessibilityEvent(event);}/***打开通知栏消息*/@TargetApi(Build.VERSION_CODES.JELLY_BEAN)privatevoidopenNotification(AccessibilityEventevent){if(event.getParcelableData()==null||!(event.getParcelableData()instanceofNotification)){return;}//以下是精华,将微信的通知栏消息打开Notificationnotification=(Notification)event.getParcelableData();PendingIntentpendingIntent=notification.contentIntent;try{pendingIntent.send();}catch(PendingIntent.CanceledExceptione){e.printStackTrace();}}@TargetApi(Build.VERSION_CODES.JELLY_BEAN)privatevoidopenEnvelope(AccessibilityEventevent){if("com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI".equals(event.getClassName())){//点中了红包,下一步就是去拆红包checkKey1();}elseif("com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyDetailUI".equals(event.getClassName())){//拆完红包后看详细的纪录界面//nonething}elseif("com.tencent.mm.ui.LauncherUI".equals(event.getClassName())){//在聊天界面,去点中红包checkKey2();}}@TargetApi(Build.VERSION_CODES.JELLY_BEAN)privatevoidcheckKey1(){AccessibilityNodeInfonodeInfo=getRootInActiveWindow();if(nodeInfo==null){Log.w(TAG,"rootWindow为空");return;}List<AccessibilityNodeInfo>list=nodeInfo.findAccessibilityNodeInfosByText("拆红包");for(AccessibilityNodeInfon:list){n.performAction(AccessibilityNodeInfo.ACTION_CLICK);}}@TargetApi(Build.VERSION_CODES.JELLY_BEAN)privatevoidcheckKey2(){AccessibilityNodeInfonodeInfo=getRootInActiveWindow();if(nodeInfo==null){Log.w(TAG,"rootWindow为空");return;}List<AccessibilityNodeInfo>list=nodeInfo.findAccessibilityNodeInfosByText("领取红包");if(list.isEmpty()){list=nodeInfo.findAccessibilityNodeInfosByText(ENVELOPE_TEXT_KEY);for(AccessibilityNodeInfon:list){Log.i(TAG,"-->微信红包:"+n);n.performAction(AccessibilityNodeInfo.ACTION_CLICK);break;}}else{//最新的红包领起for(inti=list.size()-1;i>=0;i--){AccessibilityNodeInfoparent=list.get(i).getParent();Log.i(TAG,"-->领取红包:"+parent);if(parent!=null){parent.performAction(AccessibilityNodeInfo.ACTION_CLICK);break;}}}}}看完了这篇文章,相信你对“Android如何实现微信自动抢红包”有了一定的了解,如果想了解更多相关知识,欢迎关注本站行业资讯频道,感谢各位的阅读!