Processos e Threads em App Android.
https://developer.android.com/guide/components/processes-and-threads#java
https://developer.android.com/studio/write/annotations#thread-annotations
https://developer.android.com/guide/components/activities/process-lifecycle
https://github.com/rbeninca/Camera/
Adicionando permissão no manifesto as permissões necessárias
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
Nas primeiras versões do Android as permissões necessárias para um app eram declaradas apenas no arquivo manifest.xml, a partir do Android 6.6 API 23 as permissões também necesistam ser solicitadas em tempo de execução. Por isso mais adiante no momento de implementarmos uma Activity que fara o uso da camera necessitaremos solicitar novamente as pemissões. Mas antes ainda é necessário adicionar as dependências necessárias para acessar o CameraX
2.Adicionando Dependências Necessárias no Gradle.Module
// CameraX core library using the camera2 implementation
def camerax_version = "1.2.0-alpha02"
// The following line is optional, as the core library is included indirectly by camera-camera2
implementation("androidx.camera:camera-core:${camerax_version}")
implementation("androidx.camera:camera-camera2:${camerax_version}")
// If you want to additionally use the CameraX Lifecycle library
implementation("androidx.camera:camera-lifecycle:${camerax_version}")
// If you want to additionally use the CameraX VideoCapture library
implementation("androidx.camera:camera-video:${camerax_version}")
// If you want to additionally use the CameraX View class
implementation("androidx.camera:camera-view:${camerax_version}")
// If you want to additionally add CameraX ML Kit Vision Integration
implementation("androidx.camera:camera-mlkit-vision:${camerax_version}")
// If you want to additionally use the CameraX Extensions library
implementation("androidx.camera:camera-extensions:${camerax_version}")
Após adicionar essas linhas no final do arquivo devemos sincronizar o projeto.
Para previsualiarmos o fluxo de vídeo vamos adicionar um componente que faz parte do cameraX definido como PreviewView, ilustrado com parte preta na Figura de Layout a seguir: