第一个:定义一个关闭当前窗口的函数
function close() {
var ac = new activity();
ac.loadXML(`
<LinearLayout>
<Button id="button1" text="第一个按钮"/>
</LinearLayout>
`);
var btn = ac.findViewById("button1");
if (btn) {
btn.setOnClickListener(function() {
new thread().runJsCode(function fun() {
console.log('线程执行代码防止占用UI线程');
ac.close();
}, "-线程名");
});
} else {
console.log("按钮未找到,无法设置点击事件。");
}
}
close();
- 函数定义:
function close()
定义了一个名为 close
的函数,用于创建一个新窗口并设置按钮的点击事件。 - 窗口初始化:
var ac = new activity();
创建一个新的活动实例,代表一个新的窗口。 - 布局加载:使用
ac.loadXML(...)
方法加载 XML 格式的布局,使用 LinearLayout
容器包含了一个按钮 Button
。 - 按钮获取:
var btn = ac.findViewById("button1");
通过按钮的 ID 获取其实例。 - 点击事件设置:
- 通过判断
btn
是否为空,确保按钮存在。 - 使用
btn.setOnClickListener(...)
设置点击事件,当按钮被点击时,会执行其中的代码。
线程执行:使用 new thread().runJsCode(...)
启动新线程来执行代码。
窗口关闭:ac.close();
关闭当前窗口。
第二个:定义一个关闭应用的函数
function closeApp(arg0) {
if (arg0 != "") {
console.log("正在关闭应用: " + arg0);
} else {
console.log("未提供包名,无法关闭应用。");
}
}
app.closeApp("com.liubowang.drawingboard");
app.closeApp("");
函数定义:
function closeApp(arg0)
:定义了一个名为 closeApp
的函数,接受一个参数 arg0
,该参数是需要关闭的应用的包名,通常以字符串形式提供。
参数说明:
String arg0
: 作为输入,这个参数代表要关闭的应用的包名,例子如 "com.liubowang.drawingboard"
。
包名检查:
if (arg0 != "")
: 该条件判断语句用来检查传入的参数 arg0
是否为空。如果包名不为空,表示有有效的应用需要关闭。
输出关闭信息:
console.log("正在关闭应用: " + arg0);
: 将关闭应用的信息打印到控制台,有助于调试和确认操作。
关闭应用的逻辑:
- 这个部分可以包含实际的代码逻辑,用于关闭应用。具体实现将依赖于不同平台的 API。例如,在 Android 中,可以使用某些系统调用来结束进程。
- 示例中提到的
android.os.Process.killProcess(android.os.Process.myPid());
是一种关闭应用进程的方式,具体需要根据实际业务场景来决定是否使用。
处理空包名:
- 如果
arg0
为空,函数将执行 console.log("未提供包名,无法关闭应用。");
,反馈给用户未提供有效的包名,从而避免执行无效或错误的操作。
示例调用:
app.closeApp("com.liubowang.drawingboard");
是实际调用函数的方式,尝试关闭指定的应用。app.closeApp("");
是一个示例,表明如果不传入包名,将提示用户未提供包名的错误。
第三个:关闭floatUI所有窗口
function FloatWindow(name) {
this.name = name;
console.log(this.name + " 窗口已打开");
}
FloatWindow.prototype.close = function() {
console.log(this.name + " 窗口已关闭");
};
function floatUI() {
this.windows = [];
}
floatUI.prototype.addWindow = function(name) {
var window = new FloatWindow(name);
this.windows.push(window);
};
floatUI.prototype.closeAll = function() {
this.windows.forEach(function(window) {
window.close();
});
this.windows = [];
console.log("所有窗口已关闭");
};
var ui = new floatUI();
ui.addWindow("窗口1");
ui.addWindow("窗口2");
ui.addWindow("窗口3");
ui.closeAll();
定义 FloatWindow
构造函数
function FloatWindow(name) {
this.name = name;
console.log(this.name + " 窗口已打开");
}
* 当你使用 `new FloatWindow(name)` 创建一个新实例时,会在控制台输出窗口已打开的信息。
定义 FloatWindow
的 close
方法
FloatWindow.prototype.close = function() {
console.log(this.name + " 窗口已关闭");
};
* 当你调用 `window.close()` 方法时,会在控制台输出窗口已关闭的信息。
定义 floatUI
构造函数
function floatUI() {
this.windows = [];
}
* 当你使用 `new floatUI()` 创建一个新实例时,会初始化一个空数组 `windows` 用于存储浮动窗口对象。
定义 floatUI
的 addWindow
方法
floatUI.prototype.addWindow = function(name) {
var window = new FloatWindow(name);
this.windows.push(window);
};
* 当你调用 `ui.addWindow(name)` 方法时,会创建一个新的 `FloatWindow` 对象,并将其添加到 `ui.windows` 数组中。同时,`FloatWindow` 的构造函数会在控制台输出窗口已打开的信息。
定义 floatUI
的 closeAll
方法
floatUI.prototype.closeAll = function() {
this.windows.forEach(function(window) {
window.close();
});
this.windows = [];
console.log("所有窗口已关闭");
};
* 当你调用 `ui.closeAll()` 方法时,会遍历 `ui.windows` 数组中的每个 `FloatWindow` 对象,并调用其 `close` 方法来关闭窗口。每个窗口关闭时,`FloatWindow` 的 `close` 方法会在控制台输出窗口已关闭的信息。最后,清空 `ui.windows` 数组,并在控制台输出所有窗口已关闭的信息。
执行过程
创建 floatUI
实例
var ui = new floatUI();
* 控制台输出:无(因为 `floatUI` 构造函数中没有输出信息)
添加浮动窗口
ui.addWindow("窗口1");
ui.addWindow("窗口2");
ui.addWindow("窗口3");
* 控制台输出:
窗口1 窗口已打开
窗口2 窗口已打开
窗口3 窗口已打开
关闭所有浮动窗口
ui.closeAll();
* 控制台输出:
窗口1 窗口已关闭
窗口2 窗口已关闭
窗口3 窗口已关闭
所有窗口已关闭
总结
在执行 ui.addWindow("窗口1")
、ui.addWindow("窗口2")
和 ui.addWindow("窗口3")
时,控制台会输出每个窗口已打开的信息。然后在执行 ui.closeAll()
时,控制台会输出每个窗口已关闭的信息,最后输出所有窗口已关闭的信息。如果你没有看到打开窗体的输出,可能是控制台没有显示这些信息,或者你在执行代码时没有注意到这些输出。
第四个:HUI交互模块关闭
var HUI = {
name: "HUI交互模块",
isOpen: false,
open: function() {
this.isOpen = true;
console.log(this.name + " 已打开");
},
close: function() {
if (this.isOpen) {
this.isOpen = false;
console.log(this.name + " 已关闭");
} else {
console.log(this.name + " 已处于关闭状态");
}
}
};
HUI.open();
HUI.close();
这段代码的主要目的是创建一个简单的管理模块,以便控制其打开和关闭状态。open 和 close 方法分别用于管理模块显示的逻辑。虽然代码中的显示和隐藏逻辑需要根据实际使用的框架或设备予以实现,但基本的逻辑结构已经完成。这使得代码在组织方式上清晰,并提供了一个位于将来可能添加界面功能的基础。
第四个: JsWebView 模块浏览器关闭
function JsWebView(url) {
this.url = url;
this.isOpen = false;
this.open = function() {
this.isOpen = true;
console.log("WebView 打开,加载 URL: " + this.url);
};
this.close = function() {
if (this.isOpen) {
this.isOpen = false;
console.log("WebView 已关闭");
} else {
console.log("WebView 已处于关闭状态");
}
};
}
var myWebView = new JsWebView("https://example.com");
myWebView.open();
myWebView.close();
定义 JsWebView 类
function JsWebView(url):构造函数接受一个 URL,用于加载内容。
this.url:存储传入的 URL。
this.isOpen:跟踪 WebView 的打开状态,初始值为 false。
打开 WebView
this.open = function():一个方法用于打开 WebView。
将 isOpen 设置为 true,并输出 WebView 打开和加载的 URL 信息。
可在此处插入实际打开 WebView 的代码。
关闭 WebView
this.close = function():一个方法用于关闭 WebView。
检查 isOpen 状态,如果 WebView 打开,则设置为 false 并输出已关闭的信息;如果已关闭,则输出已处于关闭状态的信息。
可在此处插入实际关闭 WebView 的代码。
创建实例并调用
var myWebView = new JsWebView(“https://example.com"):创建 JsWebView 的实例,并传入一个 URL。
调用 open() 方法打开 WebView,并调用 close() 方法关闭 WebView。
该示例展示了如何创建一个简单的 JsWebView 类,能够打开和关闭 WebView。您可以将其作为基础,根据具体需求扩展或者集成到其他 JAVA/JavaScript 代码中去。在实际应用中,”打开” 和 “关闭” 的逻辑会根据使用的平台进行实际实施。
第五个: 关闭日志窗口
var logWindow = {
isOpen: false,
open: function() {
this.isOpen = true;
console.log("日志窗口已打开");
},
close: function() {
if (this.isOpen) {
this.isOpen = false;
console.log("日志窗口已关闭");
} else {
console.log("日志窗口已处于关闭状态");
}
}
};
logWindow.open();
logWindow.close();
logWindow.close();
第六个:释放 YOLO
复制
let img = screen.screenShotFull();
let ocrres = img.paddleOCR(640, [0, 0, 1, 1]);
printl(ocrres);
var qqrect = ocrres.findIncludeText("qq");
if (qqrect) {
qqrect.hidClick();
} else {
printl("没有找到包含 'qq' 的文本");
}
var yolo = new yoloV5();
var labelPath = project.getResourcesPath() + 'close.txt';
var paramPath = project.getResourcesPath() + 'close.param';
var binPath = project.getResourcesPath() + 'close.bin';
var model = yolo.loadModel(labelPath, paramPath, binPath, 4, false);
if (model != null) {
printl('模型加载失败');
} else {
var img = screen.screenShotFull();
var res = yolo.detectPercent(img, [0, 0, 1, 1], 0.4, 0.45, 640);
printl(res);
if (res != null && res.length > 0) {
} else {
printl("没有检测到目标");
}
}
yolo.Close();
OCR(光学字符识别)和 YOLO(You Only Look Once,对象检测算法)来处理图像,查找文本和目标。以下是代码的逐步解释:
1. OCR 部分
let img = screen.screenShotFull();
let ocrres = img.paddleOCR(640, [0, 0, 1, 1]);
printl(ocrres);
screen.screenShotFull()
:截取当前屏幕的完整图像并赋值给变量 img
。img.paddleOCR(640, [0, 0, 1, 1])
:通过 PaddleOCR 对截取的图片进行文字识别。640
是识别图像的尺寸,[0, 0, 1, 1]
是识别区域的参数。printl(ocrres)
:将识别结果打印到控制台,以便查看识别的文本。
// 查找含有 “qq” 的文字目标
var qqrect = ocrres.findIncludeText(“qq”);
if (qqrect) {
qqrect.hidClick();
} else {
printl("没有找到包含 'qq' 的文本");
}
ocrres.findIncludeText("qq")
:在 OCR 结果中查找包含字符 “qq” 的文本,返回相应的文本框区域。if (qqrect)
:检查找到的目标框 qqrect
是否存在。- 如果存在,则调用
hidClick()
方法模拟点击该文本目标。 - 如果不存在,则输出”没有找到包含 ‘qq’ 的文本”的提示信息。
2. YOLO 部分
var yolo = new yoloV5();
var labelPath = project.getResourcesPath() + 'close.txt';
var paramPath = project.getResourcesPath() + 'close.param';
var binPath = project.getResourcesPath() + 'close.bin';
new yoloV5()
:创建一个新的 YOLO 实例,用于对象检测。加载识别库:通过 getResourcesPath()
方法获取模型文件的路径,并将标签、参数和二进制文件路径分配给 labelPath
、paramPath
和 binPath
变量。
// 加载模型
var model = yolo.loadModel(labelPath, paramPath, binPath, 4, false);
if (model != null) {
printl('模型加载失败');
} else {
var img = screen.screenShotFull();
var res = yolo.detectPercent(img, [0, 0, 1, 1], 0.4, 0.45, 640);
printl(res);
if (res != null && res.length > 0) {
} else {
printl("没有检测到目标");
}
}
yolo.loadModel(...)
:加载 YOLO 模型,使用之前准备的标签、参数和二进制文件。if (model != null)
:检查模型加载是否成功。如果返回的 model
不为 null
,则输出”模型加载失败”。screen.screenShotFull()
:再次截取屏幕进行对象检测。yolo.detectPercent(...)
:在指定区域内进行对象检测,返回检测结果。printl(res)
:打印检测结果。if (res != null && res.length > 0)
:检查检测结果数组是否有内容。- 如果存在检测结果,注释部分提到可以点击第一个目标。
- 如果没有检测到目标,输出”没有检测到目标”的提示信息。
3. 释放资源
yolo.Close();
yolo.Close()
:释放 YOLO 模型占用的资源,以清理内存和其他使用。