OpenClaw Android Node 相機指令完整攻略|V2514 實測(拍照、錄影、相簿)

OpenClaw Android Node 相機指令完整攻略(V2514 實測)

測試日期:2026-04-19
測試節點:V2514(Vivo V2514, Android 16, SDK 36)
OpenClaw 版本:來源編譯(Java 25, Android SDK 34/36, Gradle 9.3.1)

📋 V2514 可用相機清單

openclaw nodes invoke --node "V2514" --command camera.list
id名稱位置類型
0Back CamerabackbuiltIn
1Front CamerafrontbuiltIn

一、camera.list — 查詢相機清單

指令:

openclaw nodes invoke --node "V2514" --command camera.list

用途: 列出節點所有可用的相機裝置。

回傳格式:

{
  "ok": true,
  "payload": {
    "devices": [
      { "id": "0", "name": "Back Camera", "position": "back", "deviceType": "builtIn" },
      { "id": "1", "name": "Front Camera", "position": "front", "deviceType": "builtIn" }
    ]
  }
}

二、camera.snap — 拍照

指令格式:

openclaw nodes invoke --node "V2514" --command camera.snap --params '{...}'

參數說明

參數類型預設值說明
deviceIdString(自動)CameraX 內部 ID(通常與 camera.list 的 id 不同!)
facingString"front""front""back"
qualityDouble0.95JPEG 品質(0.0 ~ 1.0)
maxWidthInteger1600輸出最大寬度(像素)

⚠️ 重要發現:參數組合的正確用法(V2514 限定)

經過完整測試發現,V2514 上 camera.list 回傳的 id 和 CameraX 內部 deviceId 並非同一個系統。正確參數組合如下:

想要拍的相機正確參數說明
前相機{}{"facing": "front"}預設就是前相機
後相機{"deviceId": "0", "facing": "back"}兩者都要加,缺一不可!

測試結果總覽

測試項目參數輸出尺寸備註
預設(無參數){}1600x2133✅ 前相機
前相機明確指定{"facing": "front"}1600x2133✅ 前相機
後相機(錯誤示範){"facing": "back"}1600x2133❌ 仍是前相機
後相機(錯誤示範){"deviceId": "0"}1600x2133❌ 仍是前相機
後相機(正確){"deviceId": "0", "facing": "back"}1600x2133確實是後相機
高品質輸出{"deviceId": "0", "facing": "back", "quality": 0.99, "maxWidth": 2000}2000x2666✅ 後相機 + 高品質
大尺寸輸出{"maxWidth": 2000}2000x2666前相機大尺寸

完整範例

# 前相機拍照(預設)
openclaw nodes invoke --node "V2514" --command camera.snap --params '{}'

# 前相機(明確指定)
openclaw nodes invoke --node "V2514" --command camera.snap --params '{"facing": "front"}'

# 後相機拍照(正確寫法)
openclaw nodes invoke --node "V2514" --command camera.snap --params '{"deviceId": "0", "facing": "back"}'

# 高品質後相機照片
openclaw nodes invoke --node "V2514" --command camera.snap --params '{"deviceId": "0", "facing": "back", "quality": 0.99}'

# 前相機大圖
openclaw nodes invoke --node "V2514" --command camera.snap --params '{"facing": "front", "maxWidth": 2000}'

三、camera.clip — 錄影

指令格式:

openclaw nodes invoke --node "V2514" --command camera.clip --params '{...}'

參數說明

參數類型預設值說明
deviceIdString(自動)CameraX 內部 ID
facingString"front""front""back"
durationMsInteger3000錄影時長(毫秒),範圍 200~60000
includeAudioBooleantrue是否包含音訊

⚠️ 後相機錄影的正確參數

camera.snap 一樣,必須同時指定 deviceId: "0"facing: "back" 才能正確使用後相機。

測試結果總覽

測試項目參數輸出資訊備註
預設(3秒前相機){}3000ms, hasAudio=true
短片(前相機2秒){"durationMs": 2000}2000ms, hasAudio=true
後相機錄影(正確){"deviceId": "0", "facing": "back", "durationMs": 3000}3000ms, hasAudio=true確實是後相機
前相機5秒(明確指定){"facing": "front", "durationMs": 5000}5000ms, hasAudio=true
前相機無音訊{"facing": "front", "includeAudio": false}3000ms, hasAudio=false

完整範例

# 前相機錄影(預設 3 秒)
openclaw nodes invoke --node "V2514" --command camera.clip --params '{}'

# 前相機錄影 5 秒
openclaw nodes invoke --node "V2514" --command camera.clip --params '{"durationMs": 5000}'

# 前相機錄影(明確指定)
openclaw nodes invoke --node "V2514" --command camera.clip --params '{"facing": "front", "durationMs": 5000}'

# 後相機錄影 3 秒(正確寫法)
openclaw nodes invoke --node "V2514" --command camera.clip --params '{"deviceId": "0", "facing": "back", "durationMs": 3000}'

# 後相機錄影 5 秒
openclaw nodes invoke --node "V2514" --command camera.clip --params '{"deviceId": "0", "facing": "back", "durationMs": 5000}'

# 前相機靜音錄影
openclaw nodes invoke --node "V2514" --command camera.clip --params '{"facing": "front", "includeAudio": false}'

四、photos.latest — 取相簿最新照片

指令格式:

openclaw nodes invoke --node "V2514" --command photos.latest --params '{...}'

參數說明

參數類型預設值說明
limitInteger1欲取回的相片數量(範圍 1~20)
maxWidthInteger1600輸出最大寬度(範圍 240~4096)
qualityDouble0.85JPEG 品質(0.0 ~ 1.0)
⚠️ 注意:photos.latest 是讀取系統相簿中的照片,不是即時拍攝。

測試結果總覽

測試項目參數輸出結果備註
預設(1張原尺寸){}1260x2800, len=285124
取 2 張{"limit": 2}1張(可能相簿僅1張)相簿照片不足
取 3 張(限制寬度){"limit": 3, "maxWidth": 800}3張 630x1400✅ 尺寸縮小

完整範例

# 取得相簿最後 1 張照片(原尺寸)
openclaw nodes invoke --node "V2514" --command photos.latest --params '{}'

# 取得相簿最後 3 張照片
openclaw nodes invoke --node "V2514" --command photos.latest --params '{"limit": 3}'

# 取得最後 5 張照片,限制寬度 800px
openclaw nodes invoke --node "V2514" --command photos.latest --params '{"limit": 5, "maxWidth": 800}'

# 高品質取得
openclaw nodes invoke --node "V2514" --command photos.latest --params '{"limit": 1, "quality": 0.95}'

五、疑難排解 Q&A

Q: camera.list 回傳 id "0" 是後相機,但用 deviceId: "0" 拍出來是前相機?

A: 這是 V2514(Vivo Android 16)上的已知行為。camera.listid 和 CameraX 內部的 deviceId不同的 ID 系統

解決方法: 後相機必須同時指定 deviceId: "0" facing: "back"

{"deviceId": "0", "facing": "back"}

Q: camera.snapcamera.clip 沒有回應?

A: 檢查以下幾點:

  1. 權限設定:在 Gateway 設定中將 camera.snapcamera.clip 加入允許清單:
   openclaw configure
   # 或直接編輯 ~/.openclaw/openclaw.json
  1. App 內設定:確認 OpenClaw App 內「Camera」開關已開啟
  2. Android 權限:確認相機權限已授權

Q: 照片出來是反的或旋轉 90 度?

A: 這是 V2514 前鏡頭的已知現象,輸出寬高比為 1600x2133(筆直拍攝)。後鏡頭輸出為 1600x1200。

Q: 參數 cameraId 可以用嗎?

A: 不行。經查詢原始碼,正確參數名稱是 deviceId(並非 cameraId)。


六、指令速查表

camera.snap(拍照)

需求指令
前相機拍照(預設){"facing": "front"}{}
後相機拍照{"deviceId": "0", "facing": "back"}
高品質前相機{"facing": "front", "quality": 0.99}
大圖前相機{"facing": "front", "maxWidth": 2000}
高品質後相機{"deviceId": "0", "facing": "back", "quality": 0.99}

camera.clip(錄影)

需求指令
前相機3秒(預設){}
前相機5秒{"facing": "front", "durationMs": 5000}
後相機3秒{"deviceId": "0", "facing": "back", "durationMs": 3000}
後相機5秒{"deviceId": "0", "facing": "back", "durationMs": 5000}
前相機無音訊{"facing": "front", "includeAudio": false}

photos.latest(相簿)

需求指令
最新 1 張{}
最新 3 張{"limit": 3}
最新 5 張(縮圖){"limit": 5, "maxWidth": 800}

七、技術背景(源碼分析)

根據 /Users/bbb/openclaw-src/apps/android/app/src/main/java/ai/openclaw/app/node/ 目錄下的原始碼:

  • InvokeCommandRegistry.kt:定義了3個 camera 指令(camera.listcamera.snapcamera.clip)和1個 photos 指令(photos.latest
  • CameraCaptureManager.kt:核心 CameraX 實作,負責解析參數與相機選擇
  • parseDeviceId()(line 317):讀取 deviceId 參數
  • parseFacing()(line 299):讀取 facing 參數("front""back"
  • resolveCameraSelector()(lines 329-341):當 deviceId 為空時使用 facing 參數選擇相機;當 deviceId 有值時則用 CameraX 內部 ID 過濾
  • PhotosHandler.kt:處理 photos.latest 指令,透過 CameraDataSource 存取系統相簿

關鍵發現:deviceId 有值時,facing 參數會被忽略。這導致了 V2514 上需要兩者同時指定才能正確選擇後相機的特殊行為。


文章更新:2026-04-19

留言