首页 > 其他分享 >Android 辅助功能 -抢红包(三)

Android 辅助功能 -抢红包(三)

时间:2024-03-15 17:13:11浏览次数:14  
标签:辅助 抢红包 step TAG AccessibilityNodeInfo charSequence ACTION Android onAccessibilit

Android 辅助功能 -抢红包(三)

本篇文章继续讲述辅助功能.

主要通过监听通知栏红包消息,来跳转聊天页面,并自动回复对方"谢谢".

上篇文章我们讲述了监听notification, 跳转聊天界面. 具体可查看:

Android 辅助功能 -抢红包(二)

1: 使用monitor抓取id.

file

打开android device monitor 获取resouce-id 备用.

2: 设置聊天框文本

通过步骤1获取到的resouce-id来获取AccessibilityNodeInfo.

List<AccessibilityNodeInfo> accessibilityNodeInfosByViewId = rootInActiveWindow.findAccessibilityNodeInfosByViewId("com.tencent.mm:id/bkk");

找到edit结点后, 设置edit文本内容,具体方法为performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, Bundle).

Bundle arguments = new Bundle();
arguments.putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, "谢谢");
accessibilityNodeInfo.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, arguments);

3: 点击发送

List<AccessibilityNodeInfo> accessibilityNodeInfosByViewId = rootInActiveWindow.findAccessibilityNodeInfosByViewId("com.tencent.mm:id/bql");
for (AccessibilityNodeInfo accessibilityNodeInfo : accessibilityNodeInfosByViewId) {
    accessibilityNodeInfo.performAction(AccessibilityNodeInfo.ACTION_CLICK);
    step = 0;
}

仍然通过findAccessibilityNodeInfosByViewId找到发送按钮的结点, 调用AccessibilityNodeInfo.ACTION_CLICK 发送文本.

完整的代码如下:

public class RedPacketAccessibilityService extends AccessibilityService {
    private static final String TAG = "RedPacketAccessibilityService";
    private int step = 0;

    @SuppressLint("LongLogTag")
    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        int action = event.getAction();
        Log.i(TAG, "onAccessibilityEvent: " + action);
        CharSequence packageName = event.getPackageName();
        Log.i(TAG, "onAccessibilityEvent: " + packageName);

        AccessibilityNodeInfo rootInActiveWindow = getRootInActiveWindow();
        if (rootInActiveWindow != null) {
//            List<AccessibilityNodeInfo> nodeInfos = rootInActiveWindow.findAccessibilityNodeInfosByText("红包:恭喜发财");
//            if (nodeInfos != null) {
//                for (AccessibilityNodeInfo nodeInfo : nodeInfos) {
//                    nodeInfo.performAction(AccessibilityNodeInfo.ACTION_CLICK);
//                }
//            }
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
                //第二步骤: 设置文本edit内容
                if (step == 1) {
                    List<AccessibilityNodeInfo> accessibilityNodeInfosByViewId = rootInActiveWindow.findAccessibilityNodeInfosByViewId("com.tencent.mm:id/bkk");
                    if (accessibilityNodeInfosByViewId != null) {
                        Log.i(TAG, "onAccessibilityEvent: 查找edit");
                        for (AccessibilityNodeInfo accessibilityNodeInfo : accessibilityNodeInfosByViewId) {
                            Bundle arguments = new Bundle();
                            arguments.putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, "谢谢");
                            accessibilityNodeInfo.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, arguments);
                            step = 2;
                        }
                    }
                }
            }
        }

        Log.i(TAG, "onAccessibilityEvent: step =" + step);
        //点击发送按钮,发送谢谢
        if (step == 2) {
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
                List<AccessibilityNodeInfo> accessibilityNodeInfosByViewId = rootInActiveWindow.findAccessibilityNodeInfosByViewId("com.tencent.mm:id/bql");
                for (AccessibilityNodeInfo accessibilityNodeInfo : accessibilityNodeInfosByViewId) {
                    accessibilityNodeInfo.performAction(AccessibilityNodeInfo.ACTION_CLICK);
                    step = 0;
                }
            }
        }


        switch (event.getEventType()) {
            case AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:
                List<CharSequence> text = event.getText();
                for (CharSequence charSequence : text) {
                    Log.i(TAG, "onAccessibilityEvent: notification ->" + charSequence);
//                    if (charSequence.toString().contains("请求添加") ||
//                            charSequence.toString().contains("[微信红包]"))
                    if (charSequence.toString().contains("[微信红包]")) {
                        step = 0; //重置
                        Parcelable parcelableData = event.getParcelableData();
                        if (parcelableData != null && parcelableData instanceof Notification) {
                            PendingIntent contentIntent = ((Notification) parcelableData).contentIntent;
                            new Handler().postDelayed(() -> {
                                try {
                                    //第一步:跳转聊天界面
                                    contentIntent.send();
                                    step = 1;
                                } catch (PendingIntent.CanceledException e) {
                                    Log.e(TAG, "onAccessibilityEvent: ", e);
                                }
                            }, 1000);
                        }
                    }
                }
                break;
            case AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED:
                List<CharSequence> text1 = event.getText();
                for (CharSequence charSequence : text1) {
                    Log.i(TAG, "onAccessibilityEvent: TYPE_VIEW_TEXT_CHANGED ->" + charSequence);
                }
                break;
            case AccessibilityEvent.TYPE_VIEW_CLICKED:
                List<CharSequence> text2 = event.getText();
                for (CharSequence charSequence : text2) {
                    Log.i(TAG, "onAccessibilityEvent: TYPE_VIEW_CLICKED ->" + charSequence);
                }
                break;
        }

    }

    @Override
    public void onInterrupt() {

    }
}

本文由博客一文多发平台 OpenWrite 发布!

标签:辅助,抢红包,step,TAG,AccessibilityNodeInfo,charSequence,ACTION,Android,onAccessibilit
From: https://www.cnblogs.com/zhjing/p/18075831

相关文章

  • 分享两款常用的Android手机投屏软件
    1.AnLink下载链接:https://cn.anlinksoft.com/仅Windows可用,界面非常友好,文件传输也方便小米新系统澎湃会无法点击  2.scrcpyscrcpy同时适用于GNU/Linux,Windows和macOS。 仅显示设备屏幕,轻量化,其他操作需要命令行输入或快快捷键下载链接:https://github.com/Genymobi......
  • Android对apk进行签名
    1.生产签名文件keytool-genkey-v-keystoreesg.jks-keyalgRSA-keysize2048-validity10000-aliasesgkeytool:这是Java提供的一个命令行工具,用于管理密钥库和证书。-genkey:这个选项告诉keytool生成一个新的密钥对。-v:这个选项使keytool在执行时输出详......
  • Android中的Binder机制
    Binder机制是Android操作系统中的一种IPC(进程间通信)机制,它允许不同进程之间进行数据交换和通信。Binder机制是AndroidIPC机制的核心,它基于Linux内核的Binder驱动实现,提供了一种高效、快速的跨进程通信方式。###Binder的工作原理Binder机制的工作原理可以概括为以下几个步骤......
  • Android11 FallbackHome启动和关闭流程分析
    Android7.0引入了新特性:DirectBootMode,设备启动后进入的一个新模式,直到用户解锁(unlock)设备此阶段结束。在这个模式下,系统调用resolveHomeActivity找到的是FallbackHome,而不是我们的桌面应用。所以系统开始启动的是FallbackHome这个"桌面"。03-1316:58:41.35943......
  • Android 11 SystemServer启动流程
    在Android11Zygote启动流程有提到,Zygote通过forkSystemServer,fork出SystemServer进程,并在SystemServer进程中调用handleSystemServerProcess返回一个Runnable //...... /*Forchildprocess*/if(pid==0){if(hasSecondZygote(abiList))......
  • Android 11 Zygote启动流程
    Zygote进程由init进程启动,是systemserver进程和APP进程的父进程先看一下rc文件,以init.zygote32.rc为例servicezygote/system/bin/app_process-Xzygote/system/bin--zygote--start-system-serverclassmainpriority-20userrootgrouprootr......
  • Android NDK入门:在应用中加入C和C++的力量
    目录​编辑引NDK的设计目的与Java/Kotlin的结合使用场景开发流程设置项目以支持NDK编写本地代码使用JNI连接本地代码和Java/Kotlin代码编译和运行你的应用附 引自诩方向是android方向的移动端开发工程师,却从来没有真正仔细了解过NDK,这里就详细的整理了解一下n......
  • 在 Android 上恢复已删除文件的 5 种简单方法
    您可能会因为意外删除、未完成的Android更新、手机意外关机等原因而丢失Android上的重要数据。新技术的发展使许多手机功能或程序能够从内部恢复丢失的数据。在Android上恢复已删除文件的5种简单方法然而恢复成功率的不确定性也成为人们克服数据丢失困境的重要考虑......
  • Android中的NFC操作
    目录1.申请权限2.设置意图过滤器3.判断NFC功能是否可用(NfcAdapter)4.NFC感应(NfcAdapter)启用与禁用5.NFC数据解码6.案例代码一览NFC的全称是“NearFieldCommunication”,意思是近场通信、与邻近的区域通信。该功能由NfcAdapter(NFC适配器)控制。1.申请权限<!--N......
  • QT6.6下android编译及调用自定义so库方法
    一.问题概述   最近需要把QT程序从5.12的桌面环境移植到QT6.6的android下,项目中有很多DLL库要重新编译为so文件,移植到android环境然后调用,中间有很多坑,虽然大体和桌面系统用法相同,但细节上还是有区别的,尤其是so库的调用方法上,过程中也是debug了两天才解决,如果你也遇到了同......