问题描述
在 v6.7.0 版本中,与 v6.6.4 相比,发现使用跨文件 require 或在不同线程间独立调用 OCR,几乎每次进行 OCR 操作时都会弹窗请求截图权限授权(MediaProjection 截图),而非如旧版本仅首次授权后可复用。类似脚本在 v6.6.4 版本只需授权一次,之后多线程/多次使用不会反复弹窗。
复现方式
- 编写脚本,主线程申请截图权限后,在子线程或通过 require 加载的文件中独立调用 OCR,例如:
requestScreenCapture(); // 或 images.requestScreenCapture()
threads.start(() => {
let img = images.captureScreen();
let result = ocr.paddle.detect(img);
});
或多次 require 不同脚本文件后分别进行 OCR。
2. 在 v6.7.0 下几乎每次都会弹窗重新请求截图权限,而 v6.6.4 仅首次弹窗。
期望结果
截图权限(MediaProjection)能够全局复用,像旧版本那样只需授权一次,后续不同线程、不同 require 文件及多次 OCR 均不应反复弹窗。
可能原因分析
- v6.7.0 为适配较新安卓版本重构了截图/权限流程(见
ScreenCaptureRequester 及 ScreenCapturer),可能在多线程和跨文件场景下未正确全局复用 MediaProjection 实例或相关服务,导致权限管理/前台服务流程频繁重新请求。
- 旧版(v6.6.4)结构能较好地实现全局权限的单例复用。
建议修复方向
- 检查
Images.java 与 ScreenCaptureRequester.java 的实例管理和权限复用策略,确保在全局范围(单 app 进程)内多线程/多文件能够共用同一个截图/MediaProjection 授权及相关实例。
- 或在文档中说明新版无法做到全局复用,建议开发者在主线程全局申请权限后分发使用。
附注
建议优先定位 v6.6.4 和 v6.7.0 在截图授权和OCR模块实例/生命周期管理代码的差异。
(本issiue由Copilot 帮助整理)
问题描述
在 v6.7.0 版本中,与 v6.6.4 相比,发现使用跨文件 require 或在不同线程间独立调用 OCR,几乎每次进行 OCR 操作时都会弹窗请求截图权限授权(MediaProjection 截图),而非如旧版本仅首次授权后可复用。类似脚本在 v6.6.4 版本只需授权一次,之后多线程/多次使用不会反复弹窗。
复现方式
或多次 require 不同脚本文件后分别进行 OCR。
2. 在 v6.7.0 下几乎每次都会弹窗重新请求截图权限,而 v6.6.4 仅首次弹窗。
期望结果
截图权限(MediaProjection)能够全局复用,像旧版本那样只需授权一次,后续不同线程、不同 require 文件及多次 OCR 均不应反复弹窗。
可能原因分析
ScreenCaptureRequester及ScreenCapturer),可能在多线程和跨文件场景下未正确全局复用 MediaProjection 实例或相关服务,导致权限管理/前台服务流程频繁重新请求。建议修复方向
Images.java与ScreenCaptureRequester.java的实例管理和权限复用策略,确保在全局范围(单 app 进程)内多线程/多文件能够共用同一个截图/MediaProjection 授权及相关实例。附注
建议优先定位 v6.6.4 和 v6.7.0 在截图授权和OCR模块实例/生命周期管理代码的差异。
(本issiue由Copilot 帮助整理)