

現在Android Studioでcamera2APIを用いて可視光(Li-Fi)の研究をしています。  
ですがLEDを撮影しデータを取得する際にどうしても自動露出とオートフォーカスが邪魔になってしまいます。

・自動露出  
・オートフォーカス

上記二つの切り方を教えてください。

**仕様**  
Android Studio3.1

**スマートフォン**  
SHARP AQUOS API23  
HUAWEI P10 API24


CC BY-SA 4.0
2018-12-04T07:50:58.060
50893
2020-08-20T05:15:29.050
2020-08-19T01:54:40.663
3060
31286
question
android camera
自動露出とオートフォーカスの切り方が分からない


`CameraCaptureSession`の`capture`メソッドなどは[引数に`CameraRequest`を取ります](https://developer.android.com/reference/android/hardware/camera2/CameraCaptureSession#capture\(android.hardware.camera2.CaptureRequest,%20android.hardware.camera2.CameraCaptureSession.CaptureCallback,%20android.os.Handler\))。`CameraRequest`には[様々なフィールドがあり](https://developer.android.com/reference/android/hardware/camera2/CaptureRequest#summary)、`CONTROL_AF_MODE`と`CONTROL_AE_MODE`がそれぞれオートフォーカスと自動露出に対応します。これらを`OFF`にセットすれば無効になります。また、ホワイトバランス調整を含めた3つをまとめて設定できる`CONTROL_MODE`も提供されています。

`CameraDevice`の[`createCaptureRequest`](https://developer.android.com/reference/android/hardware/camera2/CameraDevice#createCaptureRequest\(int\))を使うと、それぞれのカメラに適した`CameraRequest.Builder`を生成できるので、これを書き換えてAF等を無効にしていくのがよいでしょう。

[Googleのサンプルコード](https://github.com/android/camera-
samples/blob/71e83b90d9ce25b74970e98aaf1c26532606eb2c/Camera2Basic/app/src/main/java/com/example/android/camera2/basic/fragments/CameraFragment.kt#L328)を引用します（コメントは引用者によるもの）。

[code]

    val captureRequest = session.device.createCaptureRequest(
                         CameraDevice.TEMPLATE_STILL_CAPTURE).apply { addTarget(imageReader.surface) }
    
      // ここで captureRequest.set(CONTROL_AF_MODE, OFF) などとする
    
    session.capture(captureRequest.build(), object : CameraCaptureSession.CaptureCallback() {
      ...
    
[/code]


CC BY-SA 4.0
2020-08-20T05:15:29.050
69716
2020-08-20T05:15:29.050
7500
50893
answer