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

Obsługiwane urządzenia z XR
Te wskazówki pomogą Ci tworzyć aplikacje na te typy urządzeń z XR.
Okulary audio i
wyświetlające obraz

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

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 launch w 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ń:

  1. Na okularach: na wyświetlanym urządzeniu (okularach) pojawia się aktywność, która prosi użytkownika o sprawdzenie telefonu, aby kontynuować.

  2. 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.

  3. 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.

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