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 el módulo de Amplificación con poca luz está instalado y si el dispositivo y la cámara en los que se ejecuta tu app admiten la Amplificación 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 amplificación con poca luz). También puedes configurar un objeto de escucha para recibir devoluciones de llamada cuando la función Amplificación con poca luz esté activa.
Los métodos LowLightBoostClient
no indican directamente si la operación se realizó correctamente o no. En cambio, muestran un objeto Task
. Usas un Task
para configurar los objetos de escucha de éxito y de falla. Esto permite que los métodos indiquen éxito o 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
se proporciona con 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 amplificación de luz baja 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 clase
LowLightBoost
proporciona el método estáticogetClient
, que devuelve una instancia deLowLightBoostClient
.
Cómo comprobar 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 en condiciones de poca luz. El siguiente código verifica si se admite la mejora en condiciones 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, creado en otro lugar. LowLightBoostClient.isCameraSupported()
verifica si la cámara Camera2 admite la mejora en condiciones de poca luz. En algunos casos, un dispositivo puede admitir la mejora en condiciones de poca luz, pero una de sus cámaras no, por lo que debes verificar ambas.- El método
LowLightBoostClient.isCameraSupported()
devuelve 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.
Cómo comprobar si el módulo de amplificación de luz baja está instalado
Una vez que tengas un cliente, podrás confirmar si el módulo de Amplificación con poca luz 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 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()
devuelve un objetoTask
. Usas este objeto para configurar objetos de escucha de éxito y error. - Usa
Task.addOnSuccessListener()
para configurar un objeto de escucha que se llame si la llamada aisModuleInstalled()
se realiza correctamente. Es importante destacar que, si se llama al objeto de escucha de éxito, solo se te informa que el cliente logró 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ódigo de Instala el módulo de Amplificación con poca luz.
Instala el módulo de Mejora con poca luz
Si el módulo de Amplificación 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 se pausa la descarga,installModule()
llama al métodoonDownloadPause()
del objeto de devolución de llamada. - En este fragmento de código, el objeto de devolución de llamada se crea con el método
createInstallStatusCallback()
. Deberás escribir ese método tú mismo, 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 y el sistema operativo con tecnología de Android admiten la función Potenciador de luz en condiciones de baja iluminación de Google. Si no es así, no descargues el módulo.El método
LowLightBoostClient.installModule()
devuelve 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 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 por tu cuenta.