#Android-截图捕获分析
2025-06-04
2 min read
💃5ea1
获取屏幕图片
mediaProjection.createVirtualDisplay(...)
使用了这个方法,创建一个虚拟显示设备,并将屏幕内容投射到该设备上,从而实现屏幕录制的方法:
- 获取屏幕宽高和密度
- 初始化 ImageReader 和 VirtualDisplay,将屏幕内容输出到 ImageReader 的 Surface
- 创建定时任务 captureTask,每 INTERVAL=2000ms 执行一次 captureScreen()
截图保存和回收
此处我采取的逻辑是将截图统一存放再应用包内的一个内部存储里,然后去检测图片数量有没有超出预定的限制,若超出,则全部清空
captureScreen()
- 从 ImageReader 获取 Image 对象,并将其转换成 Bitmap
- 根据 PixelStride 与 RowPadding 创建带填充的 Bitmap,再裁剪为实际图像尺寸的 finalBitmap
- 保存为 screenshot_yyyyMMdd_HHmmss.png 到 App 专属 Pictures 文件夹
文件数超过 MAX_FILES=100 时,自动清空旧文件 - 最后调用 processImageWithOCR(imagePath) 进行后处理
回调处理OCR和AI
使用了安卓的回调机制,在图片处理返回的过程中,直接反射调用ImageQuestionSolver
中的两个子方法fetchBaiduAccessToken
和sendToDeepSeek
,获取两个api的返回结果,log输出
显示下拉横幅
借助振动提升消息的重要度,从而实现横幅通知(只要极短时间的振动即可)