Per utilizzare l'aumento luce di Google, devi avere un client di aumento luce.
Puoi utilizzare il client per verificare se il modulo di miglioramento in condizioni di scarsa illuminazione è installato e se la funzionalità di miglioramento in condizioni di scarsa illuminazione di Google è supportata dal dispositivo e dalla fotocamera su cui è in esecuzione l'app. Utilizzerai il client anche per creare un LowLightBoostSession
.
Utilizzerai la sessione per attivare e disattivare il miglioramento in condizioni di scarsa illuminazione. Puoi anche impostare un ascoltatore per ricevere chiamate di ritorno quando l'aumento della luminosità è attivo.
I metodi LowLightBoostClient
non segnalano direttamente il successo o l'errore. Invece,
restituisce un oggetto Task
. Utilizzi un Task
per configurare gli ascoltatori di successo e errore. In questo modo i metodi possono segnalare l'esito positivo o negativo in modo asincrono, il che è necessario poiché i metodi devono comunicare con Google Play Services.
Dipendenze
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
è fornito dal pacchetto Google Play Services
com.google.android.gms.cameralowlight
. Consulta la documentazione di Google Play Services per informazioni su come accedere alle API di Google Play Services.
Crea un client
Per eseguire altre operazioni, devi avere un client di aumento della luminosità in condizioni di scarsa illuminazione. Il seguente codice crea un client:
Kotlin
val lowLightBoostClient = LowLightBoost.getClient(context)
Java
LowLightBoostClient lowLightBoostClient = LowLightBoost.getClient(context);
Punti chiave di questo codice
- La classe
LowLightBoost
fornisce il metodo staticogetClient
, che restituisce un'istanza diLowLightBoostClient
.
Controlla se il modulo di aumento della luminosità è installato
Una volta ottenuto un cliente, puoi verificare se il modulo di aumento della luminosità è installato sul tuo 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 di questo codice
- Questo codice apre una sessione della videocamera che si connette alla videocamera identificata da
cameraId
. Per ulteriori informazioni, consulta la documentazione di Camera2. - Il metodo
LowLightBoostClient.isModuleInstalled()
restituisce un oggettoTask
. Utilizza questo oggetto per configurare gli ascoltatori di successo e di errore. - Utilizza
Task.addOnSuccessListener()
per configurare un listener che viene chiamato se la chiamata aisModuleInstalled()
ha esito positivo. È importante sottolineare che, se viene chiamato l'ascoltatore di eventi di successo, significa semplicemente che il client è riuscito a scoprire se il modulo è installato sul dispositivo. Nel corpo dell'ascoltatore, devi verificare se il modulo è effettivamente installato o meno. - Se il modulo non è già installato, questo snippet lo installa chiamando il metodo
launchInstallRequest()
. Questo metodo è definito nello snippet in Installa il modulo di potenziamento in condizioni di luce scarsa.
Installa il modulo di aumento della luminosità
Se il modulo di potenziamento in condizioni di scarsa illuminazione non è già installato sul dispositivo, dovrai scaricarlo e installarlo da Google Play Services. Questo codice mostra come fare:
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 di questo codice
- Quando chiami
LowLightBoostClient.installModule()
devi passare un oggetto callback che implementaLowLightBoostClient.InstallStatusCallback
.installModule()
chiama i metodi in quel 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 di callback viene creato dal metodo
createInstallStatusCallback()
. Dovrai scrivere questo metodo da solo, seguendo queste linee guida:
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()
controlla se il dispositivo e il sistema operativo Android supportano la funzionalità Google Low Light Boost. In caso contrario, non scaricare il modulo.Il metodo
LowLightBoostClient.installModule()
restituisce un oggettoTask
. Utilizza questo oggetto per configurare gli ascoltatori di successo e di errore.Al termine dell'installazione, l'ascoltatore di eventi di successo verifica l'installazione aprendo la videocamera. Nello snippet, questa operazione viene eseguita con una chiamata a
openCamera()
. Dovrai scrivere questo metodo autonomamente.
Verificare se il potenziamento automatico in condizioni di scarsa illuminazione è supportato
Una volta ottenuto un cliente, puoi verificare se il potenziamento in condizioni di scarsa illuminazione è supportato dal dispositivo su cui è in esecuzione l'app. Il seguente codice verifica se l'aumento della luminosità è supportato:
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 di questo codice
- Si presume che
cameraId
sia l'ID di una videocamera Camera2, creata altrove. LowLightBoostClient.isCameraSupported()
controlla se la fotocamera Camera2 supporta l'aumento della sensibilità in condizioni di scarsa illuminazione. In alcuni casi, un dispositivo potrebbe supportare l'aumento della luminosità, ma una delle sue fotocamere potrebbe non farlo, quindi devi controllare entrambi.- Il metodo
LowLightBoostClient.isCameraSupported()
restituisce un oggettoTask
. Utilizza questo oggetto per configurare gli ascoltatori di successo e di errore. Crea la sessione di aumento della luce all'interno dell'ascoltatore di eventi di successo.