autojs之通信

通信概念

两个主体, 相互之间交换信息

autojs版本

在这里插入图片描述

主体概念

  • 同一个脚本
  • 多个脚本
  • 脚本和app
  • 脚本和服务器

通信方法

  • 文件读写

  • 本地存储 Storages

  • emitter

  • 脚本间广播 events.broadcast

  • 脚本引擎 ScriptEngine

  • 脚本引擎 execScriptFile

  • 安卓广播

  • http

文件读写

let filePath = files.join(files.getSdcardPath(), "1.txt");
files.write(filePath, "hello world");
toastLog(files.read(filePath));

本地存储 Storages

var storage = storages.create("ABC");
storage.put("a", 123);
toastLog(storage.get("a"));

emitter

// 会打印2次 hello world
const myEE = events.emitter();
myEE.on("foo", (value) => {
  toastLog(value);
});
myEE.on("foo", (value) => {
  toastLog(value);
});
console.log(myEE.eventNames());
myEE.emit("foo", "hello world");

脚本间广播 events.broadcast

// 请牢记js是单线程, 3秒过后才会打印小明
events.broadcast.on("hello", function (name) {
  toastLog("你好, " + name);
});
events.broadcast.emit("hello", "小明");

//保持脚本运行
setInterval(() => {}, 1000);

for (var i = 0; i < 3; i++) {
  sleep(1000);
  log(i);
}

脚本引擎 ScriptEngine

向该脚本引擎发送一个事件,该事件可以在该脚本引擎对应的脚本的events模块监听到并在脚本主线程执行事件处理。

例如脚本receiver.js的内容如下:

//监听say事件
events.on("say", function(words){
  toastLog(words);
});
//保持脚本运行
setInterval(()=>{}, 1000);

同一目录另一脚本可以启动他并发送该事件:

//运行脚本
var e = engines.execScriptFile("./receiver.js");
//等待脚本启动
sleep(2000);
//向该脚本发送事件
e.getEngine().emit("say", "你好");

脚本引擎 engines.execScriptFile

demo.js

var args = engines.myEngine().execArgv;
let who = args.who;
toastLog(who);

启动demo.js并且带上参数

engines.execScriptFile("demo.js", { arguments: { who: "yashu" } });

安卓广播

注册广播

let receiver = new JavaAdapter(android.content.BroadcastReceiver, {
  onReceive: function (context, intent) {
    log(intent);
    switch (intent.action) {
      case Intent.ACTION_BATTERY_CHANGED:
        log("ACTION_BATTERY_CHANGED");
        let level = intent.getIntExtra("level", 0);
        toastLog("当前电量:" + level + "%");
        break;
      case "android.intent.action.yashu":
        toastLog("牙叔自定义广播");
        let value = intent.getStringExtra("author");
        log("接收到数据 author: " + value);
        break;
    }
  },
});
context.registerReceiver(receiver, filter);

发送广播

app.sendBroadcast({
  action: action,
  extras: {
    author: "yashu",
  },
});

http

GET

console.show();
var r = http.get("www.baidu.com");
log("code = " + r.statusCode);
log("html = " + r.body.string());

POST

一个模拟表单提交登录淘宝的例子如下:

var url = "https://login.taobao.com/member/login.jhtml";
var username = "你的用户名";
var password = "你的密码";
var res = http.post(url, {
    "TPL_username": username,
    "TPL_password": password
});
var html = res.body.string();
if(html.contains("页面跳转中")){
    toast("登录成功");
}else{
    toast("登录失败");
}

相关教程

autojs之广播监听

autojs之socketIO

autojs之词云

微信公众号 AutoJsPro教程

在这里插入图片描述

QQ群

747748653

在这里插入图片描述

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
AutoJs中,可以使用线程来实现多任务并发执行,通过线程通信可以实现不同线程之间的数据交换和协同工作。在给定的代码示例中,可以看到多个线程的使用和线程之间的通信。 在这个例子中,主线程和子线程通过共享的变量`num`进行通信。主线程通过点击`start`按钮创建一个新线程`currentThread`,并在新线程中不断输出`num`的值。然后,通过点击`stop`按钮,可以暂停新线程的执行,即调用了`suspend`方法。 在实际应用中,可以使用线程间的共享变量或消息队列等方式进行线程通信。通过共享变量,可以在不同线程之间传递数据。而消息队列则是一种更高级的线程通信方式,可以实现更复杂的交互。 总结起来,AutoJs中的线程通信可以通过共享变量或消息队列来实现,具体的通信方式可以根据实际需求来选择。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [AutoJs源码-例子-多线程使用](https://download.csdn.net/download/m0_56069948/87015322)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [autojs之每日上报2.0-超繁版(多线程实现)](https://blog.csdn.net/tfnmdmx/article/details/118544342)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [autojs 多线程 暂停](https://blog.csdn.net/qq_44352617/article/details/118427324)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牙叔教程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值