CameraManager.OpenCamera 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
| 名稱 | Description |
|---|---|
| OpenCamera(String, IExecutor, CameraDevice+StateCallback) |
用給定的 ID 開啟攝影機連線。 |
| OpenCamera(String, CameraDevice+StateCallback, Handler) |
用給定的 ID 開啟攝影機連線。 |
OpenCamera(String, IExecutor, CameraDevice+StateCallback)
用給定的 ID 開啟攝影機連線。
[Android.Runtime.Register("openCamera", "(Ljava/lang/String;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraDevice$StateCallback;)V", "", ApiSince=28)]
[Android.Runtime.RequiresPermission("android.permission.CAMERA")]
public void OpenCamera(string cameraId, Java.Util.Concurrent.IExecutor executor, Android.Hardware.Camera2.CameraDevice.StateCallback callback);
[<Android.Runtime.Register("openCamera", "(Ljava/lang/String;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraDevice$StateCallback;)V", "", ApiSince=28)>]
[<Android.Runtime.RequiresPermission("android.permission.CAMERA")>]
member this.OpenCamera : string * Java.Util.Concurrent.IExecutor * Android.Hardware.Camera2.CameraDevice.StateCallback -> unit
參數
- cameraId
- String
開啟相機裝置的唯一識別碼。 這個值不可能為零值。
- executor
- IExecutor
執行者,將用於呼叫回撥時使用。 這個值不可能為零值。 回調與監聽事件透過此執行器派遣,提供簡便控制使用執行緒的方式。 要透過應用程式的主執行緒派發事件,可以使用 Context.getMainExecutor()。 否則,提供一個執行者,將執行者派遣到適當的執行緒。
- callback
- CameraDevice.StateCallback
當相機開啟時會呼叫回調。 這個值不可能為零值。
- 屬性
備註
用給定的 ID 開啟攝影機連線。
此方法的行為與 openCamera(String, StateCallback, Handler) 相似,但其參數是 Executor 而非 Handler。
請注意,通常回調通常會由執行者在單一執行緒中派遣。 若執行器使用兩個或以上執行緒來派遣回調,客戶端必須確保同步正確,且必須能處理可能不同的回調順序。 需要 Manifest.permission.CAMERA
Android 參考資料。android.hardware.camera2.CameraManager.openCamera
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
適用於
OpenCamera(String, CameraDevice+StateCallback, Handler)
用給定的 ID 開啟攝影機連線。
[Android.Runtime.Register("openCamera", "(Ljava/lang/String;Landroid/hardware/camera2/CameraDevice$StateCallback;Landroid/os/Handler;)V", "")]
[Android.Runtime.RequiresPermission("android.permission.CAMERA")]
public void OpenCamera(string cameraId, Android.Hardware.Camera2.CameraDevice.StateCallback callback, Android.OS.Handler? handler);
[<Android.Runtime.Register("openCamera", "(Ljava/lang/String;Landroid/hardware/camera2/CameraDevice$StateCallback;Landroid/os/Handler;)V", "")>]
[<Android.Runtime.RequiresPermission("android.permission.CAMERA")>]
member this.OpenCamera : string * Android.Hardware.Camera2.CameraDevice.StateCallback * Android.OS.Handler -> unit
參數
- cameraId
- String
開啟攝影機裝置的唯一識別碼
- callback
- CameraDevice.StateCallback
當相機開啟時會呼叫回調
- 屬性
例外狀況
如果攝影機因裝置政策被停用、已斷線,或被更高優先權的攝影機 API 用戶端使用。
如果 cameraID 或回撥為空,或 cameraID 與任何目前或先前可用的相機裝置不相符。
如果應用程式沒有權限存取攝影機
備註
用給定的 ID 開啟攝影機連線。
使用 getCameraIdList() 來取得可用的攝影機裝置清單。 請注意,即使有 ID 顯示,若裝置在 getCameraIdList() 與 openCamera(String, StateCallback, Handler) 呼叫間斷線,或是有更高優先權的相機 API 用戶端開始使用該攝影機裝置,開啟也可能失敗。
截至 API 層級 23,若裝置因被較低優先權的背景攝影機 API 用戶端使用而呼叫 AvailabilityCallback.onCameraUnavailable(String) 回撥,當呼叫的攝影機 API 用戶端優先權高於目前使用該裝置的攝影機 API 用戶端時,仍可透過呼叫此方法開啟。 一般來說,如果頂端的前景活動正在你的應用程式程序中執行,當存取相機時,程序會被賦予最高優先權,即使相機裝置被其他相機 API 用戶端使用,此方法也能成功。 任何以這種方式失去對攝影機控制權的低優先權應用程式,都會收到 CameraDevice.StateCallback.onDisconnected(CameraDevice) 回撥。 在同一應用程式中重複開啟同一個相機 ID 時,也會從第一次開啟呼叫起觸發 CameraDevice.StateCallback.onDisconnected(CameraDevice) 回調,所有進行中的任務都會被中止。
一旦攝影機成功開啟,CameraDevice.StateCallback.onOpened 將會隨著新開啟的 CameraDevice 一起被呼叫。 接著,可以透過呼叫 CameraDevice.createCaptureSession 和 CameraDevice.createCaptureRequest 來設定攝影機裝置進行運作
在 API 等級 30 之前,當應用程式嘗試開啟多個不同 ID 的 CameraDevice 而該裝置不支援開啟此類組合時,openCamera(String, StateCallback, Handler) 會失敗並拋出 CameraAccessException,或是已開啟的 CameraDevice 會被斷線並接收 CameraDevice.StateCallback.onDisconnected(CameraDevice) 回撥。 會發生哪些行為取決於裝置的實作,且不同裝置會有所不同。 從 API 層級 30 開始,如果裝置不支援開啟的攝影機組合,則 openCamera(String, StateCallback, Handler) 呼叫必然失敗,且現有的 CameraDevice 不會被斷開。
由於攝影機裝置將以非同步方式開啟,任何對回傳的 CameraDevice 實例進行的非同步操作都會被排隊,直到裝置啟動完成並呼叫回調的 onOpened 方法為止。 待處理的操作會依序處理。
如果在初始化時,呼叫回傳後相機斷線,CameraDevice.StateCallback.onDisconnected 會有一個處於斷線狀態的 CameraDevice(而 CameraDevice.StateCallback.onOpened 則會被跳過)。
若開啟攝影機裝置失敗,則會呼叫該裝置的 onError 方法,後續呼叫攝影機裝置時會拋出 CameraAccessException。 需要 Manifest.permission.CAMERA
Android 參考資料。android.hardware.camera2.CameraManager.openCamera
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
另請參閱
- GetCameraIdList()
- <xref:Android.App.Admin.DevicePolicyManager.SetCameraDisabled(Android.Content.ComponentName%2c+System.Boolean)>