একটি কম আলো বুস্ট ক্লায়েন্ট তৈরি করুন এবং ব্যবহার করুন, একটি কম আলো বুস্ট ক্লায়েন্ট তৈরি করুন এবং ব্যবহার করুন

গুগল লো লাইট বুস্ট ব্যবহার করার জন্য আপনার একটি লো লাইট বুস্ট ক্লায়েন্ট প্রয়োজন হবে। লো লাইট বুস্ট মডিউলটি ইনস্টল করা আছে কিনা, এবং আপনার অ্যাপটি যে ডিভাইস ও ক্যামেরায় চলছে তাতে গুগল লো লাইট বুস্ট সমর্থিত কিনা, তা পরীক্ষা করার জন্য আপনি ক্লায়েন্টটি ব্যবহার করতে পারেন। একটি LowLightBoostSession তৈরি করার জন্যও আপনি ক্লায়েন্টটি ব্যবহার করবেন। (লো লাইট বুস্ট চালু এবং বন্ধ করার জন্য আপনি এই সেশনটি ব্যবহার করবেন ।) লো লাইট বুস্ট সক্রিয় থাকাকালীন কলব্যাক পাওয়ার জন্য আপনি একটি লিসেনারও সেট আপ করতে পারেন।

LowLightBoostClient মেথডগুলো সরাসরি সাফল্য বা ব্যর্থতার সংকেত দেয় না। পরিবর্তে, এগুলো একটি Task অবজেক্ট রিটার্ন করে। সাফল্য এবং ব্যর্থতার লিসেনার সেট আপ করার জন্য একটি Task ব্যবহার করা হয়। এটি মেথডগুলোকে অ্যাসিঙ্ক্রোনাসভাবে সাফল্য বা ব্যর্থতার সংকেত দিতে সাহায্য করে, যা প্রয়োজনীয় কারণ মেথডগুলোকে গুগল প্লে সার্ভিসের সাথে যোগাযোগ করতে হয়।

নির্ভরশীলতা

কোটলিন

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 Google Play services-এর com.google.android.gms.cameralowlight প্যাকেজের মাধ্যমে সরবরাহ করা হয়। Google Play services API-গুলো অ্যাক্সেস করার তথ্যের জন্য Google Play services-এর ডকুমেন্টেশন দেখুন।

একজন ক্লায়েন্ট তৈরি করুন

অন্য কিছু করার জন্য আপনার একটি লো লাইট বুস্ট ক্লায়েন্ট প্রয়োজন। নিম্নলিখিত কোডটি একটি ক্লায়েন্ট তৈরি করে:

কোটলিন

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 অবজেক্ট রিটার্ন করে। সফলতা এবং ব্যর্থতার লিসেনার সেট আপ করার জন্য এই অবজেক্টটি ব্যবহার করা হয়।
  • isModuleInstalled() কলটি সফল হলে যে লিসেনারটি কল করা হবে, সেটি সেট আপ করতে Task.addOnSuccessListener() ব্যবহার করুন। গুরুত্বপূর্ণ বিষয় হলো, যদি সাকসেস লিসেনারটি কল করা হয়, তবে তা শুধু এটাই জানায় যে ক্লায়েন্ট ডিভাইসে মডিউলটি ইনস্টল করা আছে কিনা তা খুঁজে বের করতে সফল হয়েছে। আপনার লিসেনারের বডিতে, মডিউলটি আসলেই ইনস্টল করা আছে কিনা তা আপনাকে যাচাই করতে হবে।
  • যদি মডিউলটি আগে থেকে ইনস্টল করা না থাকে, তাহলে এই কোড স্নিপেটটি 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() কল করেন, তখন আপনি একটি কলব্যাক অবজেক্ট পাস করেন, যেটি 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() যাচাই করে দেখে যে অ্যান্ড্রয়েড-চালিত ডিভাইস এবং অপারেটিং সিস্টেম গুগল লো লাইট বুস্ট সমর্থন করে কি না। যদি না করে, তাহলে মডিউলটি ডাউনলোড করবেন না।

  • LowLightBoostClient.installModule() মেথডটি একটি Task অবজেক্ট রিটার্ন করে। সফলতা এবং ব্যর্থতার লিসেনার সেট আপ করার জন্য এই অবজেক্টটি ব্যবহার করা হয়।

  • ইনস্টলেশন শেষ হলে, সাকসেস লিসেনারটি ক্যামেরা খুলে ইনস্টলেশনটি যাচাই করে। এই কোড স্নিপেটে, এটি openCamera() কল করার মাধ্যমে করা হয়েছে। আপনাকে ওই মেথডটি নিজে লিখতে হবে।