AutoJs6 icon indicating copy to clipboard operation
AutoJs6 copied to clipboard

无障碍监听当前包名活动名

Open FastMushroom opened this issue 9 months ago • 6 comments

目前有些脚本,想在打开应用时自动启用,离开应用时自动暂停,循环检测当前界面好像会很耗电,想通过无障碍监听实现

FastMushroom avatar Mar 23 '25 11:03 FastMushroom

是的, 无障碍服务可以监听窗口变动.

例如, 窗口状态改变 (TYPE_WINDOW_STATE_CHANGED) 事件发生时, 可以在回调中获取当前窗口的包名等信息.

示例代码:

auto();

auto.registerEvent("WINDOW_STATE_CHANGED", function (event) {
    let packageName = event.packageName;
    let className = event.className;
    console.log(`当前窗口包名: ${packageName}, 活动名: ${className}`);
});

events.on('exit', function () {
    auto.removeEvent("WINDOW_STATE_CHANGED");
});

setInterval(function () {
    // Nothing to do here, just keep the script running.
}, 1000);

SuperMonster003 avatar Apr 12 '25 14:04 SuperMonster003

@SuperMonster003 太感谢大佬的指导了!原来现有功能就能实现,一直在期待这个🌹🌹

FastMushroom avatar Apr 12 '25 17:04 FastMushroom

不客气.

顺便说一下, 上述无障碍服务事件监听功能, 是由 little-alei 于 2023 年 6 月 11 日 提交的 PR 引入的. 特此感谢.

如有其他问题, 欢迎继续反馈.

SuperMonster003 avatar Apr 13 '25 06:04 SuperMonster003

@SuperMonster003 大佬,怎么捐赠?autojs6用了好久,才想起来没捐赠过,上GitHub才看到公告,突然感觉愧疚了💔

FastMushroom avatar Jul 09 '25 11:07 FastMushroom

~~目前 AutoJs6 尚无捐赠渠道.~~ ~~如确有需求, 可在 Ant-Forest 项目 README.md 中的 打赏 (Tip) 小节提及的方式进行操作.~~

AutoJs6 项目于 2025/07/28 增加了 赞助者按钮 (Sponsor Button), 项目主页可以看到一个 Sponsor 按钮, 点击后可以看到赞助方式 (如 Ko-fi, 微信, 支付宝).


PS: 很高兴获得来自用户的支持. AutoJs6 项目建立的初衷, 是希望延续 Auto.js 4.x 开源项目的精神, 让更多像我自身一样的开发者及用户从开源项目中受益. 开发 AutoJs6 对我来说, 能站在巨人的肩膀上, 一边学习一边将自己无形的思维甚至情绪转换为有形的代码表现出来, 这样的表达, 本身就是一种享受. 如果同时还能让他人受益甚至得到支持鼓励, 对于开发者来说, 便是最厚重的礼物了. 当然一些项目相关的 bug 反馈, 建议, 甚至是使用心得, 也都是非常重要, 非常珍贵的.

SuperMonster003 avatar Jul 25 '25 04:07 SuperMonster003

@SuperMonster003 大佬,启动新脚本 会把监听脚本的监听服务移除,怎么办🙏

( 我将上面的监听脚本小改,将监听的包名类名存入storage,加了点判断,解决了从后台进入应用时currentPackage()最后记录的包名是桌面启动器的情况 但是,启动任意新脚本,监听脚本的监听就被移除了,脚本还在运行 怎么办 )

代码:

console.show()


auto();
var NewCurrent = storages.create("currentPA")


auto.registerEvent("WINDOW_STATE_CHANGED", function (event) {
    
    let time = new Date().getTime();
    let packageName = event.packageName;
    let className = event.className;
    
    if(packageName != "" &&(packageName != "com.miui.home"||time - NewCurrent.get('time')>=900)){
        NewCurrent.put( 'time', new Date().getTime());
          NewCurrent.put( 'packageName', packageName);
          NewCurrent.put('className', className);
          console.log("\n\n包:" + packageName + "\n类:" + className + "\n");
        }else{}
    
});


events.on('exit', function () {
    auto.removeEvent("WINDOW_STATE_CHANGED");
    toastLog("退出监听")
});



setInterval(function () {
    // Nothing to do here, just keep the script running.
    
}, 1000);

FastMushroom avatar Sep 07 '25 18:09 FastMushroom