Tworzenie zaparkowanych aplikacji na system operacyjny Android Automotive

Oprócz obsługi aplikacji przeznaczonych do korzystania podczas jazdy Android Automotive OS obsługuje przeglądarki, gryfilmy do korzystania podczas postoju. Możesz wysyłać tę samą aplikację do samochodów i innych urządzeń z dużym ekranem, wprowadzając tylko kilka drobnych zmian.

Testowanie istniejącej aplikacji na emulatorze systemu operacyjnego Android Automotive

Aby rozpocząć tworzenie aplikacji na system operacyjny Android Automotive, najpierw przetestuj istniejącą aplikację na emulatorze Android Automotive. Aby skonfigurować emulator, wykonaj czynności opisane w sekcji Testowanie za pomocą emulatora systemu operacyjnego Android Automotive. Następnie możesz uruchomić aplikację, postępując zgodnie z instrukcjami w artykule Uruchamianie aplikacji na emulatorze.

Podczas uruchamiania aplikacji sprawdź, czy nie występują problemy ze zgodnością, takie jak:

  • Ekrany systemu informacyjno-rozrywkowego mają stałą orientację. Aby spełniać wytyczne dotyczące jakości aplikacji samochodowych, aplikacje muszą obsługiwać orientację pionową i poziomą.
  • Interfejsy API dostępne na innych urządzeniach mogą nie być dostępne w systemie operacyjnym Android Automotive. Na przykład niektóre interfejsy API usług Google Play są niedostępne w systemie operacyjnym Android Automotive. Szczegółowe informacje o rozwiązywaniu tych problemów znajdziesz w sekcji Wyłączanie funkcji.

Konfigurowanie plików manifestu aplikacji

Aby kierować aplikację na urządzenia z systemem operacyjnym Android Automotive, musisz dodać do niej odpowiednie wpisy w pliku manifestu. Gdy zdecydujesz się na dystrybucję na urządzeniach z systemem operacyjnym Android Automotive, zgodne aplikacje zostaną poddane ręcznej weryfikacji, aby zapewnić, że są bezpieczne do korzystania w samochodzie. Więcej informacji znajdziesz w artykule Rozpowszechnianie treści w pojazdach.

Wymagane funkcje systemu operacyjnego Android Automotive

Aby można było wyświetlać aplikacje na system operacyjny Android Automotive w Sklepie Play w samochodzie, muszą one zawierać element <uses-feature> w pliku AndroidManifest.xml dla funkcji android.hardware.type.automotive:

<manifest ...>
  ...
  <!--
    Depending on the track you choose to distribute your app, the android:required attribute can
    also be "false" or left unset. See Choose a track for Android Automotive OS.
  -->
  <uses-feature
      android:name="android.hardware.type.automotive"
      android:required="[true|false]" />
  ...
</manifest>

Oprócz elementu pokazanego w poprzednim przykładzie kodu aplikacje utworzone na system operacyjny Android Automotive muszą zawierać w elemencie <manifest> element <uses-feature>:

<uses-feature
  android:name="android.hardware.wifi"
  android:required="false"/>
<uses-feature
  android:name="android.hardware.screen.portrait"
  android:required="false"/>
<uses-feature
  android:name="android.hardware.screen.landscape"
  android:required="false"/>

Wyraźne ustawienie tych funkcji jako niewymaganych pomaga zapewnić, że aplikacja nie będzie wchodzić w konflikt z dostępnymi funkcjami sprzętowymi na urządzeniach z systemem operacyjnym Android Automotive.

Upewnij się, że nie ma żadnych działań, które są zoptymalizowane pod kątem rozpraszania uwagi

Aby mieć pewność, że aplikacja jest dostępna tylko podczas parkowania, nie uwzględniaj w żadnym elemencie <activity> w pliku manifestu elementu <meta-data>:

<!-- NOT ALLOWED -->
<meta-data
  android:name="distractionOptimized"
  android:value="true"/>

Bez tych metadanych działania aplikacji są automatycznie blokowane przez system operacyjny, gdy samochód przejdzie w tryb jazdy, aby zmniejszyć rozproszenie uwagi kierowcy. Wywołanie to jest wywołaniem cyklu życia onPause, podczas którego musisz wstrzymać odtwarzanie zarówno obrazu, jak i dźwięku w aplikacji.

Wpisy w pliku manifestu dotyczące kategorii

Oprócz powyższych wymagań, które dotyczą wszystkich zaparkowanych aplikacji, kategorie filmów i gier mają dodatkowe wymagania:

Optymalizowanie aplikacji pod kątem systemu operacyjnego Android Automotive

Aby zapewnić użytkownikom jak najlepsze wrażenia, podczas tworzenia aplikacji na system operacyjny Android Automotive należy wziąć pod uwagę poniższe kwestie.

Optymalizacja pod kątem dużych ekranów

Ekrany w pojazdach z systemem Android Automotive są bardziej zbliżone pod względem rozmiaru, rozdzielczości i formatu do tabletów i urządzeń składanych niż do telefonów. W związku z tym optymalizacja aplikacji pod kątem dużych ekranów przynosi korzyści również użytkownikom w samochodach.

Szczegółowe informacje o tym, jak w pełni wykorzystać duże rozmiary ekranów, znajdziesz w poradnikach Obsługa różnych rozmiarów ekranówPrzenoszenie interfejsu użytkownika do układów elastycznych. Inne źródła inspiracji i wskazówek dotyczących projektowania to galerie multimediówgier.

Inne optymalizacje dużych ekranów, takie jak obsługa urządzeń wejściowych, nie są tak bezpośrednio korzystne dla systemu operacyjnego Android Automotive, ale mogą poprawić wrażenia użytkownika. Na przykład nawigacja za pomocą klawiatury korzysta z tych samych interfejsów API co nawigacja za pomocą pokrętła, więc wszelkie optymalizacje mogą przynieść korzyści obu formatom.

Praca z wstawkami okna i wycięciami wyświetlacza

Podobnie jak w przypadku innych formatów, system operacyjny Android Automotive zawiera elementy interfejsu systemu, takie jak paski stanu i nawigacji, oraz obsługuje wyświetlacze o nieprostokątnych kształtach.

Domyślnie aplikacje wyświetlają się w obszarze, który nie nakłada się na paski systemu ani wycięcia w ekranie. Możesz jednak chcieć, aby aplikacja ukrywała paski systemowe, rysowała treści za nimi lub wyświetlała treści w wycięciu w ekranie zgodnie z opisem w artykule Układ aplikacji w ramkach okna. Jeśli Twoja aplikacja wykonuje któreś z tych działań, zapoznaj się z podrozdziałami poniżej, aby dowiedzieć się, jak zapewnić jej prawidłowe działanie na urządzeniach z systemem operacyjnym Android Automotive.

paski systemowe, tryb pełnoekranowy i renderowanie od krawędzi do krawędzi;

Paski systemu w samochodach mogą mieć inny rozmiar i być umieszczone w innym miejscu niż na innych platformach. Na przykład paski nawigacyjne mogą znajdować się po lewej, prawej lub u dołu ekranu. Nawet jeśli na górze znajduje się pasek stanu, a na dole pasek nawigacyjny (jak w przypadku większości telefonów i tabletów), w samochodach te elementy są zwykle znacznie większe.

System operacyjny Android Automotive umożliwia producentom urządzeń OEM kontrolowanie, czy aplikacje mogą wyświetlać lub ukrywać paski systemu, aby wchodzić w tryb pełnoekranowy i z niego wychodzić. Na przykład, uniemożliwiając aplikacjom ukrywanie pasków systemowych, producenci OEM mogą zapewnić, że elementy sterujące pojazdu, takie jak elementy sterujące klimatyzacją, są zawsze dostępne na ekranie. Jeśli OEM zablokował aplikacjom możliwość kontrolowania pasków systemowych, nic się nie dzieje, gdy aplikacja wywołuje interfejs API WindowInsetsController (lub WindowInsetsControllerCompat). Aby dowiedzieć się więcej o sposobach wykrywania, czy aplikacja była w stanie zmodyfikować załączniki, zapoznaj się z dokumentacją showhide.

Producenci OEM mogą też określić, czy aplikacje mogą ustawiać kolor i przezroczystość pasków systemu, aby były one zawsze wyraźnie widoczne. Jeśli aplikacja jest wyświetlana od krawędzi do krawędzi, sprawdź, czy za paskami systemowymi wyświetlane są tylko treści niekrytyczne. Te treści mogą być niewidoczne, jeśli producent OEM urządzenia uniemożliwia ustawienie koloru lub przezroczystości pasków.

<!-- Depending on OEM configuration, these style declarations
     (and the corresponding runtime calls) may be ignored -->
<style name="...">
  <item name="android:statusBarColor">...</item>
  <item name="android:navigationBarColor">...</item>
  <item name="android:windowTranslucentStatus">...</item>
  <item name="android:windowTranslucentNavigation">...</status>
</style>

Jeśli aplikacja zajmuje cały ekran, nie zakładaj rozmiaru, liczby, typu ani lokalizacji pasków systemowych. Zamiast tego użyj interfejsów API okienek wstawionych, aby rozmieścić treści aplikacji w stosunku do pasków systemu. Więcej informacji o używaniu tych interfejsów API znajdziesz w artykule Wyświetlanie treści od krawędzi do krawędzi w aplikacji. Stałe wartości wypełnienia, które, choć nie są zalecane, mogą utrzymać treści w bezpiecznej strefie na innych urządzeniach, ale prawdopodobnie nie w samochodach.

dostosowywać się do wyświetlaczy o nieregularnych kształtach,

Oprócz wyświetlaczy prostokątnych niektóre pojazdy mogą mieć ekrany o nieregularnym kształcie, jak na rysunku 1:

Schemat urządzenia z systemem Android Automotive z wyświetlaczem zakrzywionym po prawej stronie.
Rysunek 1. Urządzenie z systemem operacyjnym Android Automotive z wyświetlaczem zakrzywionym po prawej stronie. Zielony obszar to bezpieczny prostokąt, który nie zachodzi na ogranicznik wyświetlacza krzywej.

Jeśli Twoja aplikacja nie renderuje się od krawędzi do krawędzi, nie musisz nic robić, aby renderowała się w bezpiecznej strefie.

Jeśli Twoja aplikacja jest renderowana od krawędzi do krawędzi, możesz wybrać, jak ma się zachowywać w przypadku wycięć w ekranie. Możesz to zrobić, korzystając z zasobów, ustawiając atrybut android:windowLayoutInDisplayCutoutMode dla motywu aplikacji lub modyfikując atrybut layoutInDisplayCutoutMode okna w czasie działania.

Typy wycięć na wyświetlaczu w urządzeniach z systemem Android Automotive różnią się od tych na urządzeniach mobilnych, dlatego nie używaj LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT ani LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES, które mają działanie zoptymalizowane pod kątem wycięć na urządzeniach mobilnych. Zamiast tego użyj wartości LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER lub LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS, aby zawsze unikać lub zawsze wchodzić w wycięcie. W przypadku tej drugiej opcji więcej informacji o interfejsach API związanych z wycinkami wyświetlacza znajdziesz w artykule Obsługa wycięć wyświetlacza.

Jeśli Twoja aplikacja renderuje się w obszarze wycięcia na wyświetlaczu, a chcesz, aby działała inaczej na Androidzie Automotive niż na urządzeniach mobilnych, postępuj zgodnie z instrukcjami w sekcji Disable features (Wyłącz funkcje), jeśli aplikacja ustawia to zachowanie podczas działania, i Use alternate resources (Użyj alternatywnych zasobów), jeśli aplikacja ustawia to zachowanie za pomocą plików zasobów.

Wyłączanie funkcji

Jeśli udostępniasz już dostępną aplikację mobilną w systemie operacyjnym Android Automotive, niektóre funkcje mogą być nieodpowiednie lub niedostępne. Na przykład samochody zazwyczaj nie udostępniają dostępu do kamer. Dodatkowo w systemie operacyjnym Android Automotive dostępny jest tylko podzbiór usług Google Play. Więcej informacji znajdziesz w Usługach Google Play dla samochodów.

Aby wykryć, czy aplikacja działa w systemie operacyjnym Android Automotive, możesz użyć interfejsu PackageManager.hasSystemFeatureAPI, sprawdzając, czy zawiera ona funkcję FEATURE_AUTOMOTIVE, jak w tym przykładzie:

Kotlin

val packageManager: PackageManager = ... // Get a PackageManager from a Context
val isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
if (isCar) {
  // Enable or disable a given feature
}

Java

PackageManager packageManager = ... // Get a PackageManager from a Context
boolean isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
if (isCar) {
  // Enable or disable a given feature
}

Jeśli aplikacja ma też komponent Androida Auto, możesz użyć interfejsu CarConnectionbiblioteki aplikacji Android do samochodu, aby wykryć, czy aplikacja działa na systemie operacyjnym Android Automotive czy Android Auto, albo czy w ogóle nie jest połączona z samochodem.

W przypadku obrazu w okienku postępuj zgodnie ze sprawdzonymi metodami, aby sprawdzić, czy funkcja jest dostępna, i odpowiednio zareagować.

Obsługa scenariuszy offline

Samochody są coraz bardziej połączone z internetem, ale zalecamy, aby aplikacje mogły działać bez połączenia z internetem, na przykład w tych sytuacjach:

  • Użytkownicy mogą zrezygnować z danych mobilnych oferowanych w ramach abonamentu w pakiecie od producenta samochodów.
  • W niektórych obszarach dostęp do danych mobilnych może być ograniczony.
  • Samochody z modułami Wi-Fi mogą znajdować się poza zasięgiem sieci Wi-Fi lub producent OEM może wyłączyć Wi-Fi na rzecz sieci komórkowej.

Przygotuj się na takie scenariusze w swojej aplikacji, stosując łagodne ograniczenie funkcji, które zależą od dostępu do internetu, np. oferując treści offline. Więcej informacji znajdziesz w artykule o sprawdzonych metodach optymalizacji sieci.

Używanie innych zasobów

Aby dostosować aplikację do samochodów, możesz użyć kwalifikatora zasobu car, aby zapewnić alternatywne zasoby, gdy aplikacja działa na urządzeniu z systemem operacyjnym Android Automotive. Jeśli np. używasz zasobów wymiarów do przechowywania wartości wypełniania, możesz użyć większej wartości dla zbioru zasobów car, aby zwiększyć liczbę docelowych dotknięć.

Dystrybucja aplikacji

Po przetestowaniu aplikacji pod kątem zgodności ze wskazówkami dotyczącymi jakości aplikacji samochodowych w danej kategorii możesz rozpowszechniać ją w Google Play na urządzeniach z wbudowaną aplikacją Google. Więcej informacji o procesie publikowania znajdziesz w artykule Rozpowszechnianie aplikacji w Google Play.

Przesyłanie opinii o zaparkowanych aplikacjach

Jeśli podczas tworzenia zaparkowanej aplikacji na system Android Automotive napotkasz problem lub chcesz zgłosić prośbę o dodanie funkcji, możesz to zrobić za pomocą narzędzia Google do zgłaszania problemów. Pamiętaj, aby podać wszystkie wymagane informacje w szablonie zgłoszenia. Zanim zgłosisz nowy problem, sprawdź, czy nie został on już zgłoszony na liście problemów. Możesz subskrybować problemy i głosować na nie, klikając gwiazdkę obok problemu w lokalizatorze. Więcej informacji znajdziesz w artykule Subskrybowanie problemu.

Tworzenie nowego zgłoszenia