Podobnie jak w przypadku telefonu, dostęp do wrażliwego sprzętu, takiego jak aparat w okularach audio i okularach z wyświetlaczem, wymaga wyraźnej zgody użytkownika. Są to uprawnienia dotyczące okularów, o które aplikacja musi prosić 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 funkcji telefonu czy okularów, ale nadal musisz wyraźnie poprosić o uprawnienia do sprzętu lub funkcji 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, np. sprawdzając, czy użytkownik przyznał już uprawnienia w czasie działania aplikacji, których wymaga Twoja aplikacja, oraz czy aplikacja powinna wyświetlić uzasadnienie użytkownikowi przed poproszeniem o uprawnienia dotyczące okularów.
Scenariusze dotyczące uprawnień
Podczas wysyłania prośby o niebezpieczne uprawnienia w czasie działania aplikacji na okularach audio i okularach z wyświetlaczem możesz napotkać różne scenariusze:
- Prośba o uprawnienia w czasie działania aplikacji z wyświetlanej aktywności
- Prośba o uprawnienia w czasie działania z poziomu aktywności na telefonie
Szczegółowe informacje o każdym scenariuszu znajdziesz w sekcjach poniżej.
Prośba o uprawnienia w czasie działania aplikacji z wyświetlanej aktywności
Aby poprosić o uprawnienia w czasie działania aplikacji do dźwięku lub okularów z wyświetlaczem z wyświetlanej aktywności, użyj metody ProjectedActivityCompat.requestPermissions.
Wywołanie tej metody powoduje uruchomienie skoordynowanego wzorca przeglądania zarówno na okularach, jak i na telefonie hosta.
- Na okularach: system otwiera na okularach wyświetlaną aktywność towarzyszącą i instruuje użytkownika, aby sprawdził telefon i odpowiedział na prośbę o uprawnienia.
- Na telefonie: na ekranie telefonu pojawi się okno uprawnień systemu Android. W oknie dialogowym wyraźnie widać, że użytkownik przyznaje uprawnienia okularom, a nie telefonowi. Użytkownik może wtedy zaakceptować lub odrzucić prośbę.
Poniższy przykład pokazuje, jak poprosić o uprawnienia do okularów z poziomu wyświetlanej aktywności:
@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) } } }
Najważniejsze informacje o kodzie
- Użyj
ProjectedActivityCompat.requestPermissionszamiast standardowej metodyActivityCompat. Ta metoda jest przeznaczona do uprawnień w czasie działania aplikacji dotyczących dźwięku i okularów z wyświetlaczem, a nie telefonu hosta.
Obsługa wyników uprawnień
Gdy użytkownik odpowie na prośbę o przyznanie uprawnień na telefonie, jego decyzja zostanie przekazana do aplikacji przez wywołanie wywołania zwrotnego onRequestPermissionsResult.
System automatycznie zamknie wyświetlaną aktywność towarzyszącą. W przypadku okularów audio następuje to po zakończeniu odtwarzania alertu dźwiękowego. Na okularach z wyświetlaczem dzieje się to po tym, jak użytkownik odpowie na wszystkie okna z prośbą o przyznanie uprawnień.
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łużyć wywołanie zwrotne i sprawdzić, czy użytkownik przyznał wymagane uprawnienia:
@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() } }
Najważniejsze informacje o kodzie
- Użyj przeciążenia
deviceIdz wywołaniem zwrotnymonRequestPermissionsResult, aby upewnić się, że stan uprawnień jest prawidłowo mapowany na konkretny kontekst, np. na okulary z wyświetlaczem lub okulary audio, a nie na telefon hosta. - Aplikacja powinna prawidłowo obsługiwać zarówno przyznane, jak i odrzucone uprawnienia.
Prośba o uprawnienia w czasie działania aplikacji na telefonie
Jeśli aplikacja działa w ramach aktywności na telefonie, ale wymaga uprawnień do dźwięku lub okularów z wyświetlaczem – na przykład 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) właściwej dla danego urządzenia:
// 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 )
Najważniejsze informacje o kodzie
- Aby kierować reklamy na urządzenia audio i okulary z wyświetlaczem, uzyskaj odpowiedni identyfikator urządzenia z prognozowanego kontekstu utworzonego za pomocą
createProjectedDeviceContext. Przekaż ten identyfikator w wywołaniu metodyrequestPermissions.
Obsługa wyników uprawnień
Gdy użytkownik odpowie na prośbę o przyznanie uprawnień na telefonie, jego decyzja zostanie przekazana do aplikacji przez wywołanie wywołania zwrotnego 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łużyć wywołanie zwrotne i sprawdzić, czy użytkownik przyznał wymagane uprawnienia:
@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() } }
Najważniejsze informacje o kodzie
- Użyj przeciążenia
deviceIdz wywołaniem zwrotnymonRequestPermissionsResult, aby mieć pewność, że stan uprawnień jest prawidłowo mapowany na konkretny kontekst, np. na okulary z wyświetlaczem lub okulary audio, a nie na telefon hosta. - Aplikacja powinna prawidłowo obsługiwać zarówno przyznane, jak i odrzucone uprawnienia.