概要
思路就是开启手机对通知事件的监听,然后封装了消息的处理函数,通过自定义的数组对象对消息进行匹配,执行相应的自动化操作,比如实现指定app的消息监听、消息转发、消息回复……等等任意操作,所有app的自动回复都是这种技术。
权限设置
1.目标app需要开启通知权限
2.云控app需要开启通知使用权权限
核心代码
下面代码以微信为例,监听消息后可以发送邮件通知或者点击打开回复消息等自动化操作,可以自己 扩展
/* 自定义规则数组
每个规则包含以下属性,也可以自定义其他属性:
matchingPackageName: 待匹配的应用包名。
matchingText: 待匹配的通知文本。
autoClick: 是否自动点击匹配到的通知。
receiveEmail: 接收通知的电子邮件地址。
executeScript: 匹配到通知后需要执行的脚本代码 先用用url编码后再用base64编码,用的时候再解码就可以了。
*/
let rules = [{
"matchingPackageName": "com.tencent.mm",
"matchingText": "我的老家",
"autoClick": true,
"receiveEmail": "11111111111111@qq.com",
"executeScript": $base64.encode(encodeURI(`
console.log("我是规则里面的代码");
`))
}]
let matchingRules = rules ? rules : [];
/* 用于移除所有已经注册的 ‘notification’ 事件的监听器。这可以确保在重新注册新的监听器之前,之前的监听器不会影响到新的通知事件处理逻辑 */
events.removeAllListeners('notification');
/* 用来开启对通知事件的监听。一旦调用了该方法,将会开始监听设备上的所有通知事件,并触发相应的处理函数。 */
events.observeNotification();
/* 是用来注册一个处理函数,该函数会在监听到通知事件时被调用。在这个示例中,function (notification) { ... } 是一个匿名函数,可以在其中编写自定义的通知事件处理逻辑。 */
events.onNotification(function (notification) {
let messageObj = {
"应用包名": notification.getPackageName() || "",
"通知文本": notification.getText() || "",
"通知优先级": notification.priority || 0,
"通知目录": notification.category || "",
"通知时间": new Date(notification.when),
"通知数": notification.number || 0,
"通知摘要": notification.tickerText || ""
}
try {
console.log(messageObj)
/* 遍历定义的规则数组 */
matchingRules.forEach(item => {
item.matchingPackageName = item.matchingPackageName ? item.matchingPackageName : "";
item.matchingText = item.matchingText ? item.matchingText : "";
/* 脚本会通过监听手机端的通知事件来获取到新的通知消息,并与规则进行匹配。如果匹配到规则,根据设置的属性进行相应的操作 */
if ((!item.matchingPackageName || messageObj["应用包名"].indexOf(item.matchingPackageName) !== -1) && (!item.matchingText || (messageObj["通知文本"].indexOf(item.matchingText) !== -1 || messageObj["通知摘要"].indexOf(item.matchingText) !== -1))) {
/* 监听到消息后可以做很多任何事情,比如点击、将消息转发到邮箱或者其他通信工具、执行指定的脚本代码…… */
/* 判断是否要点击 */
if (item.autoClick) {
notification.click();
}
/*发送邮件消息 */
sleep(1000);
if (item.receiveEmail) {
let message = JSON.stringify(messageObj)
item.message = message
item.title = "手机端通知消息";
var titleContent = {
title: item.title,
message: item.message
};
发送邮件(titleContent)
}
/*如果有代码则执行 */
if (item.executeScript) {
/*执行代码 */
执行代码(item.executeScript)
}
/*其他操作任何操作都可以实现 */
}
});
} catch (e) {
console.error(e)
}
});
function 发送邮件(item) {
console.log("这里写发送邮件的代码")
console.log("邮件标题和内容");
console.log(item);
/*此处可以写个发送邮件的函数 我这里就不演示了 */
console.log("邮件推送成功");
}
function 执行代码(msg) {
console.log("这里写执行代码")
console.log(msg)
// 解码 base64 编码
var decodedMessage = $base64.decode(msg);
// 解码 URI 编码
var decodedURI = decodeURI(decodedMessage);
console.log("要执行的代码" + decodedURI)
eval(decodedURI);
console.log("执行成功");
/* 下面我搞一个自动回复*/
var returned = className("android.widget.EditText").findOne(100);
if (returned) {
returned.setText("我是自动回复的内容");
sleep(1000);
var returned发送 = text("发送").className("android.widget.Button").findOne(100);
if (returned发送) {
returned发送.click();
sleep(500);
back();
sleep(500);
home();
} else {
toastLog("未找到符合条件的控件");
}
} else {
toastLog("未找到符合条件的控件");
}
}
/* 移除所有已经注册的 ‘notification’ 事件的监听器 */
/* events.removeAllListeners('notification'); */;
运行测试
可以使用云控系统运行调试消息自动回复,你可以进行二次开发,比如识别到指定内容然后回复对应的内容
所有app都可以用此类方式实现消息自动回复
测试地址:http://smartcloudscript.com