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

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

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

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

অনুমতির অনুরোধ করার আগে, আপনাকে অবশ্যই আপনার অ্যাপের ম্যানিফেস্ট ফাইলে <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>

চশমার অনুমতি চাওয়ার আগে

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

অনুমতির পরিস্থিতি

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

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

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

একটি প্রজেক্টেড অ্যাক্টিভিটি থেকে রানটাইম পারমিশন অনুরোধ করুন এবং পরিচালনা করুন

অডিও গ্লাস এবং ডিসপ্লে গ্লাসের জন্য অনুমতি অনুরোধ করতে, প্রথমে ActivityResultLauncher এর সাথে ProjectedPermissionsResultContract মেথডটি ব্যবহার করে পারমিশন লঞ্চারটি রেজিস্টার করুন। যখন ব্যবহারকারী অনুমতির অনুরোধ অনুযায়ী কাজ করেন, তখন কলব্যাকটি অনুমতির নাম এবং সেগুলোর মঞ্জুরকৃত অবস্থার একটি ম্যাপ গ্রহণ করে।

// Register the permissions launcher using the ProjectedPermissionsResultContract.
private val requestPermissionLauncher: ActivityResultLauncher<List<ProjectedPermissionsRequestParams>> =
    registerForActivityResult(ProjectedPermissionsResultContract()) { results ->
        if (results[Manifest.permission.CAMERA] == true) {
            isPermissionDenied = false
            initializeGlassesFeatures()
        } else {
            // Handle permission denial.
            isPermissionDenied = true
        }
    }

কোড সম্পর্কে মূল বিষয়গুলো

  • আপনার অ্যাপের জন্য কোন কোন অনুমতির প্রয়োজন, তা আপনাকে নির্দিষ্ট করে দিতে হবে, যেমন Manifest.permission.CAMERA অথবা Manifest.permission.RECORD_AUDIO
  • আপনার অ্যাপের উচিত লঞ্চারের কলব্যাকে মঞ্জুর এবং প্রত্যাখ্যাত উভয় ফলাফলই সুষ্ঠুভাবে পরিচালনা করা।

অনুমতির অনুরোধ প্রক্রিয়াটি চালু করতে, আপনার রেজিস্টার্ড পারমিশন লঞ্চারের launch মেথডে ProjectedPermissionsRequestParams এর একটি তালিকা পাস করুন। ProjectedPermissionsRequestParams অবজেক্টটি অনুরোধ করা ম্যানিফেস্ট পারমিশনগুলোকে একটি কাস্টম rationale স্ট্রিং-এর সাথে একত্রিত করে। rationale স্ট্রিংটিতে অবশ্যই স্পষ্টভাবে এবং সংক্ষেপে ব্যাখ্যা করতে হবে যে কেন অ্যাপটির চশমার হার্ডওয়্যার ফিচারগুলোতে (যেমন ক্যামেরা বা মাইক্রোফোন) অ্যাক্সেস প্রয়োজন।

private fun requestHardwarePermissions() {
    val params = ProjectedPermissionsRequestParams(
        permissions = listOf(Manifest.permission.CAMERA),
        rationale = "Camera access is required to overlay digital content on your physical environment."
    )
    requestPermissionLauncher.launch(listOf(params))
}

কোড সম্পর্কে মূল বিষয়গুলো

অনুমতি অনুরোধের ব্যবহারকারী প্রবাহটি বুঝুন

যখন আপনি ProjectedPermissionsResultContract মেথডটি ব্যবহার করে কোনো অনুমতির অনুরোধ চালু করেন, তখন সিস্টেমটি চশমা এবং ফোন উভয়ের মধ্যে একটি সমন্বিত ব্যবহারকারী প্রবাহ শুরু করে।

অনুমতি প্রদান প্রক্রিয়া চলাকালীন, আপনার অ্যাপ এবং ব্যবহারকারী যা প্রত্যাশা করতে পারেন তা নিচে দেওয়া হলো:

  1. চশমায় : প্রজেক্টেড ডিভাইসে (চশমায়) একটি কার্যকলাপ প্রদর্শিত হয়, যা ব্যবহারকারীকে চালিয়ে যাওয়ার জন্য তার ফোনের দিকে তাকাতে নির্দেশ দেয়।

  2. ফোনে : একই সাথে, হোস্ট ডিভাইসে (ফোনে) একটি কার্যক্রম চালু হয়। এই স্ক্রিনে আপনার দেওয়া কারণ দর্শানোর স্ট্রিংটি প্রদর্শিত হয় এবং ব্যবহারকারীকে এগিয়ে যাওয়ার বা বাতিল করার বিকল্প দেওয়া হয়।

  3. ফোনে : যদি ব্যবহারকারী কারণটি গ্রহণ করেন, তাহলে ফোনে একটি পরিবর্তিত অ্যান্ড্রয়েড সিস্টেম পারমিশন ডায়ালগ বক্স প্রদর্শিত হয়, যা ব্যবহারকারীকে জানায় যে তিনি চশমার জন্য অনুমতি দিচ্ছেন (ফোনের জন্য নয়), এবং ব্যবহারকারী আনুষ্ঠানিকভাবে অনুমতিটি মঞ্জুর বা প্রত্যাখ্যান করতে পারেন।

  4. ফলাফল গ্রহণ : ব্যবহারকারী তার চূড়ান্ত পছন্দ করার পর, ফোন এবং চশমা উভয়ের কার্যকলাপ বন্ধ হয়ে যায়। এরপর আপনার ActivityResultLauncher কলব্যাকটি প্রতিটি অনুরোধ করা অনুমতির মঞ্জুরকৃত অবস্থা সম্বলিত একটি ম্যাপ সহ আহ্বান করা হয়।

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

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

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

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

অনুমতির ফলাফলগুলি পরিচালনা করুন

ব্যবহারকারী ফোনে অনুমতির ডায়ালগে সাড়া দেওয়ার পর, onRequestPermissionsResult কলব্যাকটি কল করার মাধ্যমে তাদের সিদ্ধান্তটি আপনার অ্যাপে পৌঁছে দেওয়া হয়।

প্রতিক্রিয়াটি পরিচালনা করতে, যে Activity ইনস্ট্যান্সটি অনুমতির অনুরোধটি শুরু করেছে, তার মধ্যে onRequestPermissionsResult ওভাররাইড করুন।

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

private companion object {
    // REQUEST_CODE_GLASSES_CAMERA is a developer-defined constant.
    const val REQUEST_CODE_GLASSES_CAMERA = 1001
}

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

    // Handle the result of the permission request
    if (requestCode == REQUEST_CODE_GLASSES_CAMERA && deviceId == projectedDeviceId) {
        if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // Proceed with glasses camera features
        } else {
            // Handle glasses permission denied
        }
    }
}

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