Genau wie bei einem Smartphone ist für den Zugriff auf sensible Hardware wie die Kamera und das Mikrofon von KI-Brillen die ausdrückliche Einwilligung des Nutzers erforderlich. 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.
In diesem Leitfaden erfahren Sie, wie Sie:
- Berechtigungen im Manifest Ihrer App deklarieren
- Berechtigungen anfordern
- Informationen zum Berechtigungsablauf
Berechtigungen im Manifest Ihrer App deklarieren
Bevor Sie Berechtigungen anfordern, müssen Sie sie mit dem Element <uses-permission> im Manifest Ihrer App deklarieren. Diese Deklaration bleibt gleich, unabhängig davon, ob die Berechtigung für eine Smartphone- oder eine KI-Brillen-spezifische Funktion gilt. Sie müssen sie jedoch weiterhin 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 microphone. -->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<application ...>
...
</application>
</manifest>
Berechtigungen anfordern
Wenn Sie Berechtigungen für KI-Brillen anfordern möchten, verwenden Sie die Methode ActivityResultLauncher mit der Methode ProjectedPermissionsResultContract(). Sie müssen angeben, welche Berechtigungen Ihre App benötigt, z. B. Manifest.permission.CAMERA oder Manifest.permission.RECORD_AUDIO. Geben Sie eine klare und prägnante Begründung dafür an, warum Ihre App diese Berechtigungen benötigt. Diese Begründung wird dem Nutzer angezeigt, damit er eine fundierte Entscheidung treffen kann.
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()
}
}
Wichtige Punkte zum Code
- Wir erstellen ein
ActivityResultLaunchermit der MethodeProjectedPermissionsResultContract(). Der Callback empfängt eine Zuordnung von Berechtigungsnamen zu ihrem gewährten Status. - Die Funktion
requestAudioPermission()erstellt einProjectedPermissionsRequestParams-Objekt. Dieses Objekt enthält die Liste der benötigten Berechtigungen und die für den Nutzer sichtbare Begründung. - Wenn
launch()im Launcher aufgerufen wird, wird der Nutzerfluss für die Berechtigungsanfrage ausgelöst. - Ihre App sollte sowohl gewährte als auch abgelehnte Ergebnisse im Callback des Launchers problemlos verarbeiten können.
Ablauf der Berechtigungsanfrage
Wenn Sie eine Berechtigungsanfrage mit der Methode ProjectedPermissionsResultContract() starten, initiiert das System einen koordinierten Nutzerfluss sowohl auf der KI-Brille als auch auf dem Smartphone.
So läuft die Berechtigungsanfrage ab:
Auf der KI-Brille: Auf dem projizierten Gerät (Brille) wird eine Aktivität angezeigt, in der der Nutzer aufgefordert wird, auf sein Smartphone zu schauen, 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. Der Nutzer kann dann fortfahren oder abbrechen.
Auf dem Smartphone: Wenn der Nutzer die Begründung akzeptiert, wird auf dem Smartphone ein geänderter Android-Systemberechtigungsdialog angezeigt, in dem der Nutzer darüber informiert wird, dass er die Berechtigung für die KI-Brille (nicht für das Smartphone) erteilt. Der Nutzer kann die Berechtigung dann offiziell erteilen oder verweigern.
Ergebnis erhalten: Nachdem der Nutzer seine endgültige Auswahl getroffen hat, werden die Aktivitäten auf dem Smartphone und der KI-Brille beendet. Ihr
ActivityResultLauncher-Callback wird dann mit einer Karte aufgerufen, die den gewährten Status für jede angeforderte Berechtigung enthält.