基本信息
源码名称:<赞>android 抢QQ红包源码下载(红包机器人)
源码大小:0.32M
文件格式:.zip
开发语言:Java
更新时间:2016-01-28
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
一款QQ抢红包软件的源码,包含打开加Q群页面, 打开QQ会话窗口功能
核心service代码:
package com.moyan.hongbao.service; import java.util.List; import java.util.ArrayList; import android.app.Notification; import android.app.PendingIntent; import android.app.KeyguardManager; import android.app.KeyguardManager.KeyguardLock; import android.content.Intent; import android.content.Context; import android.os.Build; import android.os.PowerManager; import android.accessibilityservice.AccessibilityServiceInfo; import android.accessibilityservice.AccessibilityService; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityManager; import android.view.accessibility.AccessibilityNodeInfo; import android.util.Log; public class HongBaoService extends AccessibilityService { private static final String TAG = "QiangHongBao"; private static final String QQ_CLASSNAME_CHAT = "com.tencent.mobileqq.activity.SplashActivity"; private static final String QQ_CLASSNAME_WALLET = "cooperation.qwallet.plugin.QWalletPluginProxyActivity"; private static final String QQ_KEYWORD_NOTIFICATION = "[QQ红包]"; private static final String[] QQ_KEYWORD_HONGBAO= new String[]{"点击拆开","口令红包"}; private static final String[] QQ_KEYWORD_SEND_LIST= new String[]{"点击输入口令","发送"}; private static final String QQ_KEYWORD_FAILD_CLICK= "已拆开"; /* *静态变量来保存戳口令红包时第2步和第3步的节点 *避免每次都进行查找,提高戳红包效率 */ private static List<AccessibilityNodeInfo> sendNodeList; //返回状态,判断是否需要戳返回键 private boolean isNeedBack=false; //运行状态,从开始戳红包到结束时,不应该再有其它操作 private boolean runState=false; //窗口状态,这个主要是区分窗口状态改变和内容改变时对屏幕的读取 private boolean windowState=false; // 键盘管理器 private KeyguardManager mKeyguardManager; // 键盘锁 private KeyguardLock mKeyguardLock; // 电源管理器 private PowerManager mPowerManager; // 唤醒锁 private PowerManager.WakeLock mWakeLock; long time; @Override protected void onServiceConnected() { super.onServiceConnected(); } @Override public void onAccessibilityEvent(AccessibilityEvent event) { if (event.getEventType()==AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED) { List<CharSequence> texts = event.getText(); if (!texts.isEmpty()) { for (CharSequence text : texts) { String content = text.toString(); if (content.contains(QQ_KEYWORD_NOTIFICATION)) { openNotify(event); return; } } } } openHongBao(event); } @Override public void onInterrupt() { } /** 打开通知栏消息*/ private void openNotify(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(); } } private void openHongBao(AccessibilityEvent event){ String className=event.getClassName().toString(); Log.i(TAG,className); if(className.equals(QQ_CLASSNAME_WALLET)&&isNeedBack){ performGlobalAction(AccessibilityService.GLOBAL_ACTION_BACK); isNeedBack=false; }else if(className.equals(QQ_CLASSNAME_CHAT)||(event.getEventType()==AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED&&windowState)) { //wakeAndUnlock(true); windowState=true; if(!runState){ AccessibilityNodeInfo info = event.getSource(); if(info == null) return; getAllHongBao(info); } }else{ windowState=false; } } private void onClick(){ if(sendNodeList==null||sendNodeList.size()==0){ AccessibilityNodeInfo info = getRootInActiveWindow(); if(info == null) return; sendNodeList=new ArrayList<AccessibilityNodeInfo>(); for(String s:QQ_KEYWORD_SEND_LIST){ List<AccessibilityNodeInfo> infolist = info.findAccessibilityNodeInfosByText(s); if(infolist.isEmpty()){ /** *这里如果没查找到 *说明前面查找到的节点不对 * 再继续查找显然并没有什么卵用 */ return; } for(AccessibilityNodeInfo node:infolist){ if(node.getText()==null||!node.getText().toString().equals(s)) continue; sendNodeList.add(node); } } } for(AccessibilityNodeInfo node:sendNodeList){ AccessibilityNodeInfo in=getClickableNode(node); if(in==null) continue; Log.i(TAG,"模拟点击>>>" node.getText().toString()); in.performAction(AccessibilityNodeInfo.ACTION_CLICK); } isNeedBack=true; } private void getAllHongBao(AccessibilityNodeInfo info){ runState=true; Log.i(TAG,"获取所有红包"); time=System.currentTimeMillis(); List<AccessibilityNodeInfo> list=new ArrayList<AccessibilityNodeInfo>(); //查找出当前页面所有的红包,包括手气红包和口令红包 for(String word:QQ_KEYWORD_HONGBAO){ List<AccessibilityNodeInfo> infolist = info.findAccessibilityNodeInfosByText(word); if(!infolist.isEmpty()){ for(AccessibilityNodeInfo node:infolist){ //这里进行过滤可点击的红包,放到后面去过滤的话感觉非常操蛋 if(node.getText()==null|| //过滤出包含关键字的节点,只取和关键字相同的 !node.getText().toString().equals(word)|| /** * 下面这个条件是过滤已拆开的红包 * 如果口令红包的口令设置成"口令红包" * 会让插件陷入死循环,所以必须加个新的判断条件 * 不过这样会耗费更多的时间,所以口令尽量不要设置成关键字 */ node.getParent().getChildCount()!=3|| !node.getParent().findAccessibilityNodeInfosByText(QQ_KEYWORD_FAILD_CLICK).isEmpty()) continue; list.add(node); } } } if(list.size()==0) { runState=false; return ; } Log.i(TAG,"数量>>>" list.size() " 获取红包耗时:" (System.currentTimeMillis()-time) "ms"); clickAction(list); } private void clickAction(List<AccessibilityNodeInfo> infolist){ for(AccessibilityNodeInfo node :infolist){ String text=node.getText().toString(); AccessibilityNodeInfo info=getClickableNode(node); if(info==null) continue; Log.i(TAG,"模拟点击>>>" text); info.performAction(AccessibilityNodeInfo.ACTION_CLICK); if(text.equals(QQ_KEYWORD_HONGBAO[1])){ onClick(); }else{ isNeedBack=true; } } runState=false; Log.i(TAG,"总共耗时:" (System.currentTimeMillis()-time) "ms"); } /** * 获取一个可以点击的节点 */ private AccessibilityNodeInfo getClickableNode(AccessibilityNodeInfo node){ AccessibilityNodeInfo parent=node; while(parent!=null){ if(parent.isClickable()){ break; } parent=parent.getParent(); } return parent; } private void wakeAndUnlock(boolean b){ if(b){ //获取电源管理器对象 mPowerManager=(PowerManager)getApplicationContext().getSystemService(Context.POWER_SERVICE); //获取PowerManager.WakeLock对象,后面的参数|表示同时传入两个值,最后的是调试用的Tag mWakeLock = mPowerManager.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "bright"); //点亮屏幕 mWakeLock.acquire(); //得到键盘锁管理器对象 mKeyguardManager= (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE); mKeyguardLock= mKeyguardManager.newKeyguardLock("unLock"); //解锁 mKeyguardLock.disableKeyguard(); }else{ //锁屏 mKeyguardLock.reenableKeyguard(); //释放wakeLock,关灯 mWakeLock.release(); } } }
主界面代码:
package com.moyan.hongbao.ui; import java.net.InetAddress; import android.app.Activity; import android.os.Bundle; import android.content.Intent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; import android.widget.TextView; import android.webkit.WebView; import android.webkit.WebViewClient; import android.webkit.WebChromeClient; import com.moyan.hongbao.R; public class MainActivity extends Activity implements OnClickListener { TextView txt; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //txt=(TextView)findViewById(R.id.txtHelp); findViewById(R.id.btnSetting).setOnClickListener(this); findViewById(R.id.btnAuthor).setOnClickListener(this); findViewById(R.id.btnJoin).setOnClickListener(this); } @Override public void onClick(View p1){ switch(p1.getId()){ case R.id.btnSetting: openSetting(); break; case R.id.btnAuthor: contactAuthor("269139812"); break; case R.id.btnJoin: joinQQGroup("nwEuPSLNqjGGyj538_vPXhn4MVcX0_kJ"); break; } } private void openSetting() { try { Intent intent = new Intent(android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS); startActivity(intent); } catch (Exception e) { e.printStackTrace(); } } public boolean joinQQGroup(String key) { Intent intent = new Intent(); intent.setData(android.net.Uri.parse("mqqopensdkapi://bizAgent/qm/qr?url=http%3A%2F%2Fqm.qq.com%2Fcgi-bin%2Fqm%2Fqr%3Ffrom%3Dapp%26p%3Dandroid%26k%3D" key)); try { startActivity(intent); return true; } catch (Exception e) { return false; } } public void contactAuthor(String u){ WebView webView = new WebView(this); webView.getSettings().setJavaScriptEnabled(true); webView.loadUrl("http://wpa.qq.com/msgrd?v=1&uin=" u "&site=qq&menu=yes"); webView.setWebChromeClient(new WebChromeClient(){}); } }