Para usar la función Mejora con poca luz de Google, necesitarás un cliente de mejora con poca luz.
Puedes usar el cliente para verificar si el módulo de mejora de poca luz está instalado y si el dispositivo y la cámara en los que se ejecuta la app admiten la función de mejora de poca luz de Google. También usarás el cliente para crear un LowLightBoostSession
.
(Usarás la sesión para activar y desactivar el aumento de la luz baja). También puedes
configurar un objeto de escucha para recibir devoluciones de llamada cuando el aumento de la luz baja esté activo.
Los métodos LowLightBoostClient
no indican el éxito o el fracaso directamente. En su lugar, muestran un objeto Task
. Usas un Task
para configurar objetos de escucha de éxito y falla. Esto permite que los métodos indiquen el éxito o el fracaso de forma asíncrona, lo que es necesario, ya que los métodos deben comunicarse con los Servicios de Google Play.
Dependencias
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'
}
LowLightBoostClient
es proporcionado por el paquete com.google.android.gms.cameralowlight
de los Servicios de Google Play. Consulta la documentación de los Servicios de Google Play para obtener información sobre cómo acceder a las APIs de los Servicios de Google Play.
Crea un cliente
Necesitas un cliente de aumento de luz baja para hacer cualquier otra acción. El siguiente código crea un cliente:
Kotlin
val lowLightBoostClient = LowLightBoost.getClient(context)
Java
LowLightBoostClient lowLightBoostClient = LowLightBoost.getClient(context);
Puntos clave sobre este código
- La clase
LowLightBoost
proporciona el método estáticogetClient
, que muestra una instancia deLowLightBoostClient
.
Comprueba si el módulo de mejora de poca luz está instalado
Una vez que tengas un cliente, puedes confirmar si el módulo de aumento de luz baja está instalado en tu dispositivo. El siguiente código verifica si el 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);
});
Puntos clave sobre este código
- Este código abre una sesión de la cámara que se conecta a la cámara identificada por
cameraId
. Para obtener más información, consulta la documentación de Camera2. - El método
LowLightBoostClient.isModuleInstalled()
muestra un objetoTask
. Usas este objeto para configurar objetos de escucha de éxito y error. - Usa
Task.addOnSuccessListener()
para configurar un objeto de escucha al que se le llame si la llamada aisModuleInstalled()
se realiza correctamente. Es importante que, si se llama al objeto de escucha de éxito, esto solo te indique que el cliente pudo averiguar si el módulo está instalado en el dispositivo. En el cuerpo de tu objeto de escucha, debes verificar si el módulo está instalado o no. - Si el módulo aún no está instalado, este fragmento lo instala llamando al método
launchInstallRequest()
. Ese método se define en el fragmento de Cómo instalar el módulo de mejora de baja luminosidad.
Instala el módulo de mejora con poca luz
Si el módulo de mejora de poca luz aún no está instalado en el dispositivo, deberás descargarlo e instalarlo desde los Servicios de Google Play. En este código, se muestra cómo hacerlo:
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);
});
}
Puntos clave sobre este código
- Cuando llamas a
LowLightBoostClient.installModule()
, pasas un objeto de devolución de llamada, que implementaLowLightBoostClient.InstallStatusCallback
.installModule()
llama a métodos en esa devolución de llamada para indicar el estado de la descarga. Por ejemplo, si se pausa la descarga,installModule()
llama al métodoonDownloadPause()
del objeto de devolución de llamada. - En este fragmento de código, el método
createInstallStatusCallback()
crea el objeto de devolución de llamada. Debes escribir ese método por tu cuenta, de la siguiente manera:
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 si el dispositivo con Android y el sistema operativo son compatibles con el aumento de brillo con poca luz de Google. De lo contrario, no descargues el módulo.El método
LowLightBoostClient.installModule()
muestra un objetoTask
. Usas este objeto para configurar objetos de escucha de éxito y error.Cuando finaliza la instalación, el objeto de escucha de éxito abre la cámara para verificarla. En el fragmento, esto se hace con una llamada a
openCamera()
. Deberás escribir ese método por tu cuenta.
Comprueba si se admite la mejora con poca luz
Una vez que tengas un cliente, puedes verificar si el dispositivo en el que se ejecuta la app admite la mejora de poca luz. El siguiente código verifica si se admite la mejora de poca luz:
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
}
)
Puntos clave sobre este código
- Se supone que
cameraId
es el ID de una cámara Camera2, creada en otro lugar. LowLightBoostClient.isCameraSupported()
verifica si la cámara de Camera2 admite el aumento de poca luz. En algunos casos, es posible que un dispositivo admita la mejora de poca luz, pero que una de sus cámaras no lo haga, por lo que debes verificar ambas.- El método
LowLightBoostClient.isCameraSupported()
muestra un objetoTask
. Usas este objeto para configurar objetos de escucha de éxito y error. Crea la sesión de mejora con poca luz dentro del objeto de escucha de éxito.