通信概念
两个主体, 相互之间交换信息
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("登录失败");
}
相关教程
微信公众号 AutoJsPro教程
QQ群
747748653