ایجاد و استفاده از کارخواه تقویت نور کم

برای استفاده از «تقویت نور کم Google»، به کارخواه تقویت نور کم نیاز دارید. می‌توانید از کارخواه برای بررسی نصب بودن واحد تقویت نور کم و بررسی اینکه آیا «تقویت نور کم Google» توسط دستگاه و دوربینی که برنامه‌تان در آن اجرا می‌شود پشتیبانی می‌شود یا نه استفاده کنید. همچنین از کلاینت برای ایجاد LowLightBoostSession استفاده خواهید کرد. (از جلسه برای روشن و خاموش کردن تقویت نور کم استفاده خواهید کرد.) همچنین می‌توانید شنونده‌ای راه‌اندازی کنید تا وقتی «بهبود در نور کم» فعال است، تماس‌های برگشتی را دریافت کند.

روش‌های LowLightBoostClient مستقیماً موفقیت یا شکست را نشان نمی‌دهند. درعوض، شیء Task را برمی‌گردانند. از Task برای راه‌اندازی شنوندگان موفقیت و شکست استفاده می‌کنید. این کار به روش‌ها اجازه می‌دهد موفقیت یا شکست را به‌صورت ناهمگام علامت‌گذاری کنند، که ضروری است زیرا روش‌ها باید با خدمات Google Play ارتباط برقرار کنند.

وابستگی‌ها

کاتلین

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» ارائه می‌شود. برای کسب اطلاعات درباره دسترسی به میاناهای برنامه‌سازی کاربردی خدمات Google Play، به اسناد خدمات Google Play مراجعه کنید.

ایجاد مشتری

برای انجام هر کار دیگری به کارخواه تقویت نور کم نیاز دارید. کد زیر کارخواهی ایجاد می‌کند:

کاتلین

val lowLightBoostClient = LowLightBoost.getClient(context)

جاوا

LowLightBoostClient lowLightBoostClient = LowLightBoost.getClient(context);

نکات کلیدی درباره این کد

  • کلاس LowLightBoost روش ایستا getClient را ارائه می‌دهد که نمونه‌ای از LowLightBoostClient را برمی‌گرداند.

بررسی کنید آیا تقویت نور کم پشتیبانی می‌شود یا نه

وقتی کارخواه را داشتید، می‌توانید بررسی کنید که آیا دستگاهی که برنامه در آن اجرا می‌شود از تقویت نور کم پشتیبانی می‌کند یا نه. کد زیر بررسی می‌کند که آیا تقویت نور کم پشتیبانی می‌شود یا نه:

کاتلین

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)
  }
}

جاوا

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 برمی‌گرداند. از این شیء برای راه‌اندازی شنوندگان موفقیت و شکست استفاده می‌کنید. ایجاد جلسه تقویت نور کم در شنونده موفقیت.

بررسی کنید که آیا واحد تقویت نور کم نصب شده است یا نه

وقتی کارخواه را داشتید، می‌توانید بررسی کنید که آیا واحد تقویت نور کم در دستگاهتان نصب شده است یا نه. کد زیر بررسی می‌کند که آیا واحد نصب شده است یا نه:

کاتلین

// 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)
  }
}

جاوا

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 بارگیری و نصب کنید. این کد نحوه انجام این کار را نشان می‌دهد:

کاتلین

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)
  }
}

جاوا

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() ایجاد می‌شود. باید خودتان آن روش را بنویسید، چیزی شبیه به این:

کاتلین

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...
  }

جاوا

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() انجام می‌شود. باید خودتان آن روش را بنویسید.