Podobnie jak w przypadku telefonu, dostęp do wrażliwych elementów sprzętu, takich jak aparat i mikrofon w okularach audio i okularach z wyświetlaczem, wymaga wyraźnej zgody użytkownika. Są to uprawnienia specyficzne dla okularów, a Twoja aplikacja musi o nie poprosić w czasie działania, nawet jeśli ma już odpowiednie uprawnienia na telefonie.
Deklarowanie uprawnień w pliku manifestu aplikacji
Zanim poprosisz o uprawnienia, musisz zadeklarować je w pliku manifestu aplikacji
za pomocą elementu <uses-permission>. Deklaracja pozostaje taka sama niezależnie od tego, czy uprawnienie dotyczy telefonu, czy funkcji specyficznej dla okularów, 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 camera. -->
<uses-permission android:name="android.permission.CAMERA"/>
<application ...>
...
</application>
</manifest>
Zanim poprosisz o uprawnienia do okularów
Zapoznaj się z zasadami i procesami dotyczącymi uprawnień, aby zapewnić użytkownikom jak najlepsze wrażenia. Sprawdź na przykład, czy użytkownik przyznał już uprawnienia w czasie działania wymagane przez Twoją aplikację oraz czy aplikacja powinna wyświetlić użytkownikowi uzasadnienie, zanim poprosi o uprawnienia specyficzne dla okularów.
Scenariusze dotyczące uprawnień
Podczas proszenia o niebezpieczne uprawnienia w czasie działania na okularach audio i okularach z wyświetlaczem możesz napotkać różne scenariusze:
- Prośba o uprawnienia w czasie działania z wyświetlanej aktywności
- Prośba o uprawnienia w czasie działania z aktywności telefonu
Szczegółowe informacje o każdym scenariuszu znajdziesz w kolejnych sekcjach tego przewodnika.
Prośba o uprawnienia w czasie działania z wyświetlanej aktywności i ich obsługa
Aby poprosić o uprawnienia do okularów audio i okularów z wyświetlaczem, najpierw użyj
ActivityResultLauncher z metodą
ProjectedPermissionsResultContract, aby zarejestrować narzędzie do uruchamiania uprawnień. Gdy użytkownik zareaguje na prośbę o uprawnienia, wywołanie zwrotne otrzyma mapę nazw uprawnień i ich stanów przyznania.
// 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 } }
Najważniejsze informacje o kodzie
- Musisz określić, jakich uprawnień wymaga Twoja aplikacja, np.
Manifest.permission.CAMERAlubManifest.permission.RECORD_AUDIO. - Twoja aplikacja powinna prawidłowo obsługiwać zarówno przyznane, jak i odrzucone uprawnienia w wywołaniu zwrotnym narzędzia do uruchamiania.
Aby uruchomić proces prośby o uprawnienia, przekaż listę
ProjectedPermissionsRequestParams do zarejestrowanego narzędzia do uruchamiania uprawnień
launch method. Obiekt ProjectedPermissionsRequestParams łączy żądane uprawnienia z manifestu z niestandardowym ciągiem rationale. Ciąg rationale musi jasno i zwięźle wyjaśniać, dlaczego aplikacja wymaga dostępu do funkcji sprzętowych okularów (takich jak aparat lub mikrofon).
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)) }
Najważniejsze informacje o kodzie
- Wywołanie
launchw narzędziu do uruchamiania powoduje uruchomienie procesu prośby o uprawnienia użytkownika.
Omówienie procesu prośby o uprawnienia
Gdy uruchomisz prośbę o uprawnienia za pomocą metody
ProjectedPermissionsResultContract, system zainicjuje
skoordynowany proces użytkownika zarówno na okularach, jak i na telefonie.
Podczas procesu uprawnień Twoja aplikacja i użytkownik mogą się spodziewać tych działań:
Na okularach: na wyświetlanym urządzeniu (okularach) pojawia się aktywność, która prosi użytkownika o sprawdzenie telefonu, aby kontynuować.
Na telefonie: jednocześnie na urządzeniu hosta (telefonie) uruchamia się aktywność. Na tym ekranie wyświetla się podany przez Ciebie ciąg uzasadnienia i daje użytkownikowi możliwość kontynuowania lub anulowania.
Na telefonie: jeśli użytkownik zaakceptuje uzasadnienie, na telefonie pojawi się zmodyfikowane okno systemowe Androida z prośbą o uprawnienia, które informuje użytkownika, że przyznaje on uprawnienia okularom (a nie telefonowi), i że może formalnie przyznać lub odrzucić uprawnienia.
Otrzymywanie wyniku: gdy użytkownik podejmie ostateczną decyzję, aktywności na telefonie i okularach zostaną zamknięte. Następnie zostanie wywołane wywołanie zwrotne
ActivityResultLauncherz mapą zawierającą stan przyznania każdego żądanego uprawnienia.
Prośba o uprawnienia w czasie działania w aktywności telefonu
Jeśli Twoja aplikacja działa w aktywności telefonu, ale wymaga uprawnień do okularów audio lub okularów z wyświetlaczem (np. aby umożliwić użytkownikowi przełączenie strumienia wideo na aparat okularów w celu uzyskania widoku z perspektywy pierwszej osoby), poproś o uprawnienia za pomocą metody Activity#requestPermissions(permissions, requestCode,
deviceId) specyficznej dla urządzenia.
Aby kierować prośbę do okularów audio i okularów z wyświetlaczem, uzyskaj odpowiedni identyfikator urządzenia, wywołując
getDeviceId w kontekście wyświetlanego urządzenia. Przekaż ten identyfikator podczas proszenia o uprawnienia z aktywności telefonu, jak pokazano w tym przykładzie:
// 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 )
Obsługa wyników uprawnień
Gdy użytkownik odpowie na prośbę o uprawnienia na telefonie, jego decyzja zostanie przekazana do Twojej aplikacji przez wywołanie zwrotne onRequestPermissionsResult.
Aby obsłużyć odpowiedź, zastąp onRequestPermissionsResult w instancji
Activity, która zainicjowała prośbę o uprawnienia.
Poniższy fragment kodu pokazuje, jak obsługiwać wywołanie zwrotne i sprawdzać, czy użytkownik przyznał wymagane uprawnienia:
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 } } }
Najważniejsze informacje o kodzie
- Użyj przeciążenia
deviceIdz wywołaniem zwrotnymonRequestPermissionsResult, aby mieć pewność, że stan uprawnień jest prawidłowo przypisany do konkretnego kontekstu, np. okularów audio lub okularów z wyświetlaczem, a nie do telefonu hosta. - Twoja aplikacja powinna prawidłowo obsługiwać zarówno przyznane, jak i odrzucone uprawnienia.