B2B网络软件

标题: 浮动窗口的管理操作 [打印本页]

作者: YYPOST群发软件    时间: 8 小时前
标题: 浮动窗口的管理操作
关闭close与释放内存

第一个:定义一个关闭当前窗口的函数

// 定义一个关闭当前窗口的函数
function close() {
    // 本示例创建一个带有一个按钮的窗口,点击按钮关闭当前窗口
    // 初始化一个新的活动(窗口)
    var ac = new activity();

    // 加载布局代码,使用 LinearLayout 替换 vertical
    ac.loadXML(`
        <LinearLayout>
            <Button id="button1" text="第一个按钮"/>
        </LinearLayout>
    `);

    // 获取按钮的实例
    var btn = ac.findViewById("button1");

    // 确保按钮对象不为null后再设置点击事件
    if (btn) {
        // 设置按钮的点击事件监听器
        btn.setOnClickListener(function() {
            // 在新线程中执行 JavaScript 代码
            new thread().runJsCode(function fun() {
                // 使用 console.log() 打印信息
                console.log('线程执行代码防止占用UI线程');
                // 关闭窗口
                ac.close();
            }, "-线程名");
        });
    } else {
        console.log("按钮未找到,无法设置点击事件。");
    }
}

// 示例调用
close(); // 调用关闭窗口的函数,显示带按钮的窗口
  1. 函数定义function close() 定义了一个名为 close 的函数,用于创建一个新窗口并设置按钮的点击事件。
  2. 窗口初始化var ac = new activity(); 创建一个新的活动实例,代表一个新的窗口。
  3. 布局加载:使用 ac.loadXML(...) 方法加载 XML 格式的布局,使用 LinearLayout 容器包含了一个按钮 Button
  4. 按钮获取var btn = ac.findViewById("button1"); 通过按钮的 ID 获取其实例。
  5. 点击事件设置
    • 通过判断 btn 是否为空,确保按钮存在。
    • 使用 btn.setOnClickListener(...) 设置点击事件,当按钮被点击时,会执行其中的代码。
  6. 线程执行:使用 new thread().runJsCode(...) 启动新线程来执行代码。

  7. 窗口关闭ac.close(); 关闭当前窗口。

第二个:定义一个关闭应用的函数

// 定义一个关闭应用的函数
function closeApp(arg0) {
    // 这个函数的作用是关闭指定名称的应用
    // 参数:
    // String arg0: 需要关闭的应用包名 (package name)

    // 检查传入的包名是否为空
    if (arg0 != "") {
        // 这里可以加入关闭应用的逻辑,比如通过 API 关闭应用
        console.log("正在关闭应用: " + arg0);
        // 关闭应用的相关逻辑代码
        // 示例:调用系统 API 来关闭应用(例如 Android 上的相关逻辑)
    } else {
        // 如果包名为空,输出提示信息
        console.log("未提供包名,无法关闭应用。");
    }
}

// 示例调用
app.closeApp("com.liubowang.drawingboard"); // 调用关闭应用的函数,关闭包名为 "com.liubowang.drawingboard" 的应用

// 若不提供包名的情况
app.closeApp(""); // 这将输出未提供包名的提示
  1. 函数定义

    • function closeApp(arg0):定义了一个名为 closeApp 的函数,接受一个参数 arg0,该参数是需要关闭的应用的包名,通常以字符串形式提供。
  2. 参数说明

    • String arg0: 作为输入,这个参数代表要关闭的应用的包名,例子如 "com.liubowang.drawingboard"
  3. 包名检查

    • if (arg0 != ""): 该条件判断语句用来检查传入的参数 arg0 是否为空。如果包名不为空,表示有有效的应用需要关闭。
  4. 输出关闭信息

    • console.log("正在关闭应用: " + arg0);: 将关闭应用的信息打印到控制台,有助于调试和确认操作。
  5. 关闭应用的逻辑

    • 这个部分可以包含实际的代码逻辑,用于关闭应用。具体实现将依赖于不同平台的 API。例如,在 Android 中,可以使用某些系统调用来结束进程。
    • 示例中提到的 android.os.Process.killProcess(android.os.Process.myPid()); 是一种关闭应用进程的方式,具体需要根据实际业务场景来决定是否使用。
  6. 处理空包名

    • 如果 arg0 为空,函数将执行 console.log("未提供包名,无法关闭应用。");,反馈给用户未提供有效的包名,从而避免执行无效或错误的操作。
  7. 示例调用

    • app.closeApp("com.liubowang.drawingboard"); 是实际调用函数的方式,尝试关闭指定的应用。
    • app.closeApp(""); 是一个示例,表明如果不传入包名,将提示用户未提供包名的错误。

第三个:关闭floatUI所有窗口

// 定义一个简单的 FloatWindow 构造函数来模拟浮动窗口
function FloatWindow(name) {
    this.name = name;
    console.log(this.name + " 窗口已打开");
}

FloatWindow.prototype.close = function() {
    console.log(this.name + " 窗口已关闭");
};

// 定义一个 floatUI 构造函数来管理浮动窗口
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("所有窗口已关闭");
};

// 创建一个 floatUI 实例并添加一些浮动窗口
var ui = new floatUI();
ui.addWindow("窗口1");
ui.addWindow("窗口2");
ui.addWindow("窗口3");

// 关闭所有浮动窗口
ui.closeAll();
  1. 定义 FloatWindow 构造函数

    function FloatWindow(name) {
        this.name = name;
        console.log(this.name + " 窗口已打开");
    }
    
*   当你使用 `new FloatWindow(name)` 创建一个新实例时,会在控制台输出窗口已打开的信息。
  1. 定义 FloatWindow 的 close 方法

    FloatWindow.prototype.close = function() {
        console.log(this.name + " 窗口已关闭");
    };
    
*   当你调用 `window.close()` 方法时,会在控制台输出窗口已关闭的信息。
  1. 定义 floatUI 构造函数

    function floatUI() {
        this.windows = [];
    }
    
*   当你使用 `new floatUI()` 创建一个新实例时,会初始化一个空数组 `windows` 用于存储浮动窗口对象。
  1. 定义 floatUI 的 addWindow 方法

    floatUI.prototype.addWindow = function(name) {
        var window = new FloatWindow(name);
        this.windows.push(window);
    };
    
*   当你调用 `ui.addWindow(name)` 方法时,会创建一个新的 `FloatWindow` 对象,并将其添加到 `ui.windows` 数组中。同时,`FloatWindow` 的构造函数会在控制台输出窗口已打开的信息。
  1. 定义 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` 数组,并在控制台输出所有窗口已关闭的信息。

执行过程

  1. 创建 floatUI 实例

    var ui = new floatUI();
    
*   控制台输出:无(因为 `floatUI` 构造函数中没有输出信息)
  1. 添加浮动窗口

    ui.addWindow("窗口1");
    ui.addWindow("窗口2");
    ui.addWindow("窗口3");
    
*   控制台输出:

        窗口1 窗口已打开
        窗口2 窗口已打开
        窗口3 窗口已打开
  1. 关闭所有浮动窗口

    ui.closeAll();
    
*   控制台输出:

        窗口1 窗口已关闭
        窗口2 窗口已关闭
        窗口3 窗口已关闭
        所有窗口已关闭

总结

在执行 ui.addWindow("窗口1")ui.addWindow("窗口2") 和 ui.addWindow("窗口3") 时,控制台会输出每个窗口已打开的信息。然后在执行 ui.closeAll() 时,控制台会输出每个窗口已关闭的信息,最后输出所有窗口已关闭的信息。如果你没有看到打开窗体的输出,可能是控制台没有显示这些信息,或者你在执行代码时没有注意到这些输出。

第四个:HUI交互模块关闭

// 定义 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 模块
HUI.open(); // 打开窗口

// 示例:关闭 HUI 模块
HUI.close(); // 关闭窗口

这段代码的主要目的是创建一个简单的管理模块,以便控制其打开和关闭状态。open 和 close 方法分别用于管理模块显示的逻辑。虽然代码中的显示和隐藏逻辑需要根据实际使用的框架或设备予以实现,但基本的逻辑结构已经完成。这使得代码在组织方式上清晰,并提供了一个位于将来可能添加界面功能的基础。

第四个: JsWebView 模块浏览器关闭

// 定义 JsWebView 类
function JsWebView(url) {
    this.url = url;
    this.isOpen = false;

    // 打开 WebView
    this.open = function() {
        this.isOpen = true;
        console.log("WebView 打开,加载 URL: " + this.url);
        // 这里可以添加实际打开 WebView 的代码
    };

    // 关闭 WebView
    this.close = function() {
        if (this.isOpen) {
            this.isOpen = false;
            console.log("WebView 已关闭");
            // 这里可以添加实际关闭 WebView 的代码
        } else {
            console.log("WebView 已处于关闭状态");
        }
    };
}

// 创建 JsWebView 实例
var myWebView = new JsWebView("https://example.com");

// 打开 WebView
myWebView.open();

// 关闭 WebView
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 代码中去。在实际应用中,”打开” 和 “关闭” 的逻辑会根据使用的平台进行实际实施。

第五个: 关闭日志窗口

// 假设 logWindow 对象已经存在,并包含有 close 方法
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

复制// OCR 部分
let img = screen.screenShotFull();
let ocrres = img.paddleOCR(640, [0, 0, 1, 1]);
printl(ocrres); // 打印 OCR 结果

// 查找含有 "qq" 的文字目标
var qqrect = ocrres.findIncludeText("qq");
if (qqrect) {
    qqrect.hidClick(); // 点击找到的目标
} else {
    printl("没有找到包含 'qq' 的文本"); // 提示未找到
}

// YOLO 部分
// 初始化 yolov5
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) {
        // 无障碍点击
        // res[0].click(); // 如果有检测结果,可以点击第一个
    } else {
        printl("没有检测到目标"); // 提示未检测到
    }
}

// 释放 YOLO
yolo.Close();

OCR(光学字符识别)和 YOLO(You Only Look Once,对象检测算法)来处理图像,查找文本和目标。以下是代码的逐步解释:

1. OCR 部分

let img = screen.screenShotFull(); // 截取整个屏幕
let ocrres = img.paddleOCR(640, [0, 0, 1, 1]); // 使用 PaddleOCR 进行文字识别
printl(ocrres); // 打印 OCR 结果
  • 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 部分

// 初始化 yolov5
var yolo = new yoloV5(); // 创建 YOLO 实例

// 加载插件文件夹里的识别库
var labelPath = project.getResourcesPath() + 'close.txt';
var paramPath = project.getResourcesPath() + 'close.param';
var binPath = project.getResourcesPath() + 'close.bin';
  • new yoloV5():创建一个新的 YOLO 实例,用于对象检测。
  • 加载识别库:通过 getResourcesPath() 方法获取模型文件的路径,并将标签、参数和二进制文件路径分配给 labelPathparamPath 和 binPath 变量。

    // 加载模型
    var model = yolo.loadModel(labelPath, paramPath, binPath, 4, false);

    if (model != null) {

    printl('模型加载失败'); // 如果 model 不为 null,表示加载失败
    

    } 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) {
        // 无障碍点击
        // res[0].click(); // 如果有检测结果,可以点击第一个
    } else {
        printl("没有检测到目标"); // 提示未检测到
    }
    

    }

  • yolo.loadModel(...):加载 YOLO 模型,使用之前准备的标签、参数和二进制文件。
  • if (model != null):检查模型加载是否成功。如果返回的 model 不为 null,则输出”模型加载失败”。
  • screen.screenShotFull():再次截取屏幕进行对象检测。
  • yolo.detectPercent(...):在指定区域内进行对象检测,返回检测结果。
  • printl(res):打印检测结果。
  • if (res != null && res.length > 0):检查检测结果数组是否有内容。
    • 如果存在检测结果,注释部分提到可以点击第一个目标。
    • 如果没有检测到目标,输出”没有检测到目标”的提示信息。

3. 释放资源

// 释放 YOLO
yolo.Close(); // 释放 YOLO 模型的资源
  • yolo.Close():释放 YOLO 模型占用的资源,以清理内存和其他使用。






欢迎光临 B2B网络软件 (http://bbs.niubt.cn/) Powered by Discuz! X3.2