Demander des autorisations matérielles pour les lunettes d'IA

Appareils XR concernés
Ces conseils vous aident à créer des expériences pour ces types d'appareils XR.
Lunettes IA

Comme sur un téléphone, l'accès à du matériel sensible tel que l'appareil photo et le micro des lunettes d'IA nécessite le consentement explicite de l'utilisateur. Il s'agit d'autorisations spécifiques aux lunettes. Votre application doit les demander au moment de l'exécution, même si elle dispose déjà des autorisations correspondantes sur le téléphone.

Ce guide vous explique comment :

  • Déclarer des autorisations dans le fichier manifeste de votre application
  • Demander des autorisations
  • En savoir plus sur le flux utilisateur des autorisations

Déclarer les autorisations dans le fichier manifeste de votre application

Avant de demander des autorisations, vous devez les déclarer dans le fichier manifeste de votre application à l'aide de l'élément <uses-permission>. Cette déclaration reste la même, que l'autorisation concerne une fonctionnalité spécifique à un téléphone ou à des lunettes IA. Toutefois, vous devez toujours la demander explicitement pour le matériel ou les fonctionnalités spécifiques aux lunettes.

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

Demander des autorisations

Pour demander des autorisations pour les lunettes d'IA, vous utilisez ActivityResultLauncher avec la méthode ProjectedPermissionsResultContract(). Vous devez spécifier les autorisations requises par votre application, telles que Manifest.permission.CAMERA ou Manifest.permission.RECORD_AUDIO. Fournissez une explication claire et concise expliquant pourquoi votre application a besoin de ces autorisations. Cette justification est affichée à l'utilisateur pour l'aider à prendre une décision éclairée.

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

Points clés concernant le code

Comprendre le parcours utilisateur de la demande d'autorisation

Lorsque vous lancez une demande d'autorisation à l'aide de la méthode ProjectedPermissionsResultContract(), le système lance un flux utilisateur coordonné à la fois sur les lunettes d'IA et sur le téléphone.

Voici ce à quoi votre application et l'utilisateur peuvent s'attendre lors du parcours utilisateur des autorisations :

  1. Sur les lunettes IA : une activité s'affiche sur l'appareil projeté (lunettes), invitant l'utilisateur à regarder son téléphone pour continuer.

  2. Sur le téléphone : une activité se lance simultanément sur l'appareil hôte (téléphone). Cet écran affiche la chaîne de justification que vous avez fournie et donne à l'utilisateur la possibilité de continuer ou d'annuler.

  3. Sur le téléphone : si l'utilisateur accepte la justification, une boîte de dialogue modifiée des autorisations du système Android s'affiche sur le téléphone. Elle indique à l'utilisateur qu'il accorde l'autorisation pour l'appareil lunettes IA (et non pour le téléphone). L'utilisateur peut alors accorder ou refuser formellement l'autorisation.

  4. Réception du résultat : une fois que l'utilisateur a fait son choix final, les activités sur le téléphone et les lunettes IA sont fermées. Votre rappel ActivityResultLauncher est ensuite appelé avec une carte contenant l'état d'autorisation pour chaque autorisation demandée.