طلب أذونات الأجهزة لنظارات الصوت والنظارات الذكية

أجهزة 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>

تسجيل مشغّل الأذونات

لطلب أذونات نظارات الصوت ونظارات العرض، عليك أولاً استخدام الـ 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
        }
    }

نقاط أساسية حول الرمز

إنشاء دالة الطلب

بعد ذلك، عليك إنشاء دالة تستخدم مشغّل أذونات تطبيقك لطلب الأذونات من المستخدم في وقت التشغيل.

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 باستخدام خريطة تحتوي على حالة منح كل إذن مطلوب.