web-dev-qa-db-ja.com

CameraXライブラリはどのようにしてトーチのオン/オフを切り替えることができますか?

トーチをオン/オフ状態に切り替えることができる機能を開発しています。数日前、io2019でGoogleの新しいライブラリを見ました。アイデアを思いついたのですが、それを使ってみませんか。

しばらくすると、ライブラリから唯一のトーチを使用する可能性はありません

公式ドキュメントでさえ、私にとって適切な情報を見つけることができませんでした。さらに、それらのサンプルアプリも私のケースを処理する必要はありません。

実装が簡単なことを心に留めていますか、それともCameraXでそれを行う方法を知っていますか?

貼り付けるコードの量がひどいので、cameraやcamera2の使用が心配です。

リンク

[1] https://developer.Android.com/training/camerax

[2] https://proandroiddev.com/Android-camerax-preview-analyze-capture-1b3f403a9395

[3] https://github.com/Android/camera/tree/master/CameraXBasic

[4] https://github.com/Android/camera/tree/master/CameraXBasic

CameraXは、Android Jetpackライブラリであり、カメラの開発を容易にするために作成されました。

9

コメントできないので、yevhen_69の答えをさらに詳しく説明します。

EnabledTorch(true)を設定しても機能しませんでしたが、enableTorch(true)を設定する必要がありましたafter CameraX.bindToLifecycleの呼び出し

val previewConfig = PreviewConfig.Builder().apply {
        setLensFacing(lensFacing)
        // Any setup
        setTargetRotation(viewFinder.display.rotation)
}.build()

val preview = Preview(previewConfig)

CameraX.bindToLifecycle(this, preview)
preview.enableTorch(true)

ただし、余談ですが、CameraXはまだアルファ版であるため、Camera2 APIを使用することをお勧めします。

8
Iain Stanford
androidx.camera:camera-core:1.0.0-alpha06

CameraXの新しいリリースはこれらの機能を提供します。 CameraInfoは、Flashの利用可能チェックとセンサー回転APIで追加されました。これを参照してください link

try {
    CameraInfo cameraInfo = CameraX.getCameraInfo(currentCameraLensFacing);
    LiveData<Boolean> isFlashAvailable = cameraInfo.isFlashAvailable();
    flashToggle.setVisibility(isFlashAvailable.getValue() ? View.VISIBLE : View.INVISIBLE);
} catch (CameraInfoUnavailableException e) {
    Log.w(TAG, "Cannot get flash available information", e);
    flashToggle.setVisibility(View.VISIBLE);
}
3
Akshay Raiyani
val previewConfig = PreviewConfig.Builder().apply {
            setLensFacing(lensFacing)
            // Any setup
            setTargetRotation(viewFinder.display.rotation)
}.build()

val preview = Preview(previewConfig)

preview.enableTorch(true)
2
yevhen_69

Previewオブジェクトでトーチを有効にすることができます。 https://developer.Android.com/reference/androidx/camera/core/Preview.html#enableTorch(boolean)

また、ImageCaptureオブジェクトまたは関連付けられている構成ビルダーでフラッシュモード(オン/オフ/自動)を設定できます。 https://developer.Android.com/reference/androidx/camera/core/ImageCapture.html#setFlashMode(androidx.camera.core.FlashMode)https://developer.Android .com/reference/androidx/camera/core/ImageCaptureConfig.Builder.html#setFlashMode(androidx.camera.core.FlashMode)

1
Rémi Latapy
androidx.camera:camera-core:1.0.0-alpha10

あなたはこれでトーチが利用可能かどうかを確認できます:

val camera = cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, preview, imageAnalyzer)

camera.cameraInfo.hasFlashUnit()

そして、あなたはトーチを有効にすることができます:

camera.cameraControl.enableTorch(true)
0
murgupluoglu

これは、あなたがそれを行うことができる1つの方法です(Kotlin)。より良い方法がある場合はお知らせください。次のコードは、デバイスでフラッシュの可用性がすでに確立されていることを前提としています。

FlashMode変数を宣言する

private var flashMode: Int = ImageCapture.FLASH_MODE_OFF

UpdateCameraUIでリスナーを設定します

controls.findViewById<ImageButton>(R.id.flash_button).setOnClickListener {
    when (flashMode) {
        ImageCapture.FLASH_MODE_OFF ->
            flashMode = ImageCapture.FLASH_MODE_ON
        ImageCapture.FLASH_MODE_ON ->
            flashMode = ImageCapture.FLASH_MODE_AUTO
        ImageCapture.FLASH_MODE_AUTO ->
            flashMode = ImageCapture.FLASH_MODE_OFF
    }
    // Re-bind use cases to include changes
    bindCameraUseCases()
}

BindCameraUseCasesでフラッシュモードを設定します

            imageCapture = ImageCapture.Builder()
                .setCaptureMode(ImageCapture.CAPTURE_MODE_MAXIMIZE_QUALITY)
                .setTargetAspectRatio(screenAspectRatio)
                .setTargetResolution(screenSize)
                .setTargetRotation(rotation)
                .setFlashMode(flashMode)
                .build()
0
Knight Forked