إنشاء عملاء ميزة "تحسين الإضاءة المنخفضة" واستخدامها

لاستخدام ميزة "تحسين الإضاءة المنخفضة" من Google، يجب أن يكون لديك عميل ميزة "تحسين الإضاءة المنخفضة". يمكنك استخدام العميل للتحقّق مما إذا كانت وحدة تحسين الإضاءة المنخفضة مثبّتة، وما إذا كانت ميزة "تحسين الإضاءة المنخفضة" من Google متاحة على الجهاز والكاميرا اللذين يعمل عليهما تطبيقك. ستستخدم أيضًا العميل لإنشاء LowLightBoostSession. (ستستخدم الجلسة لتفعيل ميزة "تحسين الإضاءة المنخفضة" وإيقافها). يمكنك أيضًا إعداد مستمع لتلقّي عمليات استدعاء عندما تكون ميزة "تحسين الإضاءة المنخفضة" مفعَّلة.

لا تشير طرق 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 من خلال حزمة "خدمات Google Play" com.google.android.gms.cameralowlight. يمكنك الاطّلاع على مستندات "خدمات Google Play" للحصول على معلومات حول الوصول إلى واجهات برمجة تطبيقات "خدمات Google Play".

إنشاء عميل

يجب استخدام برنامج "تحسين الإضاءة المنخفضة" لتنفيذ أي إجراء آخر. ينشئ الرمز التالي عميلاً:

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().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(). من المهم معرفة أنّه إذا تم استدعاء مستمع النجاح، فهذا يعني أنّ العميل نجح في معرفة ما إذا كانت الوحدة مثبّتة على الجهاز. في نص المستمع، عليك التحقّق مما إذا كانت الوحدة مثبّتة أم لا.
  • إذا لم تكن الوحدة مثبَّتة، يثبّتها هذا المقتطف من خلال استدعاء الطريقة launchInstallRequest(). يتم تحديد هذه الطريقة في المقتطف ضمن مقالة تثبيت وحدة تحسين الإضاءة المنخفضة.

تثبيت وحدة تحسين الإضاءة المنخفضة

إذا لم تكن وحدة تحسين الإضاءة المنخفضة مثبّتة على الجهاز، عليك تنزيلها وتثبيتها من "خدمات Google Play". يوضّح الرمز التالي كيفية إجراء ذلك:

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().await()

        if (isDeviceSupported) {
            Log.d(TAG, "Device is supported")
            // Show download indicator, if needed.

            try {
                val isInstallSuccessful: Boolean = lowLightBoostClient
                    .installModule(
                        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(). عليك كتابة هذه الطريقة بنفسك.