Proś o uprawnienia do sprzętu w przypadku okularów audio i okularów wyświetlających

Odpowiednie urządzenia z XR
Te wskazówki pomogą Ci tworzyć treści na te typy urządzeń z XR.
Okulary audio i z wyświetlaczem

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.

  1. 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.
  2. 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.requestPermissions zamiast standardowej metody ActivityCompat. 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 deviceId z wywołaniem zwrotnym onRequestPermissionsResult, 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 metody requestPermissions.

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 deviceId z wywołaniem zwrotnym onRequestPermissionsResult, 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.