Per utilizzare la modalità scarsa illuminazione di Google, ti serve un client per la modalità scarsa illuminazione.
Puoi utilizzare
il client per verificare se il modulo della modalità scarsa illuminazione è installato e per verificare
se la modalità scarsa illuminazione di Google è supportata dal dispositivo e dalla videocamera su cui è
in esecuzione l'app. Utilizzerai il client anche per creare un oggetto LowLightBoostSession.
(Utilizzerai la sessione per attivare e disattivare la modalità scarsa illuminazione.) Puoi anche
configurare un listener per ricevere callback quando la modalità scarsa illuminazione è attiva.
LowLightBoostClient metodi non segnalano direttamente l'esito positivo o negativo. Restituiscono invece un
oggetto Task. Utilizza un oggetto Task per configurare i listener di esito positivo e negativo. In questo modo, i metodi possono segnalare l'esito positivo o negativo in modo asincrono, il che
è necessario perché devono comunicare con Google Play Services.
Dipendenze
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 è fornito dal pacchetto di Google Play Services
com.google.android.gms.cameralowlight. Per informazioni su come accedere alle API di Google
Play services, consulta la documentazione di Google
Play services.
Crea un client
Per eseguire qualsiasi altra operazione, ti serve un client per la modalità scarsa illuminazione. Il seguente codice crea un client:
Kotlin
val lowLightBoostClient = LowLightBoost.getClient(context)
Java
LowLightBoostClient lowLightBoostClient = LowLightBoost.getClient(context);
Punti chiave su questo codice
- La
LowLightBoostclasse fornisce il metodo staticogetClient, che restituisce un'istanza diLowLightBoostClient.
Verifica se la modalità scarsa illuminazione è supportata
Una volta che hai un client, puoi verificare se la modalità scarsa illuminazione è supportata dal dispositivo su cui è in esecuzione l'app. Il seguente codice verifica se la modalità scarsa illuminazione è supportata:
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
}
)
Punti chiave su questo codice
- Si presuppone che
cameraIdsia l'ID di una videocamera Camera2 creata altrove. LowLightBoostClient.isCameraSupported()verifica se la videocamera Camera2 supporta la modalità scarsa illuminazione. In alcuni casi, un dispositivo potrebbe supportare la modalità scarsa illuminazione, ma una delle sue videocamere potrebbe non supportarla, quindi devi controllare entrambe.- Il metodo
LowLightBoostClient.isCameraSupported()restituisce unTaskoggetto. Utilizza questo oggetto per configurare i listener di esito positivo e negativo. Crea la sessione della modalità scarsa illuminazione all'interno del listener di esito positivo.
Verifica se il modulo della modalità scarsa illuminazione è installato
Una volta che hai un client, puoi verificare se il modulo della modalità scarsa illuminazione è installato sul dispositivo. Il seguente codice verifica se il modulo è installato:
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);
});
Punti chiave su questo codice
- Questo codice apre una sessione della videocamera che si connette alla videocamera identificata da
cameraId. Per saperne di più, consulta la documentazione di Camera2. - Il metodo
LowLightBoostClient.isModuleInstalled()restituisce unTaskoggetto. Utilizza questo oggetto per configurare i listener di esito positivo e negativo. - Utilizza
Task.addOnSuccessListener()per configurare un listener che viene chiamato se la chiamata aisModuleInstalled()ha esito positivo. È importante sottolineare che, se viene chiamato il listener di esito positivo, significa solo che il client è riuscito a scoprire se il modulo è installato sul dispositivo. Nel corpo del tuo listener, devi verificare se il modulo è effettivamente installato. - Se il modulo non è già installato, questo snippet lo installa chiamando il
metodo
launchInstallRequest(). Questo metodo è definito nello snippet in Installare il modulo della modalità scarsa illuminazione.
Installa il modulo della modalità scarsa illuminazione
Se il modulo della modalità scarsa illuminazione non è già installato sul dispositivo, devi scaricarlo e installarlo da Google Play Services. Questo codice mostra come farlo:
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);
});
}
Punti chiave su questo codice
- Quando chiami
LowLightBoostClient.installModule()passi un oggetto callback che implementaLowLightBoostClient.InstallStatusCallback.installModule()chiama i metodi in questo callback per indicare lo stato del download. Ad esempio, se il download è in pausa,installModule()chiama il metodoonDownloadPause()dell'oggetto callback. - In questo snippet di codice, l'oggetto callback viene creato dal
createInstallStatusCallback()metodo. Dovrai scrivere tu stesso questo metodo, seguendo queste indicazioni:
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 se il dispositivo e il sistema operativo Android supportano la modalità scarsa illuminazione di Google. In caso contrario, non scaricare il modulo.Il metodo
LowLightBoostClient.installModule()restituisce un oggettoTask. Utilizza questo oggetto per configurare i listener di esito positivo e negativo.Al termine dell'installazione, il listener di esito positivo verifica l'installazione aprendo la videocamera. Nello snippet, questa operazione viene eseguita con una chiamata a
openCamera(). Dovrai scrivere tu stesso questo metodo.