語言

CameraManager.OpenCamera 方法

定義

多載

名稱 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

當相機開啟時會呼叫回調

handler
Handler

回調應呼叫的處理器,或 null 使用當前執行緒的 Looper。

屬性

例外狀況

如果攝影機因裝置政策被停用、已斷線,或被更高優先權的攝影機 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)>

適用於