所属 MVP:#275 | 来源:用户 2026-09-14 需求讨论(原话摘要见 #275)
让 Agent 具备把图片写入设备相册并读取相册最新一张的能力,并为采购员提供可走通的授权引导。
android/app/src/main/AndroidManifest.xml 现在没有任何存储或媒体权限,只有 INTERNET / ACCESS_NETWORK_STATE / FOREGROUND_SERVICE / FOREGROUND_SERVICE_DATA_SYNC / WAKE_LOCK / POST_NOTIFICATIONS / REQUEST_INSTALL_PACKAGES。图搜要往相册写图并判断"自己是不是最新一张",这是从零新增一类权限。
android/app/src/main/AndroidManifest.xml
无。可与 #278 并行,建议最先做。
READ_MEDIA_IMAGES
READ_EXTERNAL_STORAGE
maxSdkVersion
ui/AccessibilityReadiness.kt
注意:参考项目 D:\chengma\cmroubao_old 只声明了 READ_EXTERNAL_STORAGE,未声明 READ_MEDIA_IMAGES。在 Android 13+ 上其"相册最新一张"判断只能看见自己写入的文件,若其它 App 刚存入更新的照片会误判。本工单不得照抄该声明。
D:\chengma\cmroubao_old
改动为现有权限引导流程新增一步 + 状态显示,属于现有界面的小范围调整。需提供标注截图或明确复用现有权限引导规范后再实施。
Android 单元测试 + .\scriptserify.ps1 -Component android;真机验证需覆盖至少一台已在用的老设备的升级路径。
.\scriptserify.ps1 -Component android
影响所有现有设备。未授权即图搜不可用,但不得影响现有采集与采购功能。
设备权限要求变化,需更新对应 Wiki 的运行说明章节。
release/283
c80d0c9
main
c14f5f5
go build ./...
go test ./...
npm run build:prod
AndroidManifest.xml 两条声明正确:
AndroidManifest.xml
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
maxSdkVersion="32" 处理正确,避免了本工单提醒的参考项目缺陷。
maxSdkVersion="32"
override fun onCreate(...) { ... requestNotificationPermission() requestMediaPermission()
requestMediaPermission() 在 onCreate 中无条件调用,且 App 内没有任何其它入口可再次发起授权。用户一旦选择拒绝(尤其是「不再询问」),没有任何补救路径,直接违反验收第 3 条。
requestMediaPermission()
onCreate
本工单要求"需提供标注截图或明确复用现有权限引导规范后再实施",未见相关记录。
状态维持待实施。
1d01186
be03972..1d01186
/home/goauto/releases/20260915-1d01186
65e404c4721d592a
systemctl is-active goauto.service
active
127.0.0.1:8010
collection_task
shopee_product
外部入口验证:
GET /
GET /api/admin/v1/collection-tasks
{"code":401,"msg":"cookie token is empty"}
POST /api/admin/v1/collection-tasks/image-search/batch
{"code":401,...}
最后两行是关键对照:图搜接口返回 401 而非 404,证明新路由已注册。
回退方式:把 current 软链切回 20260914-be03972-r2 后重启。两条迁移均为加列与放宽约束,不阻碍回退到旧二进制。
current
20260914-be03972-r2
提交:e01fcd9、c1eb23e。
e01fcd9
c1eb23e
MediaPermissionPolicy
MediaPermissionReadiness
AccessibilityReadinessDetector
current(context)
requiredPermission()
appDetailsSettingsIntent()
ui/AgentStatusFragment.kt
MainActivity.requestMediaPermission()
MediaPermissionPolicy.requiredPermission()
Android testDebugUnitTest 与 assembleDebug 通过。
testDebugUnitTest
assembleDebug
AgentSettingsFragment.kt
代码已上线,真机验证未做,保持待验收。
No dependencies set.
The note is not visible to the blocked user.
目标
让 Agent 具备把图片写入设备相册并读取相册最新一张的能力,并为采购员提供可走通的授权引导。
当前事实
android/app/src/main/AndroidManifest.xml现在没有任何存储或媒体权限,只有 INTERNET / ACCESS_NETWORK_STATE / FOREGROUND_SERVICE / FOREGROUND_SERVICE_DATA_SYNC / WAKE_LOCK / POST_NOTIFICATIONS / REQUEST_INSTALL_PACKAGES。图搜要往相册写图并判断"自己是不是最新一张",这是从零新增一类权限。前置依赖
无。可与 #278 并行,建议最先做。
方案
READ_MEDIA_IMAGES;Android 10–12READ_EXTERNAL_STORAGE(maxSdkVersion限定)。写入自己的 MediaStore 记录不需要权限,读取"全相册最新 jpeg"需要。ui/AccessibilityReadiness.kt现有的权限引导流程,增加一步。设计证据
改动为现有权限引导流程新增一步 + 状态显示,属于现有界面的小范围调整。需提供标注截图或明确复用现有权限引导规范后再实施。
验收
验证
Android 单元测试 +
.\scriptserify.ps1 -Component android;真机验证需覆盖至少一台已在用的老设备的升级路径。风险
影响所有现有设备。未授权即图搜不可用,但不得影响现有采集与采购功能。
文档影响
设备权限要求变化,需更新对应 Wiki 的运行说明章节。
核对范围与方法(2026-09-15)
release/283@c80d0c9;基线main@c14f5f5。go build ./...、go test ./...(server)、npm run build:prod(web)、逐条对照工单验收项读取 diff。结论:部分完成,不达标
已完成
AndroidManifest.xml两条声明正确:maxSdkVersion="32"处理正确,避免了本工单提醒的参考项目缺陷。未完成的验收项
ui/AccessibilityReadiness.kt现有权限引导流程(方案第 2 条)实现缺陷
requestMediaPermission()在onCreate中无条件调用,且 App 内没有任何其它入口可再次发起授权。用户一旦选择拒绝(尤其是「不再询问」),没有任何补救路径,直接违反验收第 3 条。设计证据
本工单要求"需提供标注截图或明确复用现有权限引导规范后再实施",未见相关记录。
状态维持待实施。
上线信息(共用)
1d01186,已推送be03972..1d01186到main。/home/goauto/releases/20260915-1d01186,二进制 SHA-256 前缀65e404c4721d592a(本地与服务器一致)。systemctl is-active goauto.service=active,监听127.0.0.1:8010。collection_task222 行、shopee_product26901 行,逐一相符。外部入口验证:
GET /GET /api/admin/v1/collection-tasks{"code":401,"msg":"cookie token is empty"}POST /api/admin/v1/collection-tasks/image-search/batch{"code":401,...}最后两行是关键对照:图搜接口返回 401 而非 404,证明新路由已注册。
回退方式:把
current软链切回20260914-be03972-r2后重启。两条迁移均为加列与放宽约束,不阻碍回退到旧二进制。实施
提交:
e01fcd9、c1eb23e。AndroidManifest.xml声明READ_MEDIA_IMAGES与READ_EXTERNAL_STORAGE(maxSdkVersion="32")。ui/AccessibilityReadiness.kt新增MediaPermissionPolicy/MediaPermissionReadiness,沿用既有AccessibilityReadinessDetector模式:current(context)供图搜执行器只读查询,requiredPermission(),appDetailsSettingsIntent()处理「不再询问」。ui/AgentStatusFragment.kt新增权限状态卡片与「重新授权」按钮。MainActivity.requestMediaPermission()改为委托MediaPermissionPolicy.requiredPermission(),不再是唯一入口。验证
Android
testDebugUnitTest与assembleDebug通过。未验证
AgentSettingsFragment.kt,权限状态只做在状态页(工单允许二选一)。状态
代码已上线,真机验证未做,保持待验收。