Créer et utiliser un client de boost en basse luminosité

Pour utiliser l'amplification luminosité faible de Google, vous avez besoin d'un client d'amplification luminosité faible. Vous pouvez utiliser le client pour vérifier si le module d'amélioration de la luminosité est installé et si la fonctionnalité d'amélioration de la luminosité Google est compatible avec l'appareil et la caméra sur lesquels votre application s'exécute. Vous utiliserez également le client pour créer un LowLightBoostSession. (Vous utiliserez la session pour activer et désactiver l'amplification en basse luminosité.) Vous pouvez également configurer un écouteur pour recevoir des rappels lorsque l'amélioration de la luminosité est active.

Les méthodes LowLightBoostClient ne signalent pas directement la réussite ou l'échec. À la place, ils renvoient un objet Task. Vous utilisez un Task pour configurer des écouteurs de réussite et d'échec. Cela permet aux méthodes de signaler la réussite ou l'échec de manière asynchrone, ce qui est nécessaire, car les méthodes doivent communiquer avec les services Google Play.

Dépendances

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 est fourni par le package com.google.android.gms.cameralowlight des services Google Play. Pour en savoir plus sur l'accès aux API des services Google Play, consultez la documentation des services Google Play.

Créer un client

Vous avez besoin d'un client de boost de faible luminosité pour effectuer d'autres opérations. Le code suivant crée un client:

Kotlin

val lowLightBoostClient = LowLightBoost.getClient(context)

Java

LowLightBoostClient lowLightBoostClient = LowLightBoost.getClient(context);

Points clés concernant ce code

  • La classe LowLightBoost fournit la méthode statique getClient, qui renvoie une instance de LowLightBoostClient.

Vérifier si le module d'amélioration de la luminosité faible est installé

Une fois que vous avez un client, vous pouvez vérifier si le module de boost en basse luminosité est installé sur votre appareil. Le code suivant vérifie si le module est installé:

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);
    });

Points clés concernant ce code

  • Ce code ouvre une session d'appareil photo qui se connecte à la caméra identifiée par cameraId. Pour en savoir plus, consultez la documentation Camera2.
  • La méthode LowLightBoostClient.isModuleInstalled() renvoie un objet Task. Vous utilisez cet objet pour configurer des écouteurs de réussite et d'échec.
  • Utilisez Task.addOnSuccessListener() pour configurer un écouteur appelé si l'appel à isModuleInstalled() aboutit. Il est important de noter que si l'écouteur de succès est appelé, cela vous indique simplement que le client a réussi à déterminer si le module est installé sur l'appareil. Dans le corps de votre écouteur, vous devez vérifier si le module est réellement installé ou non.
  • Si le module n'est pas déjà installé, cet extrait de code l'installe en appelant la méthode launchInstallRequest(). Cette méthode est définie dans l'extrait de code de la section Installer le module d'amélioration de la luminosité faible.

Installer le module d'amplification de la luminosité faible

Si le module d'amélioration de la luminosité faible n'est pas déjà installé sur l'appareil, vous devez le télécharger et l'installer depuis les services Google Play. Le code suivant montre comment procéder:

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);
      });
}

Points clés concernant ce code

  • Lorsque vous appelez LowLightBoostClient.installModule(), vous transmettez un objet de rappel, qui implémente LowLightBoostClient.InstallStatusCallback. installModule() appelle les méthodes de ce rappel pour indiquer l'état du téléchargement. Par exemple, si le téléchargement est mis en pause, installModule() appelle la méthode onDownloadPause() de l'objet de rappel.
  • Dans cet extrait de code, l'objet de rappel est créé par la méthode createInstallStatusCallback(). Vous devrez écrire cette méthode vous-même, comme suit:

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() vérifie si l'appareil et le système d'exploitation Android sont compatibles avec la fonctionnalité Google Boost en basse luminosité. Si ce n'est pas le cas, ne téléchargez pas le module.

  • La méthode LowLightBoostClient.installModule() renvoie un objet Task. Vous utilisez cet objet pour configurer des écouteurs de réussite et d'échec.

  • Une fois l'installation terminée, l'écouteur de succès la vérifie en ouvrant la caméra. Dans l'extrait, cela se fait par un appel à openCamera(). Vous devrez écrire cette méthode vous-même.

Vérifier si l'amplification de la luminosité est compatible

Une fois que vous avez un client, vous pouvez vérifier si la fonctionnalité d'amélioration de la luminosité est compatible avec l'appareil sur lequel l'application s'exécute. Le code suivant vérifie si l'amélioration de la luminosité est prise en charge:

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
      }
    )

Points clés concernant ce code

  • cameraId est supposé être l'ID d'un appareil photo Camera2, créé ailleurs.
  • LowLightBoostClient.isCameraSupported() vérifie si l'appareil photo Camera2 est compatible avec l'amélioration de la luminosité. Dans certains cas, un appareil peut prendre en charge l'amélioration de l'image en basse luminosité, mais une de ses caméras peut ne pas le faire. Vous devez donc vérifier les deux.
  • La méthode LowLightBoostClient.isCameraSupported() renvoie un objet Task. Vous utilisez cet objet pour configurer des écouteurs de réussite et d'échec. Créez la session d'amplification luminosité faible dans l'écouteur de succès.