এআই চশমার জন্য হার্ডওয়্যার অনুমতির অনুরোধ করুন

প্রযোজ্য XR ডিভাইস
এই নির্দেশিকা আপনাকে এই ধরণের XR ডিভাইসের অভিজ্ঞতা তৈরি করতে সাহায্য করবে।
এআই চশমা

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

এই নির্দেশিকা অনুসরণ করুন:

  • আপনার অ্যাপের ম্যানিফেস্টে অনুমতি ঘোষণা করুন
  • অনুমতির জন্য অনুরোধ করুন
  • অনুমতি ব্যবহারকারীর প্রবাহ সম্পর্কে জানুন

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

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

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

অনুমতির জন্য অনুরোধ করুন

AI চশমার জন্য অনুমতির অনুরোধ করতে, আপনাকে ProjectedPermissionsResultContract() পদ্ধতি ব্যবহার করে ActivityResultLauncher ব্যবহার করতে হবে। আপনার অ্যাপের কোন কোন অনুমতি প্রয়োজন তা আপনাকে নির্দিষ্ট করতে হবে, যেমন Manifest.permission.CAMERA অথবা Manifest.permission.RECORD_AUDIO । আপনার অ্যাপের কেন এই অনুমতিগুলির প্রয়োজন তা ব্যাখ্যা করে একটি স্পষ্ট এবং সংক্ষিপ্ত যুক্তি প্রদান করুন। এই যুক্তি ব্যবহারকারীদের একটি সুনির্দিষ্ট সিদ্ধান্ত নিতে সাহায্য করার জন্য প্রদর্শিত হয়।

class SampleGlassesActivity : ComponentActivity() {

  // Register the permissions launcher
    private val requestPermissionLauncher: ActivityResultLauncher<List<ProjectedPermissionsRequestParams>> =
        registerForActivityResult(ProjectedPermissionsResultContract()) { results ->
            // Check the result for the specific RECORD_AUDIO permission
            if (results[Manifest.permission.RECORD_AUDIO] == true) {
                onPermissionGranted()
            } else {
                onPermissionDenied()
            }
        }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // Audio permission is critical for the displayless AI glasses experience
        checkAndRequestAudioPermission()

        setContent {
            GlimmerTheme {
                DisplayGlassesUi()
            }
        }
    }

    // Checks for the required RECORD_AUDIO permission and requests it if necessary.

    private fun checkAndRequestAudioPermission() {
        val permission = Manifest.permission.RECORD_AUDIO
        val permissionStatus = ContextCompat.checkSelfPermission(this, permission)

        if (permissionStatus == PackageManager.PERMISSION_GRANTED) {
            // Permission is already granted
            onPermissionGranted()
        } else {
            // Permission is not granted, request it
            requestAudioPermission()
        }
    }

    private fun requestAudioPermission() {
        val params = ProjectedPermissionsRequestParams(
                        permissions = listOf(Manifest.permission.RECORD_AUDIO),
            // The rationale should explain why this permission is needed.
            // For displayless AI glasses, it's often the main input mechanism.
            rationale = "Microphone access is essential for voice commands and features on these AI glasses."
        )
        requestPermissionLauncher.launch(listOf(params))
    }

    private fun onPermissionGranted() {
        // Implement the logic for when the permission is granted

    }

    private fun onPermissionDenied() {
        // Implement the logic for when the permission is denied.
        // On displayless AI glasses, if the app requires voice/mic it should exit the activity if the critical permission is denied.
        finish()
    }
}

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

  • আমরা ProjectedPermissionsResultContract() পদ্ধতি ব্যবহার করে একটি ActivityResultLauncher তৈরি করি। কলব্যাকটি তাদের অনুমোদিত অবস্থায় অনুমতির নামের একটি মানচিত্র গ্রহণ করে।
  • requestAudioPermission() ফাংশনটি একটি ProjectedPermissionsRequestParams অবজেক্ট তৈরি করে। এই অবজেক্টটি আমাদের প্রয়োজনীয় অনুমতিগুলির তালিকা এবং ব্যবহারকারী-মুখী যুক্তিগুলিকে একত্রিত করে।
  • লঞ্চারে launch() কল করলে অনুমতি অনুরোধ ব্যবহারকারী প্রবাহ ট্রিগার হয়।
  • লঞ্চারের কলব্যাকে আপনার অ্যাপের মঞ্জুরিপ্রাপ্ত এবং অস্বীকৃত উভয় ফলাফলই সুন্দরভাবে পরিচালনা করা উচিত।

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

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

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

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

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

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

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