फ़ोन की तरह ही, एआई चश्मे पर कैमरा और माइक्रोफ़ोन जैसे संवेदनशील हार्डवेयर को ऐक्सेस करने के लिए, उपयोगकर्ता की साफ़ तौर पर सहमति लेना ज़रूरी है. इन्हें चश्मे के लिए खास तौर पर दी जाने वाली अनुमतियां माना जाता है. आपका ऐप्लिकेशन, रनटाइम के दौरान इनके लिए अनुरोध करेगा. भले ही, उसके पास फ़ोन पर पहले से ही इनसे जुड़ी अनुमतियां हों.
इस गाइड में इनके बारे में बताया गया है:
- अपने ऐप्लिकेशन के मेनिफ़ेस्ट में अनुमतियों की जानकारी देना
- अनुमतियों का अनुरोध करना
- अनुमतियों के लिए उपयोगकर्ता फ़्लो के बारे में जानकारी
अपने ऐप्लिकेशन के मेनिफ़ेस्ट में अनुमतियों की जानकारी देना
अनुमतियों का अनुरोध करने से पहले, आपको <uses-permission> एलिमेंट का इस्तेमाल करके, उन्हें अपने ऐप्लिकेशन के मेनिफ़ेस्ट में एलान करना होगा. यह एलान एक जैसा ही रहता है, भले ही अनुमति किसी फ़ोन या एआई-चश्मे की किसी सुविधा के लिए हो. हालाँकि, आपको चश्मे के लिए खास तौर पर बनाए गए हार्डवेयर या सुविधा के लिए, साफ़ तौर पर अनुरोध करना होगा.
<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>
अनुमतियों का अनुरोध करना
एआई चश्मे के लिए अनुमतियों का अनुरोध करने के लिए, ActivityResultLauncher के साथ ProjectedPermissionsResultContract() तरीके का इस्तेमाल करें. आपको यह बताना होगा कि आपके ऐप्लिकेशन को किन अनुमतियों की ज़रूरत है. जैसे, 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() तरीके का इस्तेमाल करके, अनुमति का अनुरोध लॉन्च करने पर, सिस्टम एआई चश्मे और फ़ोन, दोनों पर एक साथ यूज़र फ़्लो शुरू करता है.
अनुमतियों के लिए यूज़र फ़्लो के दौरान, आपके ऐप्लिकेशन और उपयोगकर्ता को ये चीज़ें मिल सकती हैं:
एआई चश्मे पर: प्रोजेक्ट किए गए डिवाइस (चश्मे) पर एक गतिविधि दिखती है. इसमें उपयोगकर्ता को आगे बढ़ने के लिए, अपने फ़ोन पर देखने का निर्देश दिया जाता है.
फ़ोन पर: एक साथ, होस्ट डिवाइस (फ़ोन) पर कोई गतिविधि शुरू होती है. इस स्क्रीन पर, आपने जो वजह बताई है वह स्ट्रिंग के तौर पर दिखती है. साथ ही, उपयोगकर्ता को आगे बढ़ने या अनुरोध रद्द करने का विकल्प मिलता है.
फ़ोन पर: अगर उपयोगकर्ता वजह स्वीकार करता है, तो फ़ोन पर Android सिस्टम की अनुमति से जुड़ा बदला हुआ डायलॉग दिखता है. इसमें उपयोगकर्ता को बताया जाता है कि वह एआई चश्मे वाले डिवाइस के लिए अनुमति दे रहा है, न कि फ़ोन के लिए. इसके बाद, उपयोगकर्ता अनुमति दे सकता है या अनुरोध अस्वीकार कर सकता है.
नतीजा पाना: जब उपयोगकर्ता कोई विकल्प चुन लेता है, तो फ़ोन और एआई चश्मे, दोनों पर चल रही गतिविधियां बंद हो जाती हैं. इसके बाद, आपकी
ActivityResultLauncherकॉलबैक को कॉल किया जाता है. इसमें एक मैप होता है. इस मैप में, अनुरोध की गई हर अनुमति के लिए, अनुमति दी गई है या नहीं, इसकी जानकारी होती है.