Podobnie jak w przypadku telefonu, dostęp do wrażliwych elementów sprzętu, takich jak aparat i mikrofon w okularach AI, wymaga wyraźnej zgody użytkownika. Są to uprawnienia specyficzne dla okularów, o które aplikacja musi poprosić w czasie działania, nawet jeśli ma już odpowiednie uprawnienia na telefonie.
Z tego przewodnika dowiesz się, jak:
- Deklarowanie uprawnień w manifeście aplikacji
- Prośba o uprawnienia
- Informacje o procesie uprawnień
Zadeklaruj uprawnienia w manifeście aplikacji.
Zanim poprosisz o uprawnienia, musisz zadeklarować je w pliku manifestu aplikacji za pomocą elementu <uses-permission>. Ta deklaracja pozostaje taka sama niezależnie od tego, czy uprawnienie dotyczy telefonu, czy funkcji okularów z AI, ale nadal musisz wyraźnie poprosić o nie w przypadku sprzętu lub funkcji specyficznych dla okularów.
<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>
Prośba o uprawnienia
Aby poprosić o uprawnienia do korzystania z okularów AI, użyj metody ActivityResultLauncher z metodą ProjectedPermissionsResultContract(). Musisz określić, jakich uprawnień wymaga Twoja aplikacja, np. Manifest.permission.CAMERA lub Manifest.permission.RECORD_AUDIO. Podaj jasne i zwięzłe uzasadnienie, dlaczego Twoja aplikacja potrzebuje tych uprawnień. Uzasadnienie to jest wyświetlane użytkownikowi, aby pomóc mu w podjęciu świadomej decyzji.
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()
}
}
Najważniejsze informacje o kodzie
- Tworzymy
ActivityResultLauncherza pomocą metodyProjectedPermissionsResultContract(). Funkcja zwrotna otrzymuje mapę nazw uprawnień i ich stanów przyznania. - Funkcja
requestAudioPermission()tworzy obiektProjectedPermissionsRequestParams. Ten obiekt zawiera listę potrzebnych uprawnień i uzasadnienie dla użytkownika. - Wywołanie
launch()w programie uruchamiającym powoduje uruchomienie procesu żądania uprawnień od użytkownika. - Aplikacja powinna prawidłowo obsługiwać wyniki przyznania i odmowy w wywołaniu zwrotnym programu uruchamiającego.
Poznaj proces żądania uprawnień
Gdy wyślesz prośbę o uprawnienia za pomocą metody
ProjectedPermissionsResultContract(), system zainicjuje skoordynowany proces interakcji z użytkownikiem zarówno na okularach AI, jak i na telefonie.
Podczas procesu przyznawania uprawnień aplikacja i użytkownik mogą oczekiwać tych działań:
Na okularach AI: na projektorze (okularach) pojawia się aktywność, która instruuje użytkownika, aby spojrzał na telefon, aby kontynuować.
Na telefonie: jednocześnie na urządzeniu hosta (telefonie) uruchamia się aktywność. Na tym ekranie wyświetlany jest podany przez Ciebie ciąg znaków z uzasadnieniem. Użytkownik może kontynuować lub anulować działanie.
Na telefonie: jeśli użytkownik zaakceptuje uzasadnienie, na telefonie pojawi się zmodyfikowane okno uprawnień systemowych Androida, w którym będzie informacja, że użytkownik przyznaje uprawnienia urządzeniu z okularami AI (a nie telefonowi). Użytkownik może formalnie przyznać lub odrzucić uprawnienia.
Otrzymywanie wyniku: po dokonaniu ostatecznego wyboru przez użytkownika działania na telefonie i okularach AI zostaną zamknięte. Następnie wywoływane jest wywołanie zwrotne
ActivityResultLauncherz mapą zawierającą stan przyznania każdego z wymaganych uprawnień.