Genau wie auf einem Smartphone erfordert der Zugriff auf sensible Hardware wie die Kamera und das Mikrofon von Audio- und Displaybrillen die ausdrückliche Nutzereinwilligung. Diese Berechtigungen gelten als brillenspezifische Berechtigungen 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 mit dem Element <uses-permission> in der Manifestdatei Ihrer App deklarieren. Diese Deklaration bleibt gleich, unabhängig davon, ob die Berechtigung für ein Smartphone oder eine brillenspezifische Funktion 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>
Bevor Sie Berechtigungen für die Brille anfordern
Sehen Sie sich die Berechtigungsprinzipien und ‑workflows an, um Ihren Nutzern die bestmögliche Erfahrung zu bieten. Dazu gehört beispielsweise, zu prüfen, ob der Nutzer die für Ihre App erforderlichen Laufzeitberechtigungen bereits erteilt hat, und ob Ihre App dem Nutzer eine Begründung anzeigen sollte, bevor sie brillenspezifische Berechtigungen anfordert.
Berechtigungsszenarien
Es gibt verschiedene Szenarien, die auftreten können, wenn Sie gefährliche Laufzeitberechtigungen für Audio- und Display-Brillen anfordern:
- Laufzeitberechtigungen für eine projizierte 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 für eine projizierte Aktivität anfordern
Wenn Sie Laufzeitberechtigungen für Audio- oder Displaybrillen über eine projizierte Aktivität anfordern möchten, verwenden Sie die Methode ProjectedActivityCompat.requestPermissions.
Durch den Aufruf dieser Methode wird ein koordinierter Nutzer-Flow sowohl auf der Brille als auch auf dem Host-Smartphone ausgelöst.
- Auf der Brille: Das System öffnet eine projizierte Begleitaktivität auf der Brille und fordert den Nutzer auf, auf seinem Smartphone nachzusehen, um auf die Berechtigungsanfrage zu reagieren.
- Auf dem Smartphone: Auf dem Display des Smartphones wird ein Dialogfeld für die Android-Systemberechtigung angezeigt. Im Dialogfeld wird ausdrücklich darauf hingewiesen, dass der Nutzer die Berechtigung für die Brille und nicht für das Smartphone selbst erteilt. Der Nutzer kann die Anfrage dann genehmigen oder ablehnen.
Im folgenden Beispiel wird gezeigt, wie Sie von einer projizierten Aktivität aus Berechtigungen für die Brille anfordern:
@RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) private fun requestCameraPermission() { lifecycleScope.launch { try { ProjectedActivityCompat.requestPermissions( this@PermissionsFromProjectedActivity, arrayOf(Manifest.permission.CAMERA), // CAMERA_PERMISSION_REQUEST_CODE is a developer defined constant CAMERA_PERMISSION_REQUEST_CODE, ) } catch (e: IllegalStateException) { // Thrown when the projected system service can't be bound. Log.e(TAG, "Camera permission request failed: projected service unavailable.", e) } } }
Wichtige Punkte zum Code
- Verwenden Sie
ProjectedActivityCompat.requestPermissionsanstelle der StandardmethodeActivityCompat. Diese Methode zielt explizit auf die Laufzeitberechtigungen für Audio- und Displaybrillen ab und nicht auf das Host-Smartphone.
Berechtigungsergebnisse verarbeiten
Sobald der Nutzer auf dem Smartphone auf das Berechtigungsdialogfeld reagiert, wird seine Entscheidung an Ihre App übermittelt, indem der onRequestPermissionsResult-Callback aufgerufen wird.
Das System schließt die projizierte Companion-Aktivität automatisch. Bei Audiobrillen geschieht dies, nachdem die Audiobenachrichtigung abgespielt wurde. Bei Brillen mit Display passiert das, nachdem der Nutzer auf alle Berechtigungsdialogfelder geantwortet hat.
Überschreiben Sie onRequestPermissionsResult() in der Activity-Instanz, die die Berechtigungsanfrage initiiert hat, um die Antwort zu verarbeiten.
Das folgende Code-Snippet zeigt, wie der Callback verarbeitet und geprüft wird, ob der Nutzer die angeforderten Berechtigungen erteilt hat:
@RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) override fun onRequestPermissionsResult( requestCode: Int, permissions: Array<String>, grantResults: IntArray, deviceId: Int, ) { super.onRequestPermissionsResult(requestCode, permissions, grantResults, deviceId) if (requestCode != CAMERA_PERMISSION_REQUEST_CODE) return val isCameraGranted = grantResults.getOrNull(permissions.indexOf(Manifest.permission.CAMERA)) == PackageManager.PERMISSION_GRANTED if (isCameraGranted) { initializeCameraFeatures() } else { onCameraPermissionDenied() } }
Wichtige Punkte zum Code
- Verwenden Sie die Überladung
deviceIdmit dem CallbackonRequestPermissionsResult, um sicherzustellen, dass der Berechtigungsstatus dem spezifischen Kontext korrekt zugeordnet wird, z. B. der Audio- oder Display-Brille und nicht dem Host-Smartphone. - Ihre App sollte sowohl gewährte als auch abgelehnte Ergebnisse ordnungsgemäß verarbeiten.
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:
// 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 )
Wichtige Punkte zum Code
- Wenn Sie Audio- und Displaybrillen als Zielgruppe festlegen möchten, müssen Sie die entsprechende Geräte-ID aus einem projizierten Kontext abrufen, den Sie mit
createProjectedDeviceContexterstellt haben. Übergeben Sie diese ID mit Ihrem Aufruf der MethoderequestPermissions.
Berechtigungsergebnisse verarbeiten
Sobald der Nutzer auf dem Smartphone auf das Berechtigungsdialogfeld reagiert, wird seine Entscheidung an Ihre App übermittelt, indem der onRequestPermissionsResult-Callback aufgerufen wird.
Überschreiben Sie onRequestPermissionsResult in der Activity-Instanz, die die Berechtigungsanfrage initiiert hat, um die Antwort zu verarbeiten.
Das folgende Code-Snippet zeigt, wie der Callback verarbeitet und geprüft wird, ob der Nutzer die angeforderten Berechtigungen erteilt hat:
@RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) override fun onRequestPermissionsResult( requestCode: Int, permissions: Array<String>, grantResults: IntArray, deviceId: Int, ) { super.onRequestPermissionsResult(requestCode, permissions, grantResults, deviceId) if (requestCode != CAMERA_PERMISSION_REQUEST_CODE) return val isCameraGranted = grantResults.getOrNull(permissions.indexOf(Manifest.permission.CAMERA)) == PackageManager.PERMISSION_GRANTED if (isCameraGranted) { initializeCameraFeatures() } else { onCameraPermissionDenied() } }
Wichtige Punkte zum Code
- Verwenden Sie die Überladung
deviceIdmit dem CallbackonRequestPermissionsResult, um sicherzustellen, dass der Berechtigungsstatus dem spezifischen Kontext korrekt zugeordnet wird, z. B. der Audio- oder Display-Brille und nicht dem Host-Smartphone. - Ihre App sollte sowohl gewährte als auch abgelehnte Ergebnisse ordnungsgemäß verarbeiten.