Crea y usa un cliente de mejora de poca luz

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 LowLightBoost clase proporciona el método estático getClient, que muestra una instancia de LowLightBoostClient.

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

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 un Task objeto. 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 a isModuleInstalled() 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 implementa LowLightBoostClient.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 llamada onDownloadPause() 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 objeto Task. 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.