// vx版本8.0.23(其他版本也可尝试),测试手机为红米note10 pro,autojsPro版本8.8.22-common
// 本代码只用于学习交流,严禁用于违法违规途径,后果自负
//前期在不同机型上运行,发现indexOf判断通知消息是否含有相关文字时报错,所以设置了indexOf和match两个方法供大家选择
//本人autojs刚入门,代码写得不好多多包涵,已基本可以运行,但还存在bug,可以自行测试修改
//UI主体
"ui";
ui.layout(
<vertical>
<appbar>
<toolbar id="toolbar" title="某信红包助手" />
</appbar>
<vertical>
//双大括号代表表达式,里面的内容通过计算赋给checked
//autojs!=null,代表无障碍已经开启,返回true
<text id="tiXing" text="请打开下列三个权限,使用时请设置屏幕长亮" textColor = "red"/>
<linear>
<Switch id="autoService" text="无障碍服务:" checked="{{auto.service != null}}" w="auto" />
</linear>
<linear>
<Switch id="notificationReadPermissions" text="通知读取权限:" checked="{{notificationListenerEnable() != null}}" w="auto" />
</linear>
<linear>
<Switch id="floatyPermission" text="悬浮窗权限" checked="{{floatyCheckPermission() != false}}" w="auto" />
</linear>
<checkbox id="xuanFuChuang" text="日志窗" checked="true" />
<radiogroup>
<radio text="match方法" id="matchMethod" checked="true" />
<radio text="indexOf方法" />
</radiogroup>
<text text = "更多分享请关注微信gzh:咸散人士" textColor = "red"/>
<text text = "已基本能运行,但存在的bug可自行修改" textColor = "blue"/>
</vertical>
<button id="bRunMyApp" text="开始运行" layout_gravity="center" w="100" />
</vertical>
);
//解除autojspro无法在某些大厂app运行代码(适用8.0+)
function 解除限制() {
importClass(com.stardust.autojs.core.accessibility.AccessibilityBridge.WindowFilter);
let bridge = runtime.accessibilityBridge;
let bridgeField = runtime.getClass().getDeclaredField("accessibilityBridge");
let configField = bridgeField.getType().getDeclaredField("mConfig");
configField.setAccessible(true);
configField.set(bridge, configField.getType().newInstance());
bridge.setWindowFilter(new JavaAdapter(AccessibilityBridge$WindowFilter, {
filter: function (info) {
return true;
}
}));
}
解除限制();
//显示在其他应用的上层
ui.floatyPermission.on("check", function (checked) {
// log("允许显示在其他应用上层:" + floatyCheckPermission());
// log(checked + "111111");
if (checked && floatyCheckPermission() == false) {//checked && floatyCheckPermission() == false,如果ui界面的悬浮窗权限开关已开启但是悬浮窗权限未开启,则跳转到悬浮窗权限设置界面
//这串代码的实现原理暂时不了解
importClass(android.content.Intent);
importClass(android.net.Uri);
importClass(android.provider.Settings);
var intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + context.getPackageName()));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
app.startActivity(intent);
} else if (!checked && floatyCheckPermission() == true) {//!checked && floatyCheckPermission() == true
//因为暂时不知道如何用代码关闭悬浮窗权限,所以只能跳转页面让用户自己关
importClass(android.content.Intent);
importClass(android.net.Uri);
importClass(android.provider.Settings);
var intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + context.getPackageName()));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
app.startActivity(intent);
}
})
ui.autoService.on("check", function (checked) {
//用户勾选无障碍服务的选项时,跳转到页面让用户去开启
// log(checked + "+++++");
// log(auto.service);
if (checked && auto.service == null) {//checked && auto.service == null,如果ui界面的无障碍开关已开启但是无障碍服务未开启,则跳转到无障碍设置界面
app.startActivity({
action: "android.settings.ACCESSIBILITY_SETTINGS"
});
} else if (!checked && auto.service != null) {//!checked && auto.service != null,如果ui界面的无障碍开关未开启但是无障碍服务已开启,则将无障碍服务关闭
auto.service.disableSelf();
}
// log(checked + "-----");
})
ui.notificationReadPermissions.on("check", function (checked) {
// log(checked + "-----");
if (checked && notificationListenerEnable() == null) {//checked && notificationListenerEnable() == null,如果ui界面的通知读取权限开关已开启但是通知读取权限未开启,则跳转到通知读取权限设置界面
app.startActivity({
action: "android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS",
});
} else if (!checked && notificationListenerEnable() != null) {//!checked && notificationListenerEnable() != null
//因为暂时不知道如何用代码关闭通知读取权限,所以只能跳转页面让用户自己关
app.startActivity({
action: "android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS",
});
}
})
//监听当用户回到本界面时,resume事件会被触发,保持权限与开关的状态同步
ui.emitter.on("resume", function () {
//此时根据无障碍服务的开启情况,同步开关的状态
ui.autoService.checked = auto.service != null;
ui.notificationReadPermissions.checked = notificationListenerEnable() != null;
ui.floatyPermission.checked = floatyCheckPermission() != false;
})
ui.bRunMyApp.on("click", function () {
// log(ui.autoService.checked);
// log(ui.notificationReadPermissions.checked);
if ((ui.autoService.checked && auto.service != null) && (ui.notificationReadPermissions.checked && notificationListenerEnable() != null) && (ui.floatyPermission.checked && floatyCheckPermission() != false)) {
home();
threads.start(function () {
toastLog("运行中...");
悬浮窗_权限()
events.observeNotification();
events.onNotification(function (notification) {
var myText = notification.getText();
var myPackageName = notification.getPackageName();
// log(myText);
// log(myPackageName);
// log("监听到的消息内容是否包含 [微信红包]:" + myText.indexOf("[微信红包]") == -1);//监听到的消息内容是否包含[微信红包],-1为不包含
//如果监听到的消息内容中包含[微信红包],而且发消息的app包名是微信,则点击消息
if (ui.matchMethod.checked == true) {
if (myText.match("[微信红包]") != null && myPackageName == "com.tencent.mm") {
notification.click();
id("com.tencent.mm:id/by2").waitFor();//等待微信右上角三点出现,判断已经跳转到微信聊天窗口
// log(className("android.widgetFrameLayout").id("com.tencent.mm:id/b8g").find());
qiangHongBao();
}
} else {
if (myText.indexOf("[微信红包]") != -1 && myPackageName == "com.tencent.mm") {
notification.click();
id("com.tencent.mm:id/by2").waitFor();//等待微信右上角三点出现,判断已经跳转到微信聊天窗口
// log(className("android.widgetFrameLayout").id("com.tencent.mm:id/b8g").find());
qiangHongBao();
}
}
});
})
} else {
toast("请同时开启无障碍服务、通知读取权限和悬浮窗权限");
}
});
var myTime = 100;
var 微信红包 = {
"微信红包": [["className = android.widget.TextView", "text = 微信红包"], ["WXHB", ".parent().parent().parent()", myTime]]
}
var 开 = {
"开": [["className = android.widget.Button", "id = com.tencent.mm:id/gix"], ["KD", "", myTime]]
}
var 返回按钮 = {
"返回按钮": [["className = android.widget.ImageView", "id = com.tencent.mm:id/k6t"], ["KD", "", myTime]]
}
function 悬浮窗_权限() {
if (ui.xuanFuChuang.checked) {
console.show();
sleep(1000);
console.setPosition(0, 0);
console.setSize(450, 500);
}
}
function qiangHongBao() {
var results = 控件_查找_find(微信红包["微信红包"][0]);
// log("页面上有多少个红包:" + results.size());
for (var Num = 0; Num < results.length; Num++) {
if (results[Num].parent().parent().parent().find(textStartsWith("已")).empty()) {
// log("还有红包未领取");
results[Num].parent().parent().parent().click();
while (true) {
// log("正在开红包");
控件_查找完点击_findOnce(开["开"][0], 开["开"][1][1], 开["开"][1][2]);
控件_查找完点击_findOnce(返回按钮["返回按钮"][0], 返回按钮["返回按钮"][1][1], 返回按钮["返回按钮"][1][2]);
if (className("android.widget.LinearLayout").id("com.tencent.mm:id/by2").exists()) {
// log("已经打开第一个红包");
break;
}
}
}
}
home();
toastLog("返回桌面...");
}
function 控件_查找_find(inputArr) {//clickOrSearch,
var myStr = "";
for (var Num = 0; Num < inputArr.length; Num++) {
myStr = myStr + String.replace(inputArr[Num], " = ", "('") + "').";
}
// log(myStr + "findOnce()");
return eval(myStr + "find()");
}
function 控件_点击_find(kongJian, cengShu, shiJian) {
if (kongJian.nonEmpty()) {
for (Num = 0; Num < kongJian.length; Num++) {
if (kongJian[Num]) {
// log(eval("kongJian"));
eval("kongJian[Num]" + cengShu + ".click();");
sleep(shiJian);
back();
sleep(2000);
}
}
} else {
// log("没有找到控件");
}
}
function 控件_查找_findOnce(inputArr) {//clickOrSearch,
var myStr = "";
for (var Num = 0; Num < inputArr.length; Num++) {
myStr = myStr + String.replace(inputArr[Num], " = ", "('") + "').";
}
// log(myStr + "findOnce()");
return eval(myStr + "findOnce()");
}
function 控件_点击_finOnce(kongJian, cengShu, shiJian) {
if (kongJian) {
// log(eval("kongJian"));
eval("kongJian" + cengShu + ".click();");
sleep(shiJian);
}
}
function 控件_查找完点击_findOnce(inputArr, cengShu, shiJian) {//clickOrSearch,
var myStr = "";
for (var Num = 0; Num < inputArr.length; Num++) {
myStr = myStr + String.replace(inputArr[Num], " = ", "('") + "').";
}
// log(myStr + "findOnce()");
var kongJian = eval(myStr + "findOnce()");
if (kongJian) {
// log(eval("kongJian"));
eval("kongJian" + cengShu + ".click();");
sleep(shiJian);
} else {
// log("没有找到")
}
}
function notificationListenerEnable() {
let packageName = context.getPackageName();//获取app的包名
// log(packageName);
let data = android.provider.Settings.Secure.getString(context.getContentResolver(), "enabled_notification_listeners");//判断是否打开通知权限,有打开返回含app包名的对象
// log(typeof (data));
let enable = data.indexOf(packageName);
// log(enable);
if (enable != -1) {
// log("已经打开通知权限");
return data;
} else {
return null;
}
}
function floatyCheckPermission() {
importClass(android.provider.Settings);
return Settings.canDrawOverlays(context.getApplicationContext());
};
autojs微信红包助手代码,供大家参考
最新推荐文章于 2024-05-14 15:27:28 发布