Para usar la Mejora con poca luz de Google, necesitarás un cliente de mejora con poca luz.
Puedes usar el cliente para verificar si está instalado el módulo de mejora con poca luz y si el dispositivo y la cámara en los que se ejecuta tu app admiten la Mejora con poca luz de Google. También usarás el cliente para crear un LowLightBoostSession.
(Usarás la sesión para activar y desactivar la mejora con poca luz). También puedes configurar un objeto de escucha para recibir devoluciones de llamada cuando la mejora con poca luz esté activa.
Los métodos LowLightBoostClient no indican el éxito o el fracaso directamente. En cambio,
muestran un Task objeto. Usas un Task para configurar objetos de escucha de éxito y fracaso. Esto permite que los métodos indiquen el éxito o el fracaso de forma asíncrona, lo cual 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.1-beta04"
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.1-beta04"
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 se proporciona a través del 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 mejora con poca luz para hacer cualquier otra cosa. 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
LowLightBoostclase proporciona el método estáticogetClient, que muestra una instancia deLowLightBoostClient.
Comprueba si se admite la mejora con poca luz
Una vez que tengas un cliente, podrás verificar si el dispositivo en el que se ejecuta la app admite la mejora con poca luz. El siguiente código verifica si se admite la mejora con 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
cameraIdes el ID de una cámara Camera2 camera, creada en otro lugar. LowLightBoostClient.isCameraSupported()verifica si la cámara Camera2 admite la mejora con poca luz. En algunos casos, un dispositivo puede admitir la mejora con poca luz, pero es posible que una de sus cámaras no lo haga, por lo que debes verificar ambas.- El método
LowLightBoostClient.isCameraSupported()muestra unTaskobjeto. Usas este objeto para configurar objetos de escucha de éxito y fracaso. Crea la sesión de mejora con poca luz dentro del objeto de escucha de éxito.
Comprueba si está instalado el módulo de mejora con poca luz
Una vez que tengas un cliente, podrás confirmar si el módulo de mejora con poca luz está instalado en tu dispositivo. El siguiente código verifica si está instalado el módulo:
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 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 unTaskobjeto. Usas este objeto para configurar objetos de escucha de éxito y fracaso. - Usa
Task.addOnSuccessListener()para configurar un objeto de escucha al que se llama si la llamada aisModuleInstalled()se realiza correctamente. Es importante destacar que, si se llama al objeto de escucha de éxito, solo se te indica que el cliente logró averiguar si el módulo está instalado en el dispositivo. En el cuerpo del 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 Instala el módulo de mejora con poca luz.
Instala el módulo de mejora con poca luz
Si el módulo de mejora con 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 los métodos de esa devolución de llamada para indicar el estado de la descarga. Por ejemplo, si la descarga se pausa,installModule()llama al objeto de devolución de llamadaonDownloadPause()método. - En este fragmento de código, el método
createInstallStatusCallback()crea el objeto de devolución de llamada. Deberás escribir ese método tú mismo, siguiendo estas líneas:
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 y el sistema operativo con tecnología Android admiten la Mejora con poca luz de Google. Si no es así, no descargues el módulo.El método
LowLightBoostClient.installModule()muestra un objetoTask. Usas este objeto para configurar objetos de escucha de éxito y fracaso.Cuando finaliza la instalación, el objeto de escucha de éxito verifica la instalación abriendo la cámara. En el fragmento, esto se hace con una llamada a
openCamera(). Deberás escribir ese método tú mismo.