回答
要实现 requestScreenCapture() 的自动权限同意并适配多个系统(如 MIUI、EMUI、ColorOS 等),同时处理“屏幕共享拦截”或截图确认弹窗,可以通过启动一个后台监控线程,在请求截图权限后自动识别并点击“允许”按钮。
由于不同厂商系统的弹窗标题、控件 ID 和布局结构不同,需要针对性地编写检测逻辑。以下是一个通用且兼容性强的解决方案:
// 文档地址 https://docs.hamibot.com/
// 启动后台线程监控截图权限弹窗
threads.start(function () {
const check = function () {
try {
var activity = currentActivity().toLowerCase();
// ====================== MIUI (Xiaomi) ======================
if (activity.indexOf('permission') !== -1) {
if (id('com.android.systemui:id/dialog_title').textContains('Hamibot').exists()) {
var btn = id('android:id/button1').findOnce();
if (btn && btn.clickable()) {
btn.click();
log('MIUI: 已点击【允许】');
return;
}
}
}
// ====================== EMUI (Huawei) ======================
if (id('android:id/alertTitle').textContains('屏幕截图').exists() ||
text('屏幕投影').exists() ||
text('屏幕共享').exists()) {
click('允许');
click('开始共享');
click('立即开始');
log('EMUI: 尝试点击共享允许');
return;
}
// ====================== ColorOS (OPPO/OnePlus) ======================
if (textMatches(/(屏幕共享|屏幕录制|投屏)/).exists()) {
click('允许');
click('立即开始');
click('开始录制');
log('ColorOS: 尝试点击允许');
return;
}
// ====================== Vivo Funtouch OS ======================
if (textContains('请求截屏').exists() || textContains('是否允许').exists()) {
click('允许');
click('确定');
log('Vivo: 尝试点击允许');
return;
}
// ====================== Samsung One UI ======================
if (textContains('screen capture').exists() && textContains('allow').exists()) {
click('ALLOW');
log('Samsung: 允许截图');
return;
}
// ====================== Flyme (Meizu) ======================
if (textContains('截屏提醒').exists()) {
click('允许');
log('Flyme: 允许截屏');
return;
}
// 如果未匹配到任何弹窗,则 500ms 后继续检查
setTimeout(check, 500);
} catch (e) {
log('监控线程异常:', e.message);
setTimeout(check, 500); // 出错后重试
}
};
check(); // 开始首次检查
});
// 请求截图权限
if (!requestScreenCapture()) {
toastLog('请求截图权限失败,可能被系统拦截');
hamibot.exit();
}
// 关闭监控线程(确保后续操作不会重复触发)
threads.shutDownAll();
// 延迟一点时间,确保弹窗完全消失后再执行 captureScreen
sleep(1500);
// 此处开始你的主脚本逻辑
var img = captureScreen();
toastLog('截图成功,开始图像处理...');
✅ 功能说明
- 多系统适配:覆盖小米(MIUI)、华为(EMUI)、OPPO(ColorOS)、vivo、三星、魅族等主流国产定制系统。
- 自动点击“允许”:通过控件 ID、文本内容等方式定位按钮,并模拟点击。
- 容错与稳定性增强:
- 使用
try-catch防止监控线程崩溃。 - 多次尝试点击常见按钮文本(如“立即开始”、“允许”)。
- 使用
- 及时关闭线程:调用
threads.shutDownAll()防止残留线程影响性能或其他脚本。
🛠️ 调试建议
- 使用 Hamibot 设备调试工具(Inspector) 查看当前弹窗的真实控件结构。
- 在
check()函数中添加toastLog(currentActivity())或log(device.brand, device.model)来判断设备品牌和当前界面。 - 若点击无效,可改用坐标点击(不推荐长期使用):
click(device.width / 2, device.height * 0.8);
⚠️ 注意事项
- 某
ℹ️ 本回答由 AI 生成,内容仅供参考