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

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

لا تشير طرق LowLightBoostClient إلى النجاح أو الفشل مباشرةً. بدلاً من ذلك، يعرضون عنصر Task. يمكنك استخدام Task لإعداد مراقبي حالات النجاح أو الفشل. يتيح ذلك للطرق الإشارة إلى النجاح أو الفشل بشكل غير متزامن، وهو أمر ضروري لأنّ الطرق تحتاج إلى التواصل مع "خدمات Google Play".

التبعيات

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"LowLightBoostClient 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

// 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(). عليك كتابة هذه الطريقة بنفسك.

التحقّق مما إذا كانت ميزة "تحسين الإضاءة المنخفضة" متاحة

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

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. يمكنك استخدام هذا الكائن لإعداد مستمعي حالات النجاح والفشل. أنشئ جلسة تحسين الإضاءة المنخفضة داخل مستمع الطلبات الناجحة.