یک کلاینت تقویت کننده نور کم ایجاد و استفاده کنید، یک کلاینت تقویت کننده نور کم ایجاد و استفاده کنید

برای استفاده از Google Low Light Boost، به یک کلاینت Low Light Boost نیاز دارید. می‌توانید از کلاینت برای بررسی نصب بودن ماژول Low Light Boost و همچنین پشتیبانی Google Low Light Boost توسط دستگاه و دوربینی که برنامه شما روی آن اجرا می‌شود، استفاده کنید. همچنین از کلاینت برای ایجاد یک LowLightBoostSession استفاده خواهید کرد. ( از این session برای روشن و خاموش کردن Low Light Boost استفاده خواهید کرد .) همچنین می‌توانید یک listener برای دریافت callbackها در هنگام فعال بودن Low Light Boost تنظیم کنید.

متدهای 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 سرویس‌های گوگل پلی ارائه می‌شود. برای اطلاعات بیشتر در مورد دسترسی به APIهای سرویس‌های گوگل پلی، به مستندات سرویس‌های گوگل پلی مراجعه کنید.

ایجاد یک کلاینت

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

کاتلین

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() برای تنظیم یک شنونده (listener) استفاده کنید که در صورت موفقیت‌آمیز بودن فراخوانی isModuleInstalled() فراخوانی می‌شود. نکته مهم این است که اگر شنونده success فراخوانی شود، فقط به شما می‌گوید که کلاینت در تشخیص نصب ماژول روی دستگاه موفق بوده است. در بدنه شنونده خود، باید بررسی کنید که آیا ماژول واقعاً نصب شده است یا خیر.
  • اگر ماژول از قبل نصب نشده باشد، این قطعه کد با فراخوانی متد launchInstallRequest() آن را نصب می‌کند. این متد در قطعه کد مربوط به Install the low light boost module تعریف شده است.

ماژول تقویت نور کم را نصب کنید

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

کاتلین

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() را فراخوانی می‌کنید، یک شیء callback ارسال می‌کنید که LowLightBoostClient.InstallStatusCallback را پیاده‌سازی می‌کند. installModule() در آن callback، متدهایی را برای نشان دادن وضعیت دانلود فراخوانی می‌کند. برای مثال، اگر دانلود متوقف شده باشد، installModule() متد onDownloadPause() شیء callback را فراخوانی می‌کند.
  • در این قطعه کد، شیء callback توسط متد 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() بررسی می‌کند که آیا دستگاه و سیستم عامل اندروید از Google Low Light Boost پشتیبانی می‌کنند یا خیر. در غیر این صورت، ماژول را دانلود نکنید.

  • متد LowLightBoostClient.installModule() یک شیء Task برمی‌گرداند. شما از این شیء برای تنظیم شنونده‌های موفقیت و شکست استفاده می‌کنید.

  • وقتی نصب تمام شد، شنونده‌ی موفقیت با باز کردن دوربین، نصب را تأیید می‌کند. در قطعه کد، این کار با فراخوانی openCamera() انجام می‌شود. شما باید خودتان آن متد را بنویسید.