ऑडियो ग्लास और डिसप्ले ग्लास के लिए, हार्डवेयर से जुड़ी अनुमतियों का अनुरोध करना

इन 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>

अनुमतियों को लॉन्च करने वाले टूल को रजिस्टर करना

ऑडियो ग्लास और डिसप्ले ग्लास के लिए अनुमतियों का अनुरोध करने के लिए, सबसे पहले आपको अनुमतियों के लॉन्चर को रजिस्टर करना होगा. इसके लिए, ProjectedPermissionsResultContract तरीके के साथ ActivityResultLauncher का इस्तेमाल करें.

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

कोड के बारे में अहम बातें

  • यह कोड, ProjectedPermissionsResultContract तरीके का इस्तेमाल करके ActivityResultLauncher बनाता है. कॉलबैक को, अनुमति के नामों और उनकी स्थिति का मैप मिलता है.
  • आपको यह बताना होगा कि आपके ऐप्लिकेशन को कौनसी अनुमतियों की ज़रूरत है. जैसे, Manifest.permission.CAMERA या Manifest.permission.RECORD_AUDIO.

अनुरोध फ़ंक्शन बनाना

इसके बाद, आपको एक ऐसा फ़ंक्शन बनाना होगा जो रनटाइम के दौरान उपयोगकर्ता से अनुमतियों का अनुरोध करने के लिए, आपके ऐप्लिकेशन के अनुमतियां लॉन्चर का इस्तेमाल करता हो.

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

कोड के बारे में अहम बातें

  • requestHardwarePermissions फ़ंक्शन, ProjectedPermissionsRequestParams ऑब्जेक्ट बनाता है. इस ऑब्जेक्ट में, आपके ऐप्लिकेशन को ज़रूरी अनुमतियों की सूची और उपयोगकर्ता को दिखने वाली वजह शामिल होती है. इन अनुमतियों की ज़रूरत क्यों है, इस बारे में साफ़ तौर पर और कम शब्दों में बताएं.
  • लॉन्चर पर launch को कॉल करने से, अनुमति का अनुरोध करने वाले उपयोगकर्ता का फ़्लो ट्रिगर होता है.
  • आपके ऐप्लिकेशन को, लॉन्चर के कॉलबैक में अनुमति देने और अनुमति न देने, दोनों तरह के नतीजों को सही तरीके से हैंडल करना चाहिए.

अनुमतियों की जांच करने वाला फ़ंक्शन बनाना

इसके बाद, आपको एक ऐसा फ़ंक्शन बनाना होगा जो यह जांच कर सके कि उपयोगकर्ता ने आपके ऐप्लिकेशन को अनुमतियां दी हैं या नहीं.

private fun hasCameraPermission(): Boolean {
    return ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) ==
            PackageManager.PERMISSION_GRANTED
}

अनुमति के लिए अनुरोध करने का लॉजिक जोड़ना

आखिर में, ऐसा लॉजिक बनाएं जो इन फ़ंक्शन का इस्तेमाल करके, रनटाइम के दौरान अनुमतियों की जांच करे और उनका अनुरोध करे.

if (hasCameraPermission()) {
    initializeGlassesFeatures()
} else {
    requestHardwarePermissions()
}

कोड के बारे में अहम बातें

अनुमति के अनुरोध से जुड़े उपयोगकर्ता फ़्लो को समझना

ProjectedPermissionsResultContract तरीके का इस्तेमाल करके, अनुमति का अनुरोध लॉन्च करने पर, सिस्टम चश्मे और फ़ोन, दोनों पर एक साथ यूज़र फ़्लो शुरू करता है.

अनुमतियों के लिए यूज़र फ़्लो के दौरान, आपके ऐप्लिकेशन और उपयोगकर्ता को ये चीज़ें मिल सकती हैं:

  1. चश्मे पर: प्रोजेक्ट किए गए डिवाइस (चश्मे) पर एक गतिविधि दिखती है. इसमें उपयोगकर्ता को जारी रखने के लिए, अपने फ़ोन पर देखने का निर्देश दिया जाता है.

  2. फ़ोन पर: एक साथ, होस्ट डिवाइस (फ़ोन) पर कोई गतिविधि शुरू होती है. इस स्क्रीन पर, आपके दिए गए तर्क की स्ट्रिंग दिखती है. साथ ही, उपयोगकर्ता को आगे बढ़ने या रद्द करने का विकल्प मिलता है.

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

  4. नतीजा मिलना: जब उपयोगकर्ता कोई विकल्प चुन लेता है, तो फ़ोन और चश्मे, दोनों पर चल रही गतिविधियां बंद हो जाती हैं. इसके बाद, आपकी ActivityResultLauncher कॉलबैक को कॉल किया जाता है. इसमें एक मैप होता है. इस मैप में, अनुरोध की गई हर अनुमति के लिए, अनुमति मिलने की स्थिति होती है.