FGA 截屏权限(MediaProjection):让 FGA 能"看到"游戏画面
为什么需要截屏权限
FGA 的自动化流程是:截屏 → 图像识别 → 执行点击/滑动 → 再截屏 → 再识别 → …… 循环往复。
如果不能截屏,FGA 就不知道当前游戏画面是什么(战斗中?菜单?助战选择?),也就无法决定下一步该点哪里。所以截屏是 FGA 一切自动化的起点。
FGA 的两种截屏方式
| 方式 | 使用场景 | 速度 | 权限需求 |
|---|---|---|---|
| MediaProjection 截屏 | 默认方式,所有设备 | 略慢(50~100ms/帧) | 需要用户每次启动服务时手动确认 |
| Root 截屏 | 可选,仅 root 设备 | 更快(10~30ms/帧) | 一次性授权,无需每次确认 |
为什么默认用 MediaProjection
因为 MediaProjection 是 Android 官方 API,不需要 root,几乎所有设备都支持。Root 截屏虽然更快,但覆盖的用户群体少很多,所以 FGA 默认用 MediaProjection。
MediaProjection 截屏的工作原理
MediaProjection 是 Android 5.0 引入的 API,主要用于屏幕录制。FGA 巧妙地复用了它:
- 用户授权后,FGA 创建一个虚拟显示器(VirtualDisplay)
- 虚拟显示器捕获屏幕内容到 ImageReader 缓冲区
- FGA 从缓冲区获取一帧图像
- 用 OpenCV 处理这帧图像(灰度化、缩放、裁剪到游戏区域)
- 图像匹配,识别游戏状态
- 执行相应的自动化操作
权限确认的时机
在 首次启动服务时 需要用户手动确认一次 MediaProjection 权限:
- 打开 FGA 主界面
- 点击"启动服务"按钮
- 系统弹出"开始截取屏幕"对话框
- 点击"立即开始"授权
不同 Android 版本的行为差异
| Android 版本 | Token 缓存 | 说明 |
|---|---|---|
| 13 及以前 | 可以缓存 | 第一次授权后,后续启动服务不需要再次确认 |
| 14+ | 不能缓存 | Google 在 Android 14 上强制 MediaProjection Token 不能跨会话复用,每次启动服务都需要重新确认 |
这是 Android 14 的安全改进,不是 FGA 的 bug。如果你用 Android 14+,每次启动服务都要点一下"立即开始",这是正常的。
截屏失败的常见原因
权限 token 失效
MediaProjection 的 token 有时会自动失效:
- 重启手机后
- FGA 应用被系统杀死后又重新打开
- Android 14+ 每次启动服务都会失效(正常现象)
解决:停止 FGA 服务 → 重新启动服务 → 在权限对话框点"立即开始"。
虚拟显示器创建失败
某些 ROM 可能限制了应用创建虚拟显示器的权限。
解决:
- 重启手机后重试
- 确认没有其他录屏应用(如投屏、录屏)正在占用 MediaProjection
- 关闭 FGA 的电池优化
截黑屏
少数设备(尤其是分辨率特别高的设备)可能出现截黑屏的情况。
解决:
- 检查 FGA 设置里的"游戏区域偏移"是否正确
- 关闭游戏的"安全屏遮罩"功能(有些游戏会防止被截屏)
- 在 FGA 的高级设置里尝试切换 root 截屏模式(如果设备已 root)
截黑屏安全问题
有些游戏会提供"防止截屏/录屏"的安全功能,在这些页面截屏会得到黑屏或提示。FGA 对这种情况的处理:
- 如果黑屏出现在 FGO 的非游戏画面(如启动加载),FGA 会跳过这些帧
- 如果黑屏出现在战斗中,说明游戏更新了防截屏机制,需要等 FGA 适配新版本
Root 截屏模式
如果你的设备已 root,可以在 FGA 设置里切换到 root 截屏模式:
- 打开 FGA → 设置 → 高级设置
- 找到"截屏方式"选项
- 选择"Root Screenshot"
- FGA 会请求 root 权限并验证
Root 截屏的优点:
- 速度更快,响应更灵敏
- 不需要每次启动都手动确认权限
- 不受 Android 版本的 MediaProjection token 限制
缺点:
- 需要 root 设备
- 覆盖的用户群体少
继续阅读
所有权限都配置完成后,就可以正式启动 FGA 服务了:
- 启动服务:启动服务,在 FGO 里看到悬浮按钮,开始第一次自动化