当前位置: 移动技术网 > 移动技术>移动开发>Android > Android实现微信自动抢红包的程序

Android实现微信自动抢红包的程序

2019年07月24日  | 移动技术网移动技术  | 我要评论

 简单实现了微信自动抢红包的服务,原理就是根据关键字找到相应的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" > 
<application 
android:allowbackup="true" 
android:icon="@mipmap/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> 

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"> 
<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> 

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(); 
@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; 
} 
} 
} 
} 
} 

以上所述是针对android实现微信自动抢红包的程序,希望对大家有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网