分享一个Android实现微信自动抢红包的代码实例

互联网 17-4-28
简单实现了微信自动抢红包的服务,原理就是根据关键字找到相应的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实现微信自动抢红包的代码实例的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:分享java版微信机器人的实现方法

相关资讯