トーチをオン/オフ状態に切り替えることができる機能を開発しています。数日前、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ライブラリであり、カメラの開発を容易にするために作成されました。
コメントできないので、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を使用することをお勧めします。
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);
}
val previewConfig = PreviewConfig.Builder().apply {
setLensFacing(lensFacing)
// Any setup
setTargetRotation(viewFinder.display.rotation)
}.build()
val preview = Preview(previewConfig)
preview.enableTorch(true)
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)
androidx.camera:camera-core:1.0.0-alpha10
あなたはこれでトーチが利用可能かどうかを確認できます:
val camera = cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, preview, imageAnalyzer)
camera.cameraInfo.hasFlashUnit()
そして、あなたはトーチを有効にすることができます:
camera.cameraControl.enableTorch(true)
これは、あなたがそれを行うことができる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()