Hardwareberechtigungen für Audio- und Displaybrillen anfordern

XR‑Geräte, für die der Leitfaden gilt
Dieser Leitfaden hilft Ihnen dabei, Erlebnisse für die folgenden Arten von XR-Geräten zu entwickeln.
Audio- und
Displaybrillen

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

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

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:

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

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

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

  4. 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 ActivityResultLauncher Callback 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 deviceId mit dem Callback onRequestPermissionsResult, 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.