כדי להשתמש בשיפור התאורה החלשה של Google, צריך לקוח לשיפור התאורה החלשה.
אפשר להשתמש בלקוח כדי לבדוק אם מודול שיפור התאורה החלשה מותקן, וכדי לבדוק אם המכשיר והמצלמה שבהם האפליקציה פועלת תו��כים בשיפור התאורה החלשה של Google. תשתמשו גם בלקוח כדי ליצור LowLightBoostSession
.
(במהלך הסשן תוכלו להפעיל ולהשבית את ההגברה בתאורה חלשה). אפשר גם להגדיר מאזין לקבלת קריאות חוזרות (callback) כשהתכונה 'שיפור תאורה חלשה' פעילה.
LowLightBoostClient
לא מסמנות הצלחה או כישלון באופן יש��ר. במקום זאת, הם מחזירים אובייקט Task
. משתמשים ב-Task
כדי להגדיר מאזינים להצלחה ולכישלון. כך השיטות יכולות לסמן הצלחה או כישלון באופן אסינכרוני, וזה הכרחי כי השיטות צריכות לתקשר עם שירותי Google Play.
תלויות
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. מידע על גישה לממשקי API של Google Play Services זמין במסמכי התיעוד של 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()
מצליחה. חשוב לדעת: אם מתבצעת קריאה ל-listener של ההצלחה, זה רק אומר שהלקוח הצליח לגלות אם המודול מותקן במכשיר. בגוף של רכיב ה-listener, צריך לבדוק אם המודול מותקן בפועל או לא. - אם המודול עדיין לא מותקן, קטע הקוד הזה מתקין אותו על ידי קריאה לשיטה
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()
מעבירים אובייקט של קריאה חוזרת, שמטמיע אתLowLightBoostClient.InstallStatusCallback
. installModule()
קוראת לשיטות בקריאה החוזרת כדי לציין את סטטוס ההורדה. לדוגמה, אם ההורדה מושהית, הפונקציהinstallModule()
קוראת לשיטהonDownloadPause()
של אובייקט הקריאה החוזרת. - ��קטע הקוד הזה, אובייקט הקריאה החוזרת נוצר על ידי השיטה
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. אם לא, אל תורידו את המודול.השיטה
LowLightBoostClient.installModule()
מחזירה אובייקטTask
. משתמשים באובייקט הזה כדי להגדיר מאזינים להצלחה ולכישלון.בסיום ההתקנה, מאזין ההצלחה מאמת את ההתקנה על ידי פתיחת המצלמה. בקטע הקוד, הפעולה הזו מתבצעת באמצעות קריאה ל-
openCamera()
. תצטרכו לכתוב את השיטה הזו בעצמכם.