অডিও গ্লাস ও ডিসপ্লে গ্লাসের জন্য হার্ডওয়্যার সংক্রান্ত অনুমতির অনুরোধ করা

প্রযোজ্য XR ডিভাইস
এই নির্দেশিকা আপনাকে এই ধরনের XR ডিভাইসের জন্য অভিজ্ঞতা তৈরি করতে সাহায্য করে।
অডিও ও
ডিসপ্লে গ্লাস

ফোনের মতোই, অডিও গ্লাস ও ডিসপ্লে গ্লাসের ক্যামেরার মতো সংবেদনশীল হার্ডওয়্যার অ্যাক্সেস করার জন্য ব্যবহারকারীর স্পষ্ট সম্মতি প্রয়োজন। এগুলিকে চশমা-নির্দিষ্ট অনুমতি হিসেবে বিবেচনা করা হয় এবং আপনার অ্যাপকে অবশ্যই রানটাইমে এগুলির জন্য অনুরোধ করতে হবে, এমনকি ফোনে আগে থেকেই সংশ্লিষ্ট অনুমতি থাকলেও।

আপনার অ্যাপের ম্যানিফেস্টে অনুমতি ঘোষণা করুন

অনুমতির অনুরোধ করার আগে, আপনাকে অবশ্যই <uses-permission> এলিমেন্ট ব্যবহার করে আপনার অ্যাপের ম্যানিফেস্ট ফাইলে সেগুলি ঘোষণা করতে হবে। এই ঘোষণা একই থাকে, অনুমতি ফোন বা চশমা-নির্দিষ্ট ফিচারের জন্য হলেও, তবে আপনাকে এখনও চশমা-নির্দিষ্ট হার্ডওয়্যার বা কার্যকারিতার জন্য স্পষ্টভাবে অনুরোধ করতে হবে।

<manifest ...>
    <!-- Only declare permissions that your app actually needs. In this example,
    we declare permissions for the camera. -->
    <uses-permission android:name="android.permission.CAMERA"/>
    <application ...>
        ...
    </application>
</manifest>

স্মার্ট গ্লাসের জন্য অনুমতি চাওয়ার আগে

ব্যবহারকারীদের সেরা অভিজ্ঞতা প্রদান করতে অনুমতি সংক্রান্ত নীতি ও ওয়ার্কফ্লো পর্যালোচনা করুন, যেমন ব্যবহারকারী আপনার অ্যাপের জন্য প্রয়োজনীয় রানটাইম অনুমতি আগে থেকেই দিয়েছেন কিনা এবং চশমা-নির্দিষ্ট অনুমতির অনুরোধ করার আগে আপনার অ্যাপের ব্যবহারকারীকে কোনও যুক্তি দেখানো উচিত কিনা তা চেক করা।

অনুমতি সংক্রান্ত পরিস্থিতি

অডিও ও ডিসপ্লে গ্লাসে বিপজ্জনক রানটাইম অনুমতির অনুরোধ করার সময় আপনি বিভিন্ন পরিস্থিতির সম্মুখীন হতে পারেন:

  • প্রোজেক্ট করা অ্যাক্টিভিটি থেকে রানটাইম অনুমতির অনুরোধ করা
  • ফোন অ্যাক্টিভিটি থেকে রানটাইম অনুমতির অনুরোধ করা

প্রতিটি পরিস্থিতি সম্পর্কে বিস্তারিত জানতে এই গাইডের নিম্নলিখিত বিভাগগুলি দেখুন।

প্রোজেক্ট করা অ্যাক্টিভিটি থেকে রানটাইম অনুমতির অনুরোধ করা

প্রোজেক্ট করা অ্যাক্টিভিটি থেকে অডিও বা ডিসপ্লে গ্লাসের জন্য রানটাইম অনুমতির অনুরোধ করতে, ProjectedActivityCompat.requestPermissions পদ্ধতি ব্যবহার করুন।

এই পদ্ধতি কল করলে, চশমা ও হোস্ট ফোন, দুটিতেই কোঅর্ডিনেট করা ব্যবহারকারী ফ্লো ট্রিগার হয়।

  1. চশমায়: সিস্টেম চশমায় একটি প্রোজেক্ট করা কম্প্যানিয়ন অ্যাক্টিভিটি খোলে, ব্যবহারকারীকে অনুমতির অনুরোধের উত্তর দিতে তার ফোন চেক করার নির্দেশ দেয়।
  2. ফোনে: ফোনের স্ক্রিনে Android সিস্টেমের অনুমতি সংক্রান্ত ডায়ালগ দেখা যায়। ডায়ালগ থেকে স্পষ্টভাবে বোঝা যায় যে ব্যবহারকারী ফোনের পরিবর্তে glasses-এর জন্য অনুমতি দিচ্ছেন। ব্যবহারকারী তখন অনুরোধে সম্মতি দিতে বা তা বাতিল করতে পারবেন।

প্রজেক্ট করা অ্যাক্টিভিটি থেকে কীভাবে চশমার অনুমতি চাইতে হয় তা নিম্নলিখিত উদাহরণ থেকে দেখুন:

@RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
private fun requestCameraPermission() {
    lifecycleScope.launch {
        try {
            ProjectedActivityCompat.requestPermissions(
                this@PermissionsFromProjectedActivity,
                arrayOf(Manifest.permission.CAMERA),
                // CAMERA_PERMISSION_REQUEST_CODE is a developer defined constant
                CAMERA_PERMISSION_REQUEST_CODE,
            )
        } catch (e: IllegalStateException) {
            // Thrown when the projected system service can't be bound.
            Log.e(TAG, "Camera permission request failed: projected service unavailable.", e)
        }
    }
}

কোড সম্পর্কে গুরুত্বপূর্ণ পয়েন্ট

  • স্ট্যান্ডার্ড ActivityCompat পদ্ধতির পরিবর্তে ProjectedActivityCompat.requestPermissions ব্যবহার করুন। এই পদ্ধতিটি হোস্ট ফোনের পরিবর্তে অডিও এবং ডিসপ্লে গ্লাসের জন্য রানটাইম অনুমতিকে স্পষ্টভাবে টার্গেট করে।

অনুমতির ফলাফল ম্যানেজ করুন

ব্যবহারকারী ফোনে অনুমতির ডায়ালগে উত্তর দিলে, তার সিদ্ধান্ত onRequestPermissionsResult কলব্যাক চালু করার মাধ্যমে আপনার অ্যাপে পাঠানো হয়।

সিস্টেম অটোমেটিক প্রোজেক্ট করা কম্প্যানিয়ন অ্যাক্টিভিটি বন্ধ করে দেয়। অডিও গ্লাসে, অডিও সতর্কতা বাজানো শেষ হওয়ার পরে এটি ঘটে। ডিসপ্লে গ্লাসে, ব্যবহারকারী সব অনুমতি ডায়ালগের উত্তর দেওয়ার পরে এটি হয়।

উত্তর ম্যানেজ করতে, অনুমতির অনুরোধ শুরু করা Activity ইনস্ট্যান্সের মধ্যে onRequestPermissionsResult() ওভাররাইড করুন।

নিম্নলিখিত কোড স্নিপেট থেকে বোঝা যায় যে কীভাবে কলব্যাক ম্যানেজ করতে হয় এবং ব্যবহারকারী অনুরোধ করা অনুমতি দিয়েছেন কিনা তা যাচাই করতে হয়:

@RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
override fun onRequestPermissionsResult(
    requestCode: Int,
    permissions: Array<String>,
    grantResults: IntArray,
    deviceId: Int,
) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults, deviceId)
    if (requestCode != CAMERA_PERMISSION_REQUEST_CODE) return

    val isCameraGranted =
        grantResults.getOrNull(permissions.indexOf(Manifest.permission.CAMERA)) ==
            PackageManager.PERMISSION_GRANTED

    if (isCameraGranted) {
        initializeCameraFeatures()
    } else {
        onCameraPermissionDenied()
    }
}

কোড সম্পর্কে গুরুত্বপূর্ণ পয়েন্ট
  • onRequestPermissionsResult কলব্যাকের সাথে deviceId ওভারলোড ব্যবহার করুন যাতে হোস্ট ফোনের পরিবর্তে অডিও বা ডিসপ্লে গ্লাসের মতো নির্দিষ্ট প্রসঙ্গের সাথে অনুমতির স্ট্যাটাস সঠিকভাবে ম্যাপ করা হয়েছে কিনা তা নিশ্চিত করা যায়।
  • আপনার অ্যাপকে অনুমতি দেওয়া ও প্রত্যাখ্যান করা, উভয় ফলাফলই মার্জিতভাবে ম্যানেজ করতে হবে।

ফোন অ্যাক্টিভিটিতে রানটাইম অনুমতির অনুরোধ করা

আপনার অ্যাপ যদি ফোন অ্যাক্টিভিটিতে রান করে কিন্তু অডিও বা ডিসপ্লে গ্লাসের জন্য অনুমতির প্রয়োজন হয়—যেমন, ব্যবহারকারীকে ভিডিও স্ট্রিম থেকে গ্লাসের ক্যামেরায় সুইচ করার অনুমতি দেওয়া যাতে তিনি ফার্স্ট-পার্সন পয়েন্ট অফ ভিউ পান—তাহলে ডিভাইস-নির্দিষ্ট Activity#requestPermissions(permissions, requestCode, deviceId) পদ্ধতি ব্যবহার করে অনুমতির অনুরোধ করুন:

// Request the projected permission from phone activity
requestPermissions(
    arrayOf(Manifest.permission.CAMERA),
    // REQUEST_CODE_GLASSES_CAMERA is a developer-defined constant
    REQUEST_CODE_GLASSES_CAMERA,
    projectedDeviceId
)

কোড সম্পর্কে গুরুত্বপূর্ণ পয়েন্ট

  • অডিও ও ডিসপ্লে গ্লাস টার্গেট করতে, createProjectedDeviceContext ব্যবহার করে আপনার তৈরি করা প্রজেক্টেড কনটেক্সট থেকে উপযুক্ত ডিভাইস আইডি পান। requestPermissions মেথডে কল করার সময় এই আইডি পাস করুন।

অনুমতির ফলাফল ম্যানেজ করুন

ব্যবহারকারী ফোনে অনুমতির ডায়ালগে উত্তর দিলে, তার সিদ্ধান্ত onRequestPermissionsResult কলব্যাক চালু করার মাধ্যমে আপনার অ্যাপে পাঠানো হয়।

উত্তর ম্যানেজ করতে, অনুমতির অনুরোধ শুরু করা Activity ইনস্ট্যান্সের মধ্যে onRequestPermissionsResult ওভাররাইড করুন।

নিম্নলিখিত কোড স্নিপেট থেকে বোঝা যায় যে কীভাবে কলব্যাক ম্যানেজ করতে হয় এবং ব্যবহারকারী অনুরোধ করা অনুমতি দিয়েছেন কিনা তা যাচাই করতে হয়:

@RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
override fun onRequestPermissionsResult(
    requestCode: Int,
    permissions: Array<String>,
    grantResults: IntArray,
    deviceId: Int,
) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults, deviceId)
    if (requestCode != CAMERA_PERMISSION_REQUEST_CODE) return

    val isCameraGranted =
        grantResults.getOrNull(permissions.indexOf(Manifest.permission.CAMERA)) ==
            PackageManager.PERMISSION_GRANTED

    if (isCameraGranted) {
        initializeCameraFeatures()
    } else {
        onCameraPermissionDenied()
    }
}

কোড সম্পর্কে গুরুত্বপূর্ণ পয়েন্ট
  • onRequestPermissionsResult কলব্যাকের সাথে deviceId ওভারলোড ব্যবহার করুন যাতে অনুমতির স্ট্যাটাস নির্দিষ্ট প্রসঙ্গের সাথে সঠিকভাবে ম্যাপ করা যায়, যেমন হোস্ট ফোনের পরিবর্তে অডিও বা ডিসপ্লে গ্লাস।
  • আপনার অ্যাপকে অনুমতি দেওয়া ও প্রত্যাখ্যান করা, উভয় ফলাফলই মার্জিতভাবে ম্যানেজ করতে হবে।