全局模块
# 说明
全局模块是指直接调用方法就可以使用的模块,无需使用前缀对象名称
全局函数在**无障碍模式下和代理模式下都可以调用**,不区分运行模式。
# 插件、模块加载
## loadDex(path)
载入dex或者apk
@param path 路径,加载顺序分别是插件目录(例如 ab.apk)或者是文件路径(例如 /sdcard/ab.apk)加载
@return true 载入成功, false载入失败
```js
function main(){
//类似这样会先从IEC文件的插件目录查找
//loadDex("ocr.apk");
//下面这个是从sdcard查找
loadDex("/sdcard/a.apk");
// a.apk中存在com.A这个这个类,可以直接使用
var obj = new com.A();
}
main();
```
#### 加载java文件中的class
```js
// 混合开发
if (loadDex("defaultplugin.apk")) {
importPackage(com.plugin.util);
let utilsClass = new com.plugin.util.NetworkUtil();
if (utilsClass) {
logd('是否联网:' + utilsClass.isNetConnected(context));
logd('运营商:' + utilsClass.getOperatorName(context));
logd('网络类型:' + utilsClass.getNetworkState(context));
logd('是否为WIFI:' + utilsClass.isWifiConnected(context));
logd('连接是否有效:' + utilsClass.isConnected(context));
logd('是否正在联网:' + utilsClass.isConnectedOrConnecting(context));
logd('移动连接:' + utilsClass.isMobileConnected(context));
logd('wifi可用:' + utilsClass.isWifiAvailable(context));
logd('移动网络可用:' + utilsClass.isMobileAvailable(context));
logd('移动网络开关:' + utilsClass.isMobileEnabled(context));
logd('网络可用:' + utilsClass.isAvailable(context));
}
} else {
loge("工具包加载失败");
}
```
## require(path)
导入JS模块
@param path 路径,例如 本地/sdcard/a.js或者 EC工程中的文件路径 slib/a.js
@return 模块对象
```js
function main(){
test = require("slib/a.js")
logd(test.c());
}
main();
```
## importClass(clz)
导入java的class给js用
@param clz class的名称例如: com.A
```js
function main(){
importClass(com.A);
var obj = new com.A();
}
main();
```
#### 检测网络是否正常
```js
// 网络检测
function isNetwork() {
importClass(android.net.ConnectivityManager);
var cm = context.getSystemService(context.CONNECTIVITY_SERVICE);
var net = cm.getActiveNetworkInfo();
if (net == null || !net.isAvailable()) {
return false;
} else {
return true;
}
}
```
## importPackage(clz)
导入java包下面所有类给js用
@param clz class的名称例如: com.b
```js
function main(){
importPackage(com.b);
var obj = new com.b.A();
}
main();
```
#### 判断设备屏幕方向
```js
logd(getScreenDirection());
//判断设备屏幕方向:1竖屏;2横屏
function getScreenDirection() {
importPackage(android.content);
return context.getResources().getConfiguration().orientation;
}
```
# 脚本启停
## exit()
退出脚本
## sleep(miSecond)
暂停执行、休眠
@param miSecond 毫秒
```js
function main(){
var result = sleep(1000);
if (result){
toast("成功");
} else {
toast("失败");
}
}
main();
```
## execScript(type,content)
执行JS文件或者内容
@param type 1=文件,2=直接是JS内容
@param content 路径例如/sdcard/a.js或者js的内容
@return 布尔型,true代表执行成功, false代表失败
```js
function main(){
var d ='while(true){sleep(1000);logd(111111);}';
thread.execAsync(function() {
//execScript(1,"/sdcard/ad.js")
execScript(2,d);
});
while(true){
sleep(2000);
loge("fsadffsad")
}
}
main();
```
## restartScript(path,stopCurrent,delay)
重启脚本,适合无限循环,或者有异常的情况可以下载最新的iec再次执行,避免进入UI才能热更新
> 该方法威力巨大,请自行控制好是否自动重启,否则只能强杀进程才能停止
@param path 新的IEC路径,如果不需要可以填写null
@param stopCurrent 是否停止当前的脚本
@param delay 延迟多少秒后执行
@return bool true 代表成功 false 代表失败
```js
function main(){
logd("我是在脚本运行的");
setStopCallback(function(){
restartScript(null,false,3)
});
//setExceptionCallback(function (){
// restartScript(null,true,3)
//});
sleep(1000);
logd("脚本结束")
}
main();
```
# 监听脚本和服务
## setStopCallback()
脚本停止监听
```js
function main(){
setStopCallback(function (){
logd("fdsafsad 我是停止回调")
});
var result = sleep(1000);
if (result){
toast("成功");
} else {
toast("失败");
}
}
main();
```
## setExceptionCallback()
脚本异常停止监听
```js
function main(){
setExceptionCallback(function (msg){
logd(" 异常停止消息: "+msg)
});
var result = sleep(1000);
if (result){
toast("成功");
} else {
toast("失败");
}
//这里有异常抛出
result.length();
}
main();
```
## observeEvent(event,callback)
(无障碍模式)对系统事件进行监听
@param event 事件类型 类型有:
- activity-change 页面切换,OK
- notification-show:状态栏通知展示, OK
- toast-show:Toast消息展示, OK
- key-down:按键按下, OK
- key-up:按键弹起 OK
- acc-service-interrupt:无障碍服务被中断 OK
- acc-service-destroy: 无障碍服务被销毁 OK
- acc-event:无障碍节点事件 OK
- acc-service-connected: 无障碍服务连接成功 OK
- auto-service-status: 自动化服务可用状态
@param callback 事件回调
@return {bool} | true 成功,false失败
```js
function main(){
startEnv();
logd("开始监听");
observeEvent("activity-change",function (key,data){
logd("页面切换: "+typeof data)
logd("页面切换: "+data)
});
//监听无障碍节点事件
observeEvent("acc-event",function (key,data){
logd("acc-event: "+typeof data)
logd("acc-event: "+data)
});
while(true){
sleep(1000)
}
//取消事件监听
cancelObserveEvent("acc-event")
}
main();
```
#### 监听页面变化数据
```js
if(isAccMode()) {
logd('无障碍模式');
observeEvent("acc-event",function (key,data){
logd("acc-event: "+typeof data)
logd("acc-event: "+data)
});
while(true){
sleep(1000)
}
} else {
loge('非无障碍模式');
}
```
## cancelObserveEvent(event)
取消对系统事件监听
@param event 事件类型
@return {bool} | true 成功,false失败
```js
function main(){
startEnv();
logd("开始监听");
observeEvent("activity-change",function (key,data){
logd("页面切换: "+typeof data)
logd("页面切换: "+data)
});
//监听无障碍节点事件
observeEvent("acc-event",function (key,data){
logd("acc-event: "+typeof data)
logd("acc-event: "+data)
});
sleep(10000)
//取消事件监听
cancelObserveEvent("acc-event")
}
main();
```
# 读取IEC包资源
## readResString(fileName)
读取res文件夹中的资源文件,并返回字符串
@param fileName 文件名称,不要加res前缀
@return string 如果是null代表没内容
```js
function main(){
var testData = readResString("a.txt");
}
main();
```
## readResBitmap(fileName)
读取res文件夹中的资源文件,并返Bitmap图片对象
@param fileName 文件名称,不要加res前缀
@return string 如果是null代表没内容
```js
function main(){
var b = readResBitmap("a.txt");
}
main();
```
## readResAutoImage(fileName)
读取res文件夹中的资源文件,并返 AutoImage 图片对象
@param fileName 文件名称,不要加res前缀
@return string 如果是null代表没内容
```js
function main(){
var b = readResAutoImage("img/a.png");
}
main();
```
## saveResToFile(fileName,path)
保存res文件夹中的资源文件到指定的路径
@param fileName 文件名称,不要加res前缀
@param path 要保存到的路径地址,例如/sdcard/aa.txt
@return boolean|布尔型 true代表保存成功
```js
function main(){
var b = saveResToFile("img/a.png","/sdcard/a.png");
}
main();
```
# UI参数读取
## readConfigString(key)
读取UI界面中的参数,返回是字符串
@param key 在UI界面中配置的key
@return 字符串 找不到就返回空字符串
```js
function main(){
var testData = readConfigString("test_key");
}
main();
```
## readConfigInt(key)
读取UI界面中的参数,返回是整型
@param key 在UI界面中配置的key
@return 整型,找不到就返回0
```js
function main(){
var testData = readConfigInt("test_key");
}
main();
```
## readConfigDouble(key)
读取UI界面中的参数,返回是Double型
@param key 在UI界面中配置的key
@return double
```js
function main(){
var testData = readConfigDouble("test_key");
}
main();
```
## readConfigBoolean(key)
读取UI界面中的参数,返回是布尔型
@param key 在UI界面中配置的key
@return true 或者 false
```js
function main(){
var testData = readConfigDouble("test_key");
}
main();
```
## deleteConfig(key)
删除配置值
@param key 在UI界面中配置的key
@return {bool} true 代表成功 false 代表失败
```js
function main(){
var testData = deleteConfig("test_key");
}
main();
```
## getConfigJSON()
取得配置的JSON
@return JSON数据
```js
function main(){
var testData = getConfigJSON();
}
main();
```
## updateConfig(key,value)
更新配置
@param key 键
@param value 值
@return {boolean} true 成功,false失败
```js
function main(){
updateConfig("a","sss");
}
main();
```
#### 封装简单的本地存储读写方法
```js
// Demo By 飞云编程学院
logd(setStorageData('feiyun', 'http://www.feiyunjs.com'));
logi(getStorageData('feiyun'));
//保存本地数据
function setStorageData(key, value) {
return updateConfig(key, value);
}
//读取本地数据
function getStorageData(key) {
let result = readConfigString(key);
if (result) {
return result;
} else {
//找不到则返回undefined
}
}
//删除本地数据
function delStorageData(key) {
return deleteConfig(key);
}
```
# 系统设置
## setECSystemConfig(params)
设置EC的系统参数
@param params map形式例如
```js
{
"running_mode":"无障碍",
"auto_start_service":"是",
"log_float_window":"否",
"ctrl_float_window":"否"
}
```
参数解释有:
- running_mode : 运行模式 值有 无障碍,代理两种
- auto_start_service: 开机自启动 值有 是,否 两种
- log_float_window : 日志悬浮窗展示 值有 是,否 两种
- ctrl_float_window : 启停控制悬浮窗展示 值有 是,否 两种
@return 布尔型 true 是 false 否
```js
function main(){
var m = {
"node_service":"需要",
"proxy_service":"不需要",
"running_mode":"无障碍",
"log_float_window":"否",
"ctrl_float_window":"否"
};
setECSystemConfig(m);
}
main();
```
## openECSystemSetting()
打开EC系统设置页面
@return true 成功 false 失败
```js
function main(){
var result = openECSystemSetting();
}
main();
```
## openECloudSetting()
打开EC云控界面
@return true 成功 false 失败
```js
function main(){
var result = openECloudSetting();
}
main();
```
# 设置IEC文件(脚本中的热更新)
## setIECPath()
设置要执行的IEC文件路径
@return true 成功 false 失败
```js
function main(){
var result = setIECPath("/sdcard/release.iec");
logd("result : "+result);
logd("当前路径 "+getIECPath());
//开启定时任务准备下一次执行
var id2 =startJob("task2","2",true);
logd("job id "+id2);
}
main();
```
# 运行模式
## isAccMode()
是否是无障碍模式
@return true或者false
```js
function main(){
var result = isAccMode();
}
main();
```
## isAgentMode()
是否是代理模式
@return true或者false
```js
function main(){
var result = isAgentMode();
}
main();
```
## isServiceOk()
自动化服务是否正常
@return true或者false
```js
function main(){
var result = isServiceOk();
}
main();
```
## startEnv()
启动自动化服务环境
@return true或者false
```js
function main(){
var result = startEnv();
}
main();
```
## closeEnv()
关闭自动化服务环境
适用版本(EC 5.14.0+)
@return true或者false
```js
function main(){
var result = closeEnv();
}
main();
```
## activeSelf()
激活自己
条件:1 开启USB调试,2 开启本机ADB WIFI调试,请参考激活章节文档
> 适用版本(EC 5.15.0+)
@param activeType 激活类型,0 自动,1 模式1 2 模式2
@param timeout 超时时间
@return {string} 激活成功:代表成功,其他都是错误消息
```js
function main(){
var result = activeSelf(0,10*1000);
logd(result)
}
main();
```
## activeDevice()
通过设备的IP激活设备
条件:1 开启目标设备USB调试,2 开启目标设备ADB WIFI调试,请参考激活章节文档
> 适用版本(EC 5.15.0+)
@param ip 设备的IP
@param activeType 激活类型,0 自动,1 模式1 2 模式2
@param timeout 超时时间
@return {string} 激活成功:代表成功,其他都是错误消息
```js
function main(){
var result = activeDevice("192.168.1.108",0,10*1000);
logd(result)
}
main();
```
#### 自动启动服务
```js
/**
@description 自动启动服务
@param time:失败后重启次数
@return boolean:返回是否启动成功
*/
function autoServiceStart(time) {
if (isAccMode()) {
logd('运行模式:无障碍');
} else if (isAgentMode()) {
logd('运行模式:代理');
} else {
loge('运行模式:未知');
}
for (var i = 0; i < time; i++) {
if (isServiceOk()) {
return true;
} else {
var started = startEnv();
logd("第" + (i + 1) + "次启动服务: " + started);
if (isServiceOk()) {
return true;
}
}
}
return isServiceOk();
};
```
# 时间
## time()
> 适用版本(EC 5.14.0+)
毫秒时间函数
@return {long} 毫秒级别的long时间
```js
function main(){
logd(time());
}
main();
```
## timeFormat()
> 适用版本(EC 5.14.0+)
格式化时间函数例如:yyyy-MM-dd HH:mm:ss
@return {string} 格式化之后的当前时间
```js
function main(){
logd(timeFormat("yyyy-MM-dd HH:mm:ss"));
}
main();
```
## console.time()
> 适用版本(EC 5.14.0+)
计时开始,和timeEnd成对出现计算用时
@param label 标签
@return {long} 当前时间
```js
function main(){
console.time("1");
sleep(1000)
logd(console.timeEnd("1"))
}
main();
```
## console.timeEnd()
> 适用版本(EC 5.14.0+)
计时结束,和timeEnd成对出现计算用时
@param label 标签
@return {long} 与计时开始的差值
```js
function main(){
console.time("1");
sleep(1000)
logd(console.timeEnd("1"))
}
main();
```