कम रोशनी वाले मोड को बेहतर बनाने वाला क्लाइंट बनाना और उसका इस्तेमाल करना

Google के कम रोशनी वाले मोड का इस्तेमाल करने के लिए, आपको कम रोशनी वाले मोड का क्लाइंट चाहिए. क्लाइंट का इस्तेमाल करके, यह देखा जा सकता है कि कम रोशनी में बेहतर फ़ोटो लेने की सुविधा वाला मॉड्यूल इंस्टॉल है या नहीं. साथ ही, यह भी देखा जा सकता है कि आपके ऐप्लिकेशन के साथ काम करने वाले डिवाइस और कैमरे पर, Google की कम रोशनी में बेहतर फ़ोटो लेने की सुविधा काम करती है या नहीं. LowLightBoostSession बनाने के लिए भी क्लाइंट का इस्तेमाल किया जाएगा. (कम रोशनी में बूस्ट करने की सुविधा को चालू और बंद करने के लिए, आपको सेशन का इस्तेमाल करना होगा.) कम रोशनी में बेहतर फ़ोटो लेने की सुविधा चालू होने पर, कॉलबैक पाने के लिए, एक लिसनर भी सेट अप किया जा सकता है.

LowLightBoostClient तरीके, सीधे तौर पर सफलता या गड़बड़ी का सिग्नल नहीं देते. इसके बजाय, ये Task ऑब्जेक्ट दिखाते हैं. सफलता और असफलता के लिसनर सेट अप करने के लिए, Task का इस्तेमाल किया जाता है. इससे, इन तरीकों को असाइनमेंट पूरा होने या न होने के बारे में अलग-अलग समय पर सिग्नल भेजने में मदद मिलती है. ऐसा करना ज़रूरी है, क्योंकि इन तरीकों को Google Play services के साथ इंटरैक्ट करना होता है.

डिपेंडेंसी

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

Groovy

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

LowLightBoostClient, Google Play services के com.google.android.gms.cameralowlight पैकेज से मिलता है. Google Play services के एपीआई ऐक्सेस करने के बारे में जानकारी के लिए, Google Play services का दस्तावेज़ देखें.

क्लाइंट बनाना

इसके अलावा, कुछ और करने के लिए, आपको कम रोशनी में बेहतर फ़ोटो लेने की सुविधा देने वाले क्लाइंट की ज़रूरत होगी. नीचे दिया गया कोड, क्लाइंट बनाता है:

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() पर कॉल करने पर, कॉल किया जाए. अहम बात यह है कि अगर सफलता के बारे में बताने वाले लिसनर को कॉल किया जाता है, तो इससे आपको सिर्फ़ यह पता चलता है कि क्लाइंट को यह पता चल गया है कि डिवाइस पर मॉड्यूल इंस्टॉल है या नहीं. आपको अपने listener के मुख्य हिस्से में यह देखना होगा कि मॉड्यूल असल में इंस्टॉल है या नहीं.
  • अगर मॉड्यूल पहले से इंस्टॉल नहीं है, तो यह स्निपेट launchInstallRequest() तरीके को कॉल करके उसे इंस्टॉल करता है. इस तरीके के बारे में कम रोशनी वाले मोड को बेहतर बनाने वाला मॉड्यूल इंस्टॉल करें स्निपेट में बताया गया है.

कम रोशनी वाला मोड इंस्टॉल करना

अगर डिवाइस पर पहले से ही कम रोशनी में बेहतर फ़ोटो लेने की सुविधा वाला मॉड्यूल इंस्टॉल नहीं है, तो आपको इसे Google Play services से डाउनलोड और इंस्टॉल करना होगा. इस कोड में, ऐसा करने का तरीका बताया गया है:

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 Low Light Boost की सुविधा काम करती है या नहीं. अगर ऐसा नहीं है, तो मॉड्यूल डाउनलोड न करें.

  • 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 Camera का आईडी माना जाता है, जिसे किसी दूसरी जगह बनाया गया है.
  • LowLightBoostClient.isCameraSupported() यह जांच करता है कि Camera2 कैमरा, कम रोशनी में बेहतर फ़ोटो लेने की सुविधा के साथ काम करता है या नहीं. कुछ मामलों में, हो सकता है कि डिवाइस पर कम रोशनी में बेहतर फ़ोटो लेने की सुविधा काम करे, लेकिन उसके किसी कैमरे पर काम न करे. इसलिए, आपको दोनों की जांच करनी होगी.
  • LowLightBoostClient.isCameraSupported() तरीका, एक Task ऑब्जेक्ट दिखाता है. इस ऑब्जेक्ट का इस्तेमाल, सफलता और गड़बड़ी के बारे में सूचना देने वाले लिसनर सेट अप करने के लिए किया जाता है. सफलता सुनने वाले फ़ंक्शन में, कम रोशनी वाला बूस्ट सेशन बनाएं.