בקשת הרשאות חומרה למשקפי AI

מכשירי XR רלוונטיים
ההנחיות האלה יעזרו לכם ליצור חוויות למכשירי XR מהסוגים האלה.
משקפי AI

בדיוק כמו בטלפון, כדי לגשת לחומרה רגישה כמו המצלמה והמיקרופון במשקפיים עם 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, משתמשים ב-ActivityResultLauncher עם ה-method ‏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()
    }
}

מידע חשוב על הקוד

  • אנחנו יוצרים ActivityResultLauncher באמצעות ה-method‏ ProjectedPermissionsResultContract(). הקריאה החוזרת מקבלת מפה של שמות ההרשאות והסטטוס שלהן.
  • הפונקציה requestAudioPermission() יוצרת אובייקט ProjectedPermissionsRequestParams. האובייקט הזה כולל את רשימת ההרשאות שאנחנו צריכים ואת ההסבר שמוצג למשתמשים.
  • התקשרות אל launch() ב-Launcher מפעילה את תהליך בקשת ההרשאה מהמשתמש.
  • האפליקציה צריכה לטפל בצורה חלקה בתוצאות של אישור ודחייה בקריאה החוזרת של מרכז ההפעלה.

הסבר על תהליך בקשת ההרשאה

כשמפעילים בקשת הרשאה באמצעות השיטה ProjectedPermissionsResultContract(), המערכת מתחילה מסלול משתמש מתואם גם במשקפי ה-AI וגם בטלפון.

במהלך תהליך ההרשאות, אלה הפעולות שצפויות באפליקציה ומהמשתמש:

  1. במשקפי ה-AI: פעילות מופיעה במכשיר החזוי (המשקפיים), ומנחה את המשתמש להסתכל בטלפון כדי להמשיך.

  2. בטלפון: במקביל, פעילות מופעלת במכשיר המארח (הטלפון). במסך הזה מוצג הנימוק שסיפקתם, והמשתמש יכול להמשיך או לבטל.

  3. בטלפון: אם המשתמש מאשר את ההסבר, בטלפון מופיעה תיבת דו-שיח שונה של הרשאות מערכת Android, שבה נאמר למשתמש שהוא מעניק את ההרשאה למכשיר המשקפיים עם ה-AI (ולא לטלפון), והמשתמש יכול לאשר או לדחות את ההרשאה באופן רשמי.

  4. קבלת התוצאה: אחרי שהמשתמש בוחר את התשובה הסופית, הפעילויות בטלפון ובמשקפי ה-AI נסגרות. לאחר מכן, מתבצעת קריאה חוזרת (callback) אל ActivityResultLauncher עם מפה שמכילה את הסטטוס של כל הרשאה שהתבקשה.