Omówienie kierowania danych wejściowych z przycisków fizycznych w przypadku okularów audio

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

W przypadku okularów audio system kieruje fizyczne dane wejściowe (takie jak gesty na touchpadzie lub naciśnięcia przycisków) na podstawie świadomości użytkownika, a nie fokusu wyświetlacza. Użytkownicy nie widzą interfejsu, więc system kieruje fizyczne dane wejściowe do wyświetlanej aktywności wrażenia użytkownika aplikacji, z którą użytkownik aktywnie wchodzi w interakcję.

Jak system określa świadomość użytkowników

System określa świadomość użytkownika, sprawdzając, które z tych strumieni danych są aktywne:

  • Strumienie wyjściowe audio: odczyty głosowe, sygnały dźwiękowe lub odtwarzanie multimediów.
  • Strumienie nagrywania z mikrofonu: bieżące polecenia głosowe lub nagrywanie dźwięku z otoczenia użytkownika.
  • Strumienie przechwytywania z kamery: strumienie wideo lub zdjęć.

Niektóre strumienie danych są tymczasowe i przyciągają uwagę użytkownika tylko przez krótki czas. Na przykład odczytanie na głos informacji o następnym skręcie, który użytkownik powinien wykonać podczas nawigacji po trasie. Inne strumienie danych są nieokreślone i utrzymują świadomość użytkownika tak długo, jak trwają. Na przykład odtwarzanie multimediów z losową playlistą bez końca. Gdy strumień danych tymczasowych przerywa strumień danych nieokreślonych, tymczasowo przyciąga uwagę użytkownika.

Równoczesność i aktywność okna

Użytkownicy często korzystają z kilku aplikacji jednocześnie na okularach audio. Użytkownik może na przykład słuchać muzyki, korzystając ze szczegółowych wskazówek dojazdu. W takich przypadkach system przypisuje stan równoczesności i przenosi zaznaczenie wejściowe, aby dopasować je do zaznaczenia dźwięku, wykonując te czynności:

  • wznawianie lub zatrzymywanie prognozowanej aktywności aplikacji;
  • Przekierowuję dane wejściowe do wyświetlanej na pierwszym planie aktywności.

Takie podejście pomaga zapewnić spójne wrażenia użytkownika.

Zezwalanie systemowi na ponowne uruchamianie wyświetlanej aktywności

Gdy aplikacja zyskuje świadomość użytkownika, zwłaszcza jeśli jej przewidywana aktywność była w tle, system musi być w stanie wznowić aktywność i skierować do niej dane wejściowe.

Aby mieć pewność, że system może ponownie uruchomić aktywność:

  1. Utwórz intencję oczekującą: utwórz jawną intencję Intent wskazującą docelową aktywność, która ma być wyświetlana. Umieść intencję w PendingIntent i ustaw FLAG_UPDATE_CURRENT lub FLAG_IMMUTABLE, aby zachować bezpieczne i przewidywalne działanie podczas uruchamiania:

    // Build an explicit Intent pointing to this projected activity and wrap it in a
    // PendingIntent so the system can relaunch it and route physical input to it.
    private val pendingIntent: PendingIntent by lazy {
        val intent = Intent(this, ProjectedInputFocusActivity::class.java)
    
        PendingIntent.getActivity(
            this,
            0,
            intent,
            PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
        )
    }

  2. Zarejestruj odbiornik danych wejściowych: pobierz instancję ProjectedActivityCompat i zarejestruj PendingIntent jako wyznaczony odbiornik danych wejściowych, przekazując go do setActivityAsInputReceiver.

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    
        lifecycleScope.launch {
            // Create or obtain the ProjectedActivityCompat instance
            val projectedActivity = ProjectedActivityCompat.create(this@ProjectedInputFocusActivity)
    
            // Register the PendingIntent as the designated input receiver
            projectedActivity.setActivityAsInputReceiver(pendingIntent)
        }

  3. Czyszczenie odbiornika danych wejściowych podczas czyszczenia: gdy aktywność zostanie zniszczona lub nie będzie już musiała odbierać danych wejściowych, wyczyść odbiornik danych wejściowych, aby zapobiec wysyłaniu nieaktualnych danych PendingIntent i wyciekom pamięci.

    override fun onDestroy() {
        super.onDestroy()
        lifecycleScope.launch {
            val projectedActivity = ProjectedActivityCompat.create(this@ProjectedInputFocusActivity)
            projectedActivity.clearActivityAsInputReceiver()
        }
    }

Jak fokus wejściowy zmienia się w różnych stanach równoczesności

Aby określić, która aplikacja ma być aktywna, system ocenia aktywne strumienie danych i kieruje dane wejściowe na podstawie tych stanów równoczesności:

Stan równoczesności Kontekst środowiskowy Działanie systemu i fokus wprowadzania Przykład

Nierównoczesne

Aktywna jest samodzielna aktywność wyświetlana na ekranie. Nie jest uruchomiona żadna sesja multimedialna w tle.

Fokus wejściowy jest kierowany wyłącznie na wyświetlaną aktywność, nawet w okresach ciszy między odczytami.

Użytkownik korzysta z aplikacji do śledzenia treningu. Nawet w momentach ciszy dane wejściowe z touchpada są kierowane bezpośrednio do aplikacji treningowej.

Częściowo równoczesne

Aktywność wyświetlana na ekranie jest aktywna, ale sesja multimedialna w tle jest wstrzymana.

W okresach ciszy między aktywnymi odczytami aplikacji fokus wejściowy domyślnie przechodzi na wstrzymane opcje sterowania multimediami.

Użytkownik uruchamia aplikację do śledzenia treningu, gdy muzyka jest wstrzymana. Pomiędzy aktualizacjami trenera fitnessu dotknięcie panelu dotykowego powoduje wznowienie odtwarzania muzyki, a nie uruchomienie funkcji treningu.

Równoczesne

odtwarzanie podwójne jest aktywne (np. komunikat głosowy aplikacji przerywa lub wycisza muzykę w tle);

Aktywność audio jest równa aktywności wprowadzania.

Podczas aktywnych odczytów fokus wejściowy jest kierowany do wyświetlanej aktywności, a po zakończeniu strumienia audio wraca do opcji sterowania multimediami.

Użytkownik słucha muzyki, gdy aplikacja do nawigacji odczytuje instrukcje. Podczas odczytu aplikacja do nawigacji jest aktywna. Po zakończeniu odczytywania zaznaczenie zostanie przeniesione z powrotem na opcje sterowania multimediami.

Zabezpieczenia dotyczące czasu działania systemu

System zapewnia te zabezpieczenia, aby zapobiegać przypadkowemu wprowadzaniu danych lub nieoczekiwanym zachowaniom użytkowników:

  • Okresy prolongaty w przypadku nowo uruchomionych aktywności wyświetlanych na ekranie: aby uwzględnić opóźnienia sieci lub ładowania zasobów przy zimnym starcie, nowo uruchomione aktywności wyświetlane na ekranie otrzymują krótki okres prolongaty na ustanowienie strumienia danych i zwrócenie uwagi użytkownika, zanim system zatrzyma aktywność wyświetlaną na ekranie i przeniesie ją do tła.
  • Fokus jest kierowany na podstawie świadomości użytkownika: jeśli świadomość użytkownika zmienia się pod wpływem nowego, aktywnego strumienia danych, takiego jak odczyt dźwiękowy, system natychmiast wznawia wyświetlaną aktywność i kieruje na nią fokus wejściowy.
  • Bufory przejścia podczas odtwarzania multimediów: gdy odczyt tymczasowy zakończy się podczas odtwarzania multimediów w tle, fokus wejściowy pozostaje przez chwilę na wyświetlanej aktywności. Okres buforowania pomaga zapobiegać przypadkowym działaniom, takim jak próba wyciszenia odczytu, która skutkuje pominięciem utworu muzycznego. Po upływie czasu buforowania system zatrzymuje wyświetlaną aktywność aplikacji i przekazuje fokus wejściowy do opcji sterowania multimediami.
  • Bezczynne wyświetlane aktywności są zatrzymywane lub wstrzymywane: system zatrzymuje wszystkie bezczynne wyświetlane aktywności bez aktywnych strumieni danych po kilku minutach (lub natychmiast w przypadku trwającego odtwarzania multimediów po wstrzymaniu).

Przenoszenie zaznaczenia w praktyce

Aby dowiedzieć się, jak fokus wejściowy przechodzi między stanami równoczesności, zapoznaj się z tymi przykładowymi scenariuszami dotyczącymi aplikacji do nawigacji, która podaje szczegółowe wskazówki dojazdu:

Scenariusz A: niejednoczesne (nieaktywne multimedia)

W tym scenariuszu system kieruje dane wejściowe do aplikacji do nawigacji, która ma świadomość użytkownika podczas całej podróży.

Rysunek 1. Jak w tym scenariuszu bez równoczesności byłoby kierowane zaznaczenie danych wejściowych w przypadku aplikacji do nawigacji.
  1. Użytkownik uruchamia nawigację bez muzyki w tle.
  2. Aplikacja do nawigacji uruchamia prognozowaną aktywność na okularach audio.
  3. Ponieważ nie ma aktywnej sesji multimedialnej, aplikacja do nawigacji utrzymuje zaznaczenie na touchpadzie przez całą podróż.
  4. Działania użytkownika: kliknięcie podczas aktywnego odczytu może wyciszyć wskazówki. Kliknięcie podczas ciszy może spowodować powtórzenie ostatniej instrukcji.

Scenariusz B: częściowo jednoczesne odtwarzanie (wstrzymane multimedia)

W tym przypadku system kieruje dane wejściowe do opcji sterowania multimediami, gdy aplikacja do nawigacji nie jest aktywna.

Rysunek 2. Jak w tym częściowo równoczesnym scenariuszu będzie kierowane zaznaczenie danych wejściowych w aplikacji do nawigacji.
  1. Użytkownik uruchamia nawigację, gdy muzyka w tle jest wstrzymana.
  2. W okresach ciszy między odczytami zaznaczenie domyślnie przechodzi na opcje sterowania multimediami.
  3. Gdy aplikacja do nawigacji wypowiada komunikat „Za 150 metrów skręć w lewo”, uzyskuje fokus.
  4. Działania użytkownika: kliknięcie podczas odczytywania może wyciszyć wskazówki. Kliknięcie przycisku podczas ciszy wznawia odtwarzanie muzyki.

Scenariusz C: jednoczesne (aktywne multimedia)

W tym scenariuszu system kieruje dane wejściowe do systemowych opcji sterowania multimediami, gdy aplikacja do nawigacji nie jest świadoma obecności użytkownika, a dźwięk z aktywnego odtwarzania multimediów jest wyciszany podczas każdego odczytu z aplikacji do nawigacji.

Rysunek 3. Jak w tym scenariuszu jednoczesnego działania byłoby kierowane zaznaczenie danych wejściowych w aplikacji do nawigacji.
  1. Użytkownik uruchamia nawigację podczas odtwarzania muzyki.
  2. Podczas odczytywania instrukcji system wycisza dźwięk w tle i przenosi fokus na aplikację do nawigacji.
  3. Działania użytkownika: kliknięcie podczas odczytywania może wyciszyć wskazówki. Dotknięcie podczas okresów ciszy steruje odtwarzaniem multimediów (wstrzymuje lub wznawia).