כדי להשתמש ב-Google Low Light Boost, צריך קליינט של Low Light Boost.
אתם יכולים להשתמש בלקוח כדי לבדוק אם המודול של "שיפור בתאורה חלשה" מותקן, ואם המכשיר והמצלמה שהאפליקציה פועלת בהם תומכים ב"שיפור בתאורה חלשה" של Google. משתמשים בלקוח גם כדי ליצור LowLightBoostSession.
(תשתמשו בסשן כדי להפעיל ולהשבית את שיפור התאורה החלשה). אתם יכולים גם להגדיר פונקציית listener כדי לקבל קריאות חוזרות (callbacks) כשהתכונה "שיפור בתאורה חלשה" מופעלת.
LowLightBoostClient שיטות לא מסמנות הצלחה או כישלון באופן ישיר. במקום זאת, הן מחזירות אובייקט Task. משתמשים ב-Task כדי להגדיר מאזינים להצלחה ולכישלון. כך השיטות יכולות לאותת על הצלחה או כישלון באופן אסינכרוני, וזה הכרחי כי השיטות צריכות לתקשר עם Google Play Services.
פניות קשורות
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")
}
מגניב
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 מסופק על ידי החבילה com.google.android.gms.cameralowlight של Google Play Services. במסמכי התיעוד של Google Play Services מוסבר איך לגשת לממשקי ה-API של Google Play Services.
יצירת לקוח
כדי לעשות כל דבר אחר, צריך לקוח של שיפור איכות התאורה. הקוד הבא יוצר לקוח:
Kotlin
val lowLightBoostClient = LowLightBoost.getClient(context)
Java
LowLightBoostClient lowLightBoostClient = LowLightBoost.getClient(context);
מידע חשוב על הקוד
- המחלקה
LowLightBoostמספקת את השיטה הסטטיתgetClient, שמחזירה מופע שלLowLightBoostClient.
איך בודקים אם המכשיר תומך בשיפור האיכות בתאורה חלשה
אחרי שיש לכם לקוח, אתם יכולים לבדוק אם המכשיר שהאפליקציה פועלת בו תומך בשיפור התאורה. הקוד הבא בודק אם יש תמיכה בשיפור התאורה החלשה:
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
}
)
מידע חשוב על הקוד
- ההנחה היא ש-
cameraIdהוא המזהה של מצלמת Camera2, שנוצרה במקום אחר. LowLightBoostClient.isCameraSupported()בודק אם המצלמה ב-Camera2 תומכת בשיפור התאורה. במקרים מסוימים, יכול להיות שהמכשיר תומך בשיפור התאורה אבל אחת מהמצלמות שלו לא תומכת, אז צריך לבדוק את שניהם.- השיטה
LowLightBoostClient.isCameraSupported()מחזירה אובייקטTask. אתם משתמשים באובייקט הזה כדי להגדיר מאזינים להצלחה ולכישלון. יוצרים את הסשן של שיפור התאורה החלשה בתוך המאזין להצלחה.
בודקים אם מודול שיפור התאורה החלשה מותקן
אחרי שיוצרים לקוח, אפשר לבדוק אם המודול לשיפור התאורה מותקן במכשיר. הקוד הבא בודק אם המודול מותקן:
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);
});
מידע חשוב על הקוד
- הקוד הזה פותח סשן של מצלמה שמתחבר למצלמה שמזוהה על ידי
cameraId. מידע נוסף זמין במסמכי התיעוד של Camera2. - השיטה
LowLightBoostClient.isModuleInstalled()מחזירה אובייקטTask. אתם משתמשים באובייקט הזה כדי להגדיר מאזינים להצלחה ולכישלון. - משתמשים ב-
Task.addOnSuccessListener()כדי להגדיר מאזין שמופעל אם הקריאה ל-isModuleInstalled()מצליחה. חשוב: אם המאזין להצלחה נקרא, זה רק אומר שהלקוח הצליח לגלות אם המודול מותקן במכשיר. בגוף של המאזין, צריך לבדוק אם המודול באמת מותקן או לא. - אם המודול עדיין לא מותקן, קטע הקוד הזה מתקין אותו באמצעות קריאה ל-method
launchInstallRequest(). השיטה הזו מוגדרת בקטע הקוד שבחלק התקנת המודול לשיפור האיכות בתאורה חלשה.
התקנת המודול "שיפור איכות הווידאו בתאורה חלשה"
אם המודול לשיפור התאורה לא מותקן במכשיר, צריך להוריד ולהתקין אותו מ-Google Play Services. הקוד הבא מראה איך עושים את זה:
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);
});
}
מידע חשוב על הקוד
- כשמפעילים את
LowLightBoostClient.installModule(), מעבירים אובייקט קריאה חוזרת (callback) שמטמיע אתLowLightBoostClient.InstallStatusCallback. installModule()מפעיל שיטות בקריאה החוזרת (callback) הזו כדי לציין את סטטוס ההורדה. לדוגמה, אם ההורדה מושהית,installModule()קורא ל-callback object של השיטהonDownloadPause(). - בקטע הקוד הזה, אובייקט הקריאה החוזרת נוצר על ידי ה-method
createInstallStatusCallback(). תצטרכו לכתוב את השיטה הזו בעצמכם, בדומה לזה:
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()בודק אם המכשיר ומערכת ההפעלה של Android תומכים ב-Google Low Light Boost. אם לא, אל תורידו את המודול.השיטה
LowLightBoostClient.installModule()מחזירה אובייקטTask. אתם משתמשים באובייקט הזה כדי להגדיר מאזינים להצלחה ולכישלון.כשההתקנה מסתיימת, המאזין לאירוע ההצלחה פותח את המצלמה כדי לאמת את ההתקנה. בקטע הקוד, הפעולה הזו מתבצעת באמצעות קריאה ל-
openCamera(). תצטרכו לכתוב את השיטה הזו בעצמכם.