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

لاستخدام ميزة "تحسين الإضاءة المنخفضة" من 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")
}

Groovy

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