Wie bei einem Smartphone ist für den Zugriff auf sensible Hardware wie die Kamera und das Mikrofon von Audio- und Displaybrillen die ausdrückliche Nutzereinwilligung erforderlich. Diese Berechtigungen sind brillenspezifisch und müssen von Ihrer App zur Laufzeit angefordert werden, auch wenn sie bereits die entsprechenden Berechtigungen auf dem Smartphone hat.
Berechtigungen im Manifest Ihrer App deklarieren
Bevor Sie Berechtigungen anfordern, müssen Sie sie in der Manifestdatei Ihrer App
mit dem Element <uses-permission> deklarieren. Diese Deklaration bleibt gleich, unabhängig davon, ob die Berechtigung für ein Smartphone oder ein brillenspezifisches Feature gilt. Sie müssen sie jedoch explizit für brillenspezifische Hardware oder Funktionen anfordern.
<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>
Vor dem Anfordern von Berechtigungen für Brillen
Lesen Sie die Berechtigungsprinzipien und -workflows, um Ihren Nutzern die bestmögliche Nutzererfahrung zu bieten. Prüfen Sie beispielsweise, ob der Nutzer die von Ihrer App benötigten Laufzeitberechtigungen bereits erteilt hat und ob Ihre App dem Nutzer eine Begründung anzeigen sollte, bevor sie brillenspezifische Berechtigungen anfordert.
Berechtigungsszenarien
Beim Anfordern gefährlicher Laufzeitberechtigungen für Audio- und Displaybrillen können verschiedene Szenarien auftreten:
- Laufzeitberechtigungen von einer projizierten Aktivität anfordern
- Laufzeitberechtigungen von einer Smartphone-Aktivität anfordern
Weitere Informationen zu den einzelnen Szenarien finden Sie in den folgenden Abschnitten dieses Leitfadens.
Laufzeitberechtigungen von einer projizierten Aktivität anfordern und verarbeiten
Wenn Sie Berechtigungen für Audio-Brillen und Display-Brillen anfordern möchten, verwenden Sie zuerst die
ActivityResultLauncher mit der
ProjectedPermissionsResultContract Methode, um den Berechtigungs
starter zu registrieren. Wenn der Nutzer auf die Berechtigungsanfrage reagiert hat, empfängt der Callback eine Zuordnung von Berechtigungsnamen zu ihrem gewährten Status.
// 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 } }
Wichtige Punkte zum Code
- Sie müssen angeben, welche Berechtigungen Ihre App benötigt, z. B.
Manifest.permission.CAMERAoderManifest.permission.RECORD_AUDIO. - Ihre App sollte sowohl gewährte als auch abgelehnte Ergebnisse im Callback des Starters ordnungsgemäß verarbeiten.
Wenn Sie den Ablauf für die Berechtigungsanfrage auslösen möchten, übergeben Sie eine Liste von
ProjectedPermissionsRequestParams an die Methode launch des registrierten Berechtigungs
starters. Das Objekt ProjectedPermissionsRequestParams bündelt die angeforderten Manifestberechtigungen zusammen mit einem benutzerdefinierten String rationale. Der String rationale muss klar und prägnant erklären, warum die App Zugriff auf die Hardwarefunktionen der Brille (z. B. Kamera oder Mikrofon) benötigt.
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)) }
Wichtige Punkte zum Code
- Durch den Aufruf von
launchauf dem Starter wird der Nutzerablauf für die Berechtigungsanfrage ausgelöst.
Nutzerablauf für die Berechtigungsanfrage
Wenn Sie eine Berechtigungsanfrage mit der
ProjectedPermissionsResultContract Methode starten, initiiert das System einen
koordinierten Nutzerablauf sowohl auf der Brille als auch auf dem Smartphone.
Während des Nutzerablaufs für Berechtigungen können Ihre App und der Nutzer Folgendes erwarten:
Auf der Brille: Auf dem projizierten Gerät (Brille) wird eine Aktivität angezeigt, in der der Nutzer aufgefordert wird, auf seinem Smartphone nachzusehen, um fortzufahren.
Auf dem Smartphone: Gleichzeitig wird eine Aktivität auf dem Hostgerät (Smartphone) gestartet. Auf diesem Bildschirm wird der von Ihnen angegebene Begründungsstring angezeigt und der Nutzer hat die Möglichkeit, fortzufahren oder abzubrechen.
Auf dem Smartphone: Wenn der Nutzer die Begründung akzeptiert, wird auf dem Smartphone ein geändertes Android Systemdialogfeld für Berechtigungen angezeigt, in dem der Nutzer darüber informiert wird, dass er die Berechtigung für die Brille (nicht für das Smartphone) erteilt. Der Nutzer kann die Berechtigung dann formell erteilen oder ablehnen.
Ergebnis erhalten: Nachdem der Nutzer seine endgültige Entscheidung getroffen hat, werden die Aktivitäten sowohl auf dem Smartphone als auch auf der Brille geschlossen. Der
ActivityResultLauncherCallback wird dann mit einer Zuordnung aufgerufen, die den gewährten Status für jede angeforderte Berechtigung enthält.
Laufzeitberechtigungen in einer Smartphone-Aktivität anfordern
Wenn Ihre App in einer Smartphone-Aktivität ausgeführt wird, aber Berechtigungen für Audio oder
Displaybrillen benötigt, z. B. damit ein Nutzer einen Videostream auf die Kamera der Brille umschalten kann, um eine Ich-Perspektive zu erhalten, fordern Sie die Berechtigungen mit der
gerätespezifischen Methode Activity#requestPermissions(permissions, requestCode,
deviceId) an.
Wenn Sie Audio- und Displaybrillen verwenden möchten, rufen Sie die entsprechende Geräte-ID ab, indem Sie
getDeviceId in einem projizierten Gerätekontext aufrufen. Übergeben Sie diese ID, wenn Sie Berechtigungen von Ihrer Smartphone-Aktivität anfordern, wie im folgenden Beispiel gezeigt:
// 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 )
Mit den Berechtigungsergebnissen umgehen
Sobald der Nutzer auf das Berechtigungsdialogfeld auf dem Smartphone antwortet, wird seine Entscheidung an Ihre App übermittelt, indem der Callback onRequestPermissionsResult aufgerufen wird.
Wenn Sie die Antwort verarbeiten möchten, überschreiben Sie onRequestPermissionsResult in der
Activity Instanz, die die Berechtigungsanfrage initiiert hat.
Im folgenden Code-Snippet wird gezeigt, wie Sie den Callback verarbeiten und prüfen, ob der Nutzer die angeforderten Berechtigungen erteilt hat:
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 } } }
Wichtige Punkte zum Code
- Verwenden Sie die Überladung
deviceIdmit dem CallbackonRequestPermissionsResult, um sicherzustellen, dass der Berechtigungsstatus dem jeweiligen Kontext korrekt zugeordnet wird, z. B. der Audio- oder Displaybrille und nicht dem Host-Smartphone. - Ihre App sollte sowohl gewährte als auch abgelehnte Ergebnisse ordnungsgemäß verarbeiten.