Comme sur un téléphone, l'accès à du matériel sensible tel que l'appareil photo et le micro sur les lunettes audio et les lunettes à écran nécessite le consentement explicite de l'utilisateur. Il s'agit d' autorisations spécifiques aux lunettes, que votre application doit demander au moment de l'exécution, même si elle dispose déjà des autorisations correspondantes sur le téléphone.
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, mais vous devez toujours la demander explicitement pour le matériel ou la fonctionnalité spécifique aux lunettes.
<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>
Avant de demander des autorisations pour les lunettes
Consultez les principes et les workflows d'autorisation pour vous assurer de fournir la meilleure expérience à vos utilisateurs. Par exemple, vérifiez si l'utilisateur a déjà accordé les autorisations d'exécution requises par votre application et si votre application doit lui fournir une justification avant de demander des autorisations spécifiques aux lunettes .
Scénarios d'autorisation
Vous pouvez être confronté à différents scénarios lorsque vous demandez des autorisations d'exécution dangereuses runtime permissions sur des lunettes audio et des lunettes à écran :
- Demander des autorisations d'exécution à partir d'une activité projetée
- Demander des autorisations d'exécution à partir d'une activité téléphonique
Pour en savoir plus sur chaque scénario, consultez les sections suivantes de ce guide.
Demander et gérer des autorisations d'exécution à partir d'une activité projetée
Pour demander des autorisations pour les lunettes audio et les lunettes à écran, utilisez d'abord le
ActivityResultLauncher avec la méthode
ProjectedPermissionsResultContract pour enregistrer le lanceur d'autorisations. Lorsque l'utilisateur a agi sur la demande d'autorisation, le rappel reçoit une carte des noms d'autorisation et de leur état d'autorisation.
// 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 } }
Points clés concernant le code
- Vous devez spécifier les autorisations requises par votre application, telles que
Manifest.permission.CAMERAouManifest.permission.RECORD_AUDIO. - Votre application doit gérer de manière optimale les résultats accordés et refusés dans le rappel du lanceur.
Pour déclencher le flux de demande d'autorisation, transmettez une liste de
ProjectedPermissionsRequestParams à la méthode launch de votre lanceur d'autorisations enregistré. L'objet ProjectedPermissionsRequestParams regroupe les autorisations de fichier manifeste demandées avec une chaîne rationale personnalisée. La chaîne rationale doit expliquer clairement et de manière concise pourquoi l'application nécessite d'accéder aux fonctionnalités matérielles des lunettes (telles que l'appareil photo ou le micro).
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)) }
Points clés concernant le code
Comprendre le flux utilisateur de la demande d'autorisation
Lorsque vous lancez une demande d'autorisation à l'aide de la
ProjectedPermissionsResultContract méthode, le système lance un
flux utilisateur coordonné à la fois sur les lunettes et sur le téléphone.
Voici ce à quoi votre application et l'utilisateur peuvent s'attendre pendant le flux utilisateur des autorisations :
Sur les lunettes : une activité s'affiche sur l'appareil projeté (lunettes), demandant à l'utilisateur de regarder son téléphone pour continuer.
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 permet à l'utilisateur de continuer ou d'annuler.
Sur le téléphone : si l'utilisateur accepte la justification, une boîte de dialogue d'autorisation du système Android modifiée s'affiche sur le téléphone pour lui indiquer qu'il accorde l'autorisation pour les lunettes (et non pour le téléphone). L'utilisateur peut alors accorder ou refuser formellement l'autorisation.
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 sont ignorées. Votre
ActivityResultLauncherrappel est ensuite appelé avec une carte contenant l'état d'autorisation pour chaque autorisation demandée.
Demander des autorisations d'exécution dans une activité téléphonique
Si votre application s'exécute dans une activité téléphonique, mais qu'elle nécessite des autorisations pour des lunettes audio ou
des lunettes à écran (par exemple, pour permettre à un utilisateur de basculer un flux vidéo vers l'appareil photo des lunettes pour un point de vue à la première personne), demandez les autorisations à l'aide de la méthode Activity#requestPermissions(permissions, requestCode,
deviceId) spécifique à l'appareil.
Pour cibler les lunettes audio et les lunettes à écran, obtenez l'ID d'appareil approprié en appelant
getDeviceId sur un contexte d'appareil projeté. Transmettez cet ID lorsque vous demandez des autorisations à partir de votre activité téléphonique, comme illustré dans l'exemple suivant :
// Request the projected permission from phone activity requestPermissions( arrayOf(Manifest.permission.CAMERA), // REQUEST_CODE_GLASSES_CAMERA is a developer-defined constant REQUEST_CODE_GLASSES_CAMERA, projectedDeviceId )
Gérer les résultats d'autorisation
Une fois que l'utilisateur a répondu à la boîte de dialogue d'autorisation sur le téléphone, sa décision est transmise à votre application en appelant le rappel onRequestPermissionsResult.
Pour gérer la réponse, remplacez onRequestPermissionsResult dans l'instance
Activity qui a lancé la demande d'autorisation.
L'extrait de code suivant montre comment gérer le rappel et vérifier si l'utilisateur a accordé les autorisations demandées :
private companion object { // REQUEST_CODE_GLASSES_CAMERA is a developer-defined constant. const val REQUEST_CODE_GLASSES_CAMERA = 1001 } @RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) override fun onRequestPermissionsResult( requestCode: Int, permissions: Array<out String>, grantResults: IntArray, deviceId: Int ) { super.onRequestPermissionsResult(requestCode, permissions, grantResults, deviceId) // Handle the result of the permission request if (requestCode == REQUEST_CODE_GLASSES_CAMERA && deviceId == projectedDeviceId) { if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // Proceed with glasses camera features } else { // Handle glasses permission denied } } }
Points clés concernant le code
- Utilisez la surcharge
deviceIdavec le rappelonRequestPermissionsResultpour vous assurer que l'état de l'autorisation est correctement mappé au contexte spécifique, tel que les lunettes audio ou les lunettes à écran plutôt que le téléphone hôte. - Votre application doit gérer de manière optimale les résultats accordés et refusés.