Obsługa połączonych wyświetlaczy

Połączone wyświetlacze umożliwiają korzystanie z okna pulpitu na standardowych telefonach, zapewniając użytkownikom dostęp do dużych ekranów z ich urządzeń mobilnych. Ta funkcja otwiera nowe możliwości interakcji z aplikacją i zwiększa produktywność użytkowników.

Wszystkie wyjątkowe funkcje okna na komputerze dostępne są na podłączonych wyświetlaczach. Gdy połączysz telefon z ekranem, stan telefonu pozostanie bez zmian, a na połączonym ekranie rozpocznie się pusta sesja pulpitu. Urządzenie i wyświetlacz działają jako 2 osobne systemy z aplikacją na każdy wyświetlacz.

Rysunek 1. Telefon podłączony do wyświetlacza zewnętrznego, na którym wyświetla się sesja pulpitu, podczas gdy telefon zachowuje swój stan.

Jeśli podłączysz urządzenie obsługujące tryb okien na pulpicie, np. tablet, do monitora zewnętrznego, sesja pulpitu będzie obejmować oba wyświetlacze. Oba wyświetlacze działają wtedy jako jeden ciągły system. Dzięki temu okna, treści i kursor mogą się swobodnie przemieszczać między dwoma wyświetlaczami.

Rysunek 2. Tablet podłączony do monitora zewnętrznego, dzięki czemu sesja na komputerze jest wyświetlana na obu ekranach.

Aby skutecznie obsługiwać wyświetlacze połączone, musisz zwrócić uwagę na kilka aspektów projektowania i wdrażania aplikacji. Poniższe sprawdzone metody zapewniają użytkownikom płynne i wydajne korzystanie z usługi.

Obsługa zmian dynamicznych reklam

Wiele aplikacji jest tworzonych z założenia, że obiekt Display i jego właściwości nie ulegną zmianie w trakcie cyklu życia aplikacji. Jednak gdy użytkownik podłączy lub odłączy monitor zewnętrzny albo przeniesie okno aplikacji między wyświetlaczami, obiekt Display powiązany z kontekstem lub oknem aplikacji może się zmienić. Właściwości wyświetlacza, takie jak rozmiar, rozdzielczość, częstotliwość odświeżania, obsługa HDR i gęstość, mogą się różnić. Jeśli zdefiniujesz wartości w kodzie twardym na podstawie ekranu telefonu, układy prawdopodobnie nie będą działać na ekranie zewnętrznym.

Wyświetlacze zewnętrzne mogą też mieć bardzo zróżnicowaną gęstość pikseli. Musisz się upewnić, że aplikacja prawidłowo reaguje na zmiany gęstości. Polega to na używaniu pikseli niezależnych od gęstości (dp) w przypadku układów, udostępnianiu zasobów dostosowanych do gęstości i zapewnieniu odpowiedniego skalowania interfejsu.

Używanie odpowiedniego kontekstu

W środowiskach z wiele wyświetlaczami kluczowe znaczenie ma używanie odpowiedniego kontekstu. Podczas uzyskiwania dostępu do zasobów kontekst aktywności (który jest wyświetlany) różni się od kontekstu aplikacji (który nie jest wyświetlany).

Kontekst aktywności zawiera informacje o wyświetlaczu i jest zawsze dostosowywany do obszaru wyświetlacza, w którym pojawia się aktywność. Dzięki temu możesz uzyskać prawidłowe informacje o gęstości wyświetlacza lub danych okna aplikacji. Aby uzyskać informacje o bieżącym oknie lub wyświetlaczu, zawsze używaj kontekstu aktywności (lub innego kontekstu opartego na interfejsie użytkownika). Ma to też wpływ na niektóre interfejsy API systemowe, które korzystają z informacji z kontekstu.

Pobieranie informacji o wyświetlaniu

Aby uzyskać informacje o konkretnym wyświetlaczu, np. jego rozmiar lub flagi wskazujące, czy jest on bezpieczny, możesz użyć klasy Display. Aby uzyskać informacje o dostępnych wyświetlaczach, użyj usługi systemowej DisplayManager:

val displayManager = getSystemService(Context.DISPLAY_SERVICE) as DisplayManager
val displays = displayManager.getDisplays()

Zarządzanie uruchamianiem i konfiguracją aktywności

W przypadku połączonych wyświetlaczy aplikacje mogą określać, na którym wyświetlaczu mają działać, gdy są uruchamiane lub gdy tworzą inną aktywność. To zachowanie zależy od trybu uruchamiania aktywności zdefiniowanego w pliku manifestu oraz od opcji i flag intencji ustawionych przez podmiot uruchamiający aktywność.

Gdy aktywność przenosi się na drugi wyświetlacz, aplikacja może zostać zaktualizowana pod kątem kontekstu, rozmiaru okna oraz konfiguracji i zasobów. Jeśli aktywność obsługuje zmianę konfiguracji, jest o niej informowana w onConfigurationChanged(). W przeciwnym razie aktywność zostanie ponownie uruchomiona.

Jeśli wybrany tryb uruchamiania aktywności pozwala na uruchamianie wielu instancji, uruchomienie na ekranie dodatkowym może spowodować utworzenie nowej instancji aktywności. Obie aktywności są wznawiane w tym samym czasie, co może być przydatne w pewnych sytuacjach wielozadaniowości.

Aktywność na konkretnym ekranie możesz uruchomić za pomocą ActivityOptions:

val options = ActivityOptions.makeBasic()
options.setLaunchDisplayId(targetDisplay.displayId)
startActivity(intent, options.toBundle())

Unikaj list dozwolonych urządzeń

Aplikacje czasami ograniczają interfejs i funkcje dużego ekranu do wybranych urządzeń za pomocą listy dozwolonych lub poprzez sprawdzenie wbudowanego rozmiaru wyświetlacza. W przypadku połączonych wyświetlaczy to podejście nie jest już skuteczne, ponieważ praktycznie każde nowe urządzenie można podłączyć do dużego ekranu. Zaprojektuj aplikację tak, aby była elastyczna i dopasowywała się do różnych rozmiarów i gęstości ekranu.

Obsługa urządzeń zewnętrznych

Gdy użytkownicy łączą się z wyświetlaczem zewnętrznym, często tworzą środowisko bardziej zbliżone do komputera. Często wymaga to korzystania z klawiatur zewnętrznych, myszy, trackpadów, kamer internetowych, mikrofonów i głośników. Musisz się upewnić, że aplikacja działa płynnie z tymi urządzeniami peryferyjnymi. Obejmuje to obsługę skrótów klawiszowych, zarządzanie interakcjami wskaźnika myszy, prawidłowe obsługiwanie zewnętrznych kamer i mikrofonów oraz przestrzeganie zasad kierowania sygnału audio. Więcej informacji znajdziesz w artykule Zgodność z klawiaturą na dużych ekranach.

Zwiększanie produktywności użytkowników

Połączone wyświetlacze dają duże możliwości zwiększenia produktywności użytkowników. Masz teraz narzędzia do tworzenia aplikacji mobilnych, które mogą zapewniać użytkownikom wrażenia podobne do tych, jakie oferują aplikacje na komputery. Rozważ wdrożenie tych funkcji, aby zwiększyć produktywność użytkowników:

  • Zezwalaj użytkownikom na otwieranie wielu instancji tej samej aplikacji. Jest to nieoceniona funkcja podczas wykonywania takich zadań jak porównywanie dokumentów, zarządzanie różnymi rozmowami czy wyświetlanie wielu plików jednocześnie.
  • Umożliw użytkownikom udostępnianie bogatych danych w aplikacji i poza nią za pomocą funkcji przeciągania i upuszczania.
  • Pomagaj użytkownikom w utrzymaniu ich przepływu pracy podczas zmian konfiguracji dzięki wdrożeniu niezawodnego systemu zarządzania stanem.

Stosując się do tych wytycznych i korzystając z podanych przykładów kodu, możesz tworzyć aplikacje, które bezproblemowo dostosowują się do połączonych wyświetlaczy, zapewniając użytkownikom bogatsze i bardziej produktywne wrażenia.