Para usar o Google Aumento do modo pouca luz, você precisa de um cliente de aumento do modo pouca luz.
Você pode usar o cliente para verificar se o módulo de melhoria com pouca luz está instalado e se o recurso é compatível com o dispositivo e a câmera em que o app está sendo executado. Você também vai usar o cliente para criar um LowLightBoostSession
.
Você vai usar a sessão para ativar e desativar o aumento de pouca luz. Também é possível
configurar um listener para receber callbacks quando o recurso de melhoria em pouca luz estiver ativo.
Os métodos LowLightBoostClient
não indicam sucesso ou falha diretamente. Em vez disso, eles retornam um objeto Task
. Você usa um Task
para configurar listeners de sucesso e falha. Isso permite que os métodos sinalizem sucesso ou falha de forma assíncrona, o que é necessário porque eles precisam se comunicar com o Google Play Services.
Dependências
Kotlin
dependencies {
val low_light_boost_version = "16.0.0-beta01"
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.10.2")
implementation("com.google.android.gms:play-services-base:18.7.0")
implementation("com.google.android.gms:play-services-camera-low-light-boost:${low_light_boost_version}")
implementation("com.google.android.gms:play-services-tasks:18.3.0")
}
Groovy
dependencies {
def low_light_boost_version = "16.0.0-beta01"
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.10.2'
implementation 'com.google.android.gms:play-services-base:18.7.0'
implementation 'com.google.android.gms:play-services-camera-low-light-boost:${low_light_boost_version}'
implementation 'com.google.android.gms:play-services-tasks:18.3.0'
}
O LowLightBoostClient
é fornecido pelo pacote com.google.android.gms.cameralowlight
do Google Play Services. Consulte a documentação do Google
Play Services para informações sobre como acessar as APIs do Google Play
Services.
Criar um cliente
Você precisa de um cliente de melhoria de pouca luz para fazer qualquer outra coisa. O código a seguir cria um cliente:
Kotlin
val lowLightBoostClient = LowLightBoost.getClient(context)
Java
LowLightBoostClient lowLightBoostClient = LowLightBoost.getClient(context);
Pontos principais sobre esse código
- A classe
LowLightBoost
oferece o método estáticogetClient
, que retorna uma instância deLowLightBoostClient
.
Verificar se o aumento do modo pouca luz é compatível
Depois de ter um cliente, você pode verificar se o recurso de melhoria com pouca luz é compatível com o dispositivo em que o app está sendo executado. O código a seguir verifica se o recurso de melhoria em pouca luz é compatível:
Kotlin
launch {
try {
// Await the result of the Task in a non-blocking way
val isSupported: Boolean = lowLightBoostClient
.isCameraSupported(cameraId).await()
Log.d(TAG, "isCameraSupported: $isSupported")
if (isSupported) {
// Create the low light boost session here
}
} catch (e: Exception) {
Log.e(TAG, "isCameraSupported failed", e)
}
}
Java
lowLightBoostClient
.isCameraSupported(cameraId)
.addOnSuccessListener(
lowLightBoostExecutor,
(isSupported) -> {
Log.d(TAG, "isCameraSupported: " + isSupported);
if (isSupported) {
// Create the low light boost session here
}
)
Pontos principais sobre esse código
- Supõe-se que
cameraId
seja o ID de uma câmera Camera2, criada em outro lugar. LowLightBoostClient.isCameraSupported()
verifica se a câmera Camera2 é compatível com o recurso de melhoria em pouca luz. Em alguns casos, um dispositivo pode ser compatível com o recurso, mas uma das câmeras não. Por isso, é necessário verificar os dois.- O método
LowLightBoostClient.isCameraSupported()
retorna um objetoTask
. Você usa esse objeto para configurar listeners de sucesso e falha. Crie a sessão de aumento do modo pouca luz no listener de sucesso.
Verificar se o módulo de melhoria com pouca luz está instalado
Depois de ter um cliente, você pode confirmar se o módulo de melhoria de pouca luz está instalado no seu dispositivo. O código a seguir verifica se o módulo está instalado:
Kotlin
// Handle the Google Play services Task API with Kotlin coroutines
// (kotlinx-coroutines-play-services)
launch {
try {
val isInstalled: Boolean = lowLightBoostClient
.isModuleInstalled(context).await()
if (isInstalled) {
Log.d(TAG, "Module is installed")
try {
openCamera(cameraId)
} catch (e: CameraAccessException) {
Log.e(TAG, "Failed to open camera", e)
}
} else {
Log.d(TAG, "Module is not installed")
launchInstallRequest()
}
} catch (e: Exception) {
Log.e(TAG, "Failed to check module availability", e)
}
}
Java
lowLightBoostClient
.isModuleInstalled(context)
.addOnSuccessListener(
(isInstalled) -> {
if (isInstalled) {
Log.d(TAG, "Module is installed");
try {
openCamera(cameraId);
} catch (CameraAccessException e) {
Log.e(TAG, "Failed to open camera", e);
}
} else {
Log.d(TAG, "Module is not installed");
launchInstallRequest();
}
})
.addOnFailureListener(
(e) -> {
Log.e(TAG, "Failed to check module availability", e);
});
Pontos principais sobre esse código
- Esse código abre uma sessão de câmera conectada à câmera identificada por
cameraId
. Para mais informações, consulte a documentação do Camera2. - O método
LowLightBoostClient.isModuleInstalled()
retorna um objetoTask
. Você usa esse objeto para configurar listeners de sucesso e falha. - Use
Task.addOnSuccessListener()
para configurar um listener que será chamado se a chamada paraisModuleInstalled()
for bem-sucedida. É importante lembrar que, se o listener de sucesso for chamado, isso apenas informará que o cliente conseguiu descobrir se o módulo está instalado no dispositivo. No corpo do listener, verifique se o módulo está instalado ou não. - Se o módulo ainda não estiver instalado, esse snippet vai instalá-lo chamando o método
launchInstallRequest()
. Esse método é definido no snippet em Instalar o módulo de melhoria de pouca luz.
Instalar o módulo de aumento do modo pouca luz
Se o módulo de melhoria em pouca luz ainda não estiver instalado no dispositivo, faça o download e a instalação dele no Google Play Services. Este código mostra como fazer isso:
Kotlin
private suspend fun launchInstallRequest() {
Log.v(TAG, "Launching install request")
try {
// Check if this device can support Google LLB.
val isDeviceSupported: Boolean = lowLightBoostClient
.isDeviceSupported(context).await()
if (isDeviceSupported) {
Log.d(TAG, "Device is supported")
// Show download indicator, if needed.
try {
val isInstallSuccessful: Boolean = lowLightBoostClient
.installModule(context,
createInstallStatusCallback()
).await()
if (isInstallSuccessful) {
Log.d(TAG, "Module installed")
// Hide download indicator, if needed.
try {
openCamera()
} catch (e: CameraAccessException) {
Log.e(TAG, "Failed to open camera", e)
}
} else {
Log.d(TAG, "Module install failed")
}
} catch (e: Exception) {
Log.e(TAG, "An error occurred installing the module:", e)
}
} else {
Log.d(TAG, "Device is not supported")
}
} catch (e: Exception) {
Log.e(TAG, "An error occurred checking device support:", e)
}
}
Java
private void launchInstallRequest() {
Log.v(TAG, "Launching install request");
// Check if this device can support Google LLB.
lowLightBoostClient
.isDeviceSupported(context)
.addOnSuccessListener(
(isDeviceSupported) -> {
if (isDeviceSupported) {
Log.d(TAG, "Device is supported");
// Show download indicator, if needed.
lowLightBoostClient
.installModule(
this,
createInstallStatusCallback()
)
.addOnSuccessListener(
(result) -> {
if (result) {
Log.d(TAG, "Module installed");
// Hide download indicator, if needed.
try {
openCamera();
} catch (CameraAccessException e) {
Log.e(TAG, "Failed to open camera", e);
}
} else {
Log.d(TAG, "Module install failed");
}
}
);
} else {
Log.d(TAG, "Device is not supported");
}
})
.addOnFailureListener(
(e) -> {
Log.e(TAG, "Failed to check device support", e);
});
}
Pontos principais sobre esse código
- Ao chamar
LowLightBoostClient.installModule()
você transmite um objeto de callback, que implementaLowLightBoostClient.InstallStatusCallback
. OinstallModule()
chama métodos nesse callback para indicar o status do download. Por exemplo, se o download for pausado,installModule()
vai chamar o métodoonDownloadPause()
do objeto de callback. - Neste snippet de código, o objeto de callback é criado pelo
método
createInstallStatusCallback()
. Você precisaria escrever esse método por conta própria, seguindo estas linhas:
Kotlin
private fun createInstallStatusCallback(): LowLightBoostClient.InstallStatusCallback =
object : LowLightBoostClient.InstallStatusCallback() {
override fun onDownloadPending() {
Log.d(TAG, "onDownloadPending")
// Code here...
}
override fun onDownloadStart() {
Log.d(TAG, "onDownloadStart")
// Code here...
}
// other overrides here...
}
Java
private InstallStatusCallback createInstallStatusCallback() {
new LowLightBoostClient.InstallStatusCallback() {
@Override
public void onDownloadPending() {
Log.d(TAG, "onDownloadPending");
// Code here...
}
@Override
public void onDownloadStart() {
Log.d(TAG, "onDownloadStart");
// Code here...
}
// other overrides here...
}
LowLightBoostClient.isDeviceSupported()
verifica se o dispositivo e o sistema operacional Android são compatíveis com o Google Low Light Boost. Caso contrário, não faça o download do módulo.O método
LowLightBoostClient.installModule()
retorna um objetoTask
. Você usa esse objeto para configurar listeners de sucesso e falha.Quando a instalação termina, o listener de sucesso verifica a instalação abrindo a câmera. No snippet, isso é feito com uma chamada para
openCamera()
. Você precisará escrever esse método.