استخدِم جلسة تحسين الإضاءة المنخفضة لتفعيل ميزة "تحسين الإضاءة المنخفضة" من Google وإيقافها.
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")
}
رائع
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'
}
توفّر حزمة "خدمات Google Play"LowLightBoostSession
com.google.android.gms.cameralowlight
. اطّلِع على مستندات "خدمات Google
Play" للحصول على معلومات عن الوصول إلى واجهات برمجة التطبيقات
في "خدمات Google Play".
إنشاء عنصر طلب معاودة الاتصال
عند إنشاء جلسة تحسين الإضاءة المنخفضة، عليك تمريرها
كائنًا ينفِّذ واجهة LowLightBoostCallback
.
يتمّ استدعاء وظائف هذا العنصر عند انقطاع الاتّصال بالجلسة أو
إزالتها. توضّح التعليمة البرمجية التالية كيفية إنشاء طلب إعادة اتصال:
Kotlin
private fun createLowLightBoostCallback(): LowLightBoostCallback =
object : LowLightBoostCallback() {
override fun onSessionDestroyed() {
Log.d(TAG, "onSessionDestroyed")
lowLightBoostSession = null
}
override fun onSessionDisconnected(statusCode: Int) {
Log.d(TAG, "onSessionDisconnected: error=$statusCode")
lowLightBoostSession = null
}
}
Java
private LowLightBoostCallback createLowLightBoostCallback() {
LowLightBoostCallback lowLightBoostCallback = new LowLightBoostCallback() {
@Override
public void onSessionDestroyed() {
Log.d(TAG, "onSessionDestroyed");
lowLightBoostSession = null;
}
@Override
public void onSessionDisconnected(int statusCode) {
Log.d(TAG, "onSessionCreationFailed: error=" + statusCode);
lowLightBoostSession = null;
}
}
return lowLightBoostCallback;
}
النقاط الرئيسية حول هذا الرمز
- يحدّد هذا الرمز طريقة خاصة، وهي
createLowLightBoostCallback()
، والتي تنشئ عنصر ردّ الاتصال. ستستدعي هذه الطريقة عند إنشاء جلسة تحسين الإضاءة المنخفضة، كما هو موضّح في إنشاء جلسة. - يتمّ استدعاء دالة ردّ الاتصال عند انقطاع الاتّصال بالجلسة أو إزالتها. ولا يتم استدعاؤه عند إنشاء الجلسة. للتحقّق مما إذا تم
إنشاء الجلسة بنجاح، راجِع عنصر
Task
الذي تم إرجاعه من الدوالّ التالية:LowLightBoostClient.createSession
.
إنشاء جلسة
لإنشاء جلسة في الإضاءة المنخفضة، استخدِم الطريقة
LowLightBoostClient.createSession
.
Kotlin
val options = LowLightBoostOptions(
previewSurface,
cameraId,
previewWidth,
previewHeight,
enableLowLightBoost
)
launch {
try {
val lowLightBoostSession = lowLightBoostClient
.createSession(options, createLowLightBoostCallback()).await()
Log.d(TAG, "Session created successfully")
// Get the surface from the LLB session;
// give it to camera so camera can write frames to it
} catch (e: CancellationException) {
Log.w(TAG, "Session creation was canceled", e)
lowLightBoostSession = null
} catch (e: ApiException) {
Log.e(TAG, "Session creation failed with ApiException:", e)
lowLightBoostSession = null
} catch (e: Exception) {
Log.e(TAG, "Session creation failed with Exception", e)
lowLightBoostSession = null
}
}
Java
LowLightBoostOptions options = new LowLightBoostOptions(
previewSurface,
cameraId,
previewWidth,
previewHeight,
enableLowLightBoost);
lowLightBoostClient
.createSession(options, createLowLightBoostCallback())
.addOnSuccessListener(
lowLightBoostExecutor,
(session) -> {
Log.d(TAG, "Session created successfully");
// Get the surface from the LLB session;
// give it to camera so camera can write frames to it
})
.addOnFailureListener(
lowLightBoostExecutor,
(e) -> {
ApiException apiException = (ApiException) e;
Log.d(TAG, "Session creation failed: " + e);
lowLightBoostSession = null;
})
.addOnCompleteListener(
lowLightBoostExecutor,
(task) -> Log.d(TAG, "Session creation complete"))
.addOnCanceledListener(
lowLightBoostExecutor,
() -> {
throw new RuntimeException("Session creation canceled");
});
النقاط الرئيسية حول هذا الرمز
- يمكنك تمرير عنصر
LowLightBoostOptions
إلىcreateSession()
لمحاولة ضبط الجلسة. يحدِّد هذا العنصر عناصر مثل سطح الهدف ومعرّف الكاميرا المطلوب استخدامها وأبعاد المعاينة. - يفترض هذا الرمز أنّك سبق لك فتح اتصال بكاميرا Camera2،
واستخدام هذه المعلومات لضبط قيم
cameraId, previewWidth, previewHeight
. لمزيد من المعلومات، يُرجى الاطّلاع على مستندات Camera2. -
enableLowLightBoost
هي قيمة منطقية تحدّد ما إذا كان يجب تفعيل ميزة "تحسين الإضاءة المنخفضة" أو إيقافها. createLowLightBoostCallback
هي طريقة تكتبها لإنشاء ملف callback. يتمّ استدعاء هذا العنصر عند انقطاع الاتصال بالجلسة أو إزالتها.- تُعرِض الطريقة
LowLightBoostClient.createSession()
عنصرTask
. يمكنك استخدام هذا الكائن لإعداد مستمعي حالات النجاح والفشل. التقاط الفيديو داخل مستمع النجاح - يمكنك تحديد
Executor
لتشغيل المستمعين. في حال عدم تحديدExecutor
، يتم تشغيل المستمعين في سلسلة التعليمات الرئيسية. في هذا الرمز، نفترض أنّlowLightBoostExecutor
هوExecutor
مناسب.
بدء معاينة الكاميرا
بعد إنشاء جلسة في الإضاءة المنخفضة، يمكنك بدء بث معاينة الكاميرا. يجب إجراء
ذلك داخل دالة onSuccess()
التي يتم تمريرها إلى جلسة الإضاءة المنخفضة، كما هو описан في إنشاء جلسة. يوضّح الرمز البرمجي التالي كيفية تسجيل
فيديو:
Kotlin
MainActivity.this.lowLightBoostSession =
lowLightBoostSession
MainActivity.this.lowLightBoostSession
.setSceneDetectorCallback(
(lowLightBoostSession, boostStrength) -> {
Log.d(TAG, "onSceneBrightnessChanged: " +
"boostStrength=$boostStrength")
// boostStrength > 0.5 indicates a low light scene.
// Update UI accordingly.
},
lowLightBoostExecutor
)
try {
startCaptureSession(
lowLightBoostSession.getCameraSurface())
// Start a Camera2 session here. Pass the LLB surface
// to the camera so the camera can write frames to it.
} catch (e: CameraAccessException) {
Log.e(TAG, "Failed to start capture session", e)
// Must try again or start the capture session without LLB.
}
Java
MainActivity.this.lowLightBoostSession =
lowLightBoostSession;
MainActivity.this.lowLightBoostSession
.setSceneDetectorCallback(
(lowLightBoostSession, boostStrength) -> {
Log.d(TAG, "onSceneBrightnessChanged: " +
"boostStrength=" + boostStrength);
// boostStrength > 0.5 indicates a low light scene.
// Update UI accordingly.
},
lowLightBoostExecutor
);
try {
startCaptureSession(
lowLightBoostSession.getCameraSurface());
// Start a Camera2 session here. Pass the LLB surface
// to the camera so the camera can write frames to it.
} catch (CameraAccessException e) {
Log.e(TAG, "Failed to start capture session", e);
// Must try again or start the capture session without LLB.
}
النقاط الرئيسية حول هذا الرمز
lowLightBoostSession
هي الجلسة التي أنشأتها في إنشاء جلسة.- تحدِّد
setSceneDetectorCallback()
عنصرًا للرجوع إليه ينفذ واجهةSceneDetectorCallback
. تستدعي الجلسة طريقةonSceneBrightnessChanged()
لهذا الكائن عند تغيُّر سطوع المشهد. من المفترض أن يؤدي التنفيذ إلى تعديل واجهة مستخدم الكاميرا بشكل مناسب. - يمكنك تحديد
Executor
لتشغيل دالة الاستدعاء. إذا لم يتم تحديدExecutor
، سيتم تنفيذ دالة الاستدعاء في سلسلة المحادثات الرئيسية. في هذا الرمز، نفترض أنّlowLightBoostExecutor
هوExecutor
مناسب. - يعرض
lowLightBoostSession.getCameraSurface()
الرمزSurface
مع الفيديو الذي تم تسجيله.
إنهاء الجلسة
عندما تتوقف الكاميرا عن العمل، يمكنك إنهاء جلسة تحسين الرؤية في الإضاءة المنخفضة من خلال
طلب LowLightBoostSession.release()
. وعلى وجه الخصوص، يجب التأكّد من
إلغاء الجلسة عند إتلاف نشاطك. يمكنك إجراء ذلك من خلال استدعاء
الطريقة في طريقة onDestroy()
لنشاطك:
Kotlin
override protected void onDestroy() {
super.onDestroy()
if (lowLightBoostSession != null) {
lowLightBoostSession.release()
lowLightBoostSession = null
}
}
Java
@Override
protected void onDestroy() {
super.onDestroy();
if (lowLightBoostSession != null) {
lowLightBoostSession.release();
lowLightBoostSession = null;
}
}
النقاط الرئيسية حول هذا الرمز
- بعد إنهاء الجلسة، يجب عدم استدعاء أي من طرقها. عليك محو أي متغيّرات تشير إلى الجلسة، كما يفعل هذا الرمز.