Tworzenie zaparkowanych aplikacji na system operacyjny Android Automotive

Oprócz obsługi aplikacji przeznaczonych do użytku podczas jazdy Android Automotive obsługuje przeglądarki, gry i aplikacje wideo, których można używać po zaparkowaniu. Tę samą aplikację możesz wysyłać do samochodów, co do innych urządzeń z dużymi ekranami, wprowadzając tylko kilka drobnych zmian.

Testowanie istniejącej aplikacji za pomocą emulatora systemu operacyjnego Android Automotive

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

Uruchamiając aplikację, obserwuj, czy nie występują problemy ze zgodnością, takie jak:

  • Ekrany multimedialne mają stałą orientację. Aby aplikacja była zgodna ze wskazówkami dotyczącymi jakości aplikacji w samochodzie, aplikacje muszą obsługiwać orientację pionową i poziomą.
  • Interfejsy API dostępne na innych urządzeniach mogą być niedostę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. Informacje o sposobie rozwiązywania tych problemów znajdziesz w sekcji Wyłączanie funkcji.

Skonfiguruj pliki manifestu aplikacji

Aby można było kierować aplikację na system operacyjny Android Automotive, musi ona zawierać określone wpisy w pliku manifestu. W ich przypadku aplikacje kierowane na system operacyjny Android Automotive są przesyłane do Sklepu Play z wykorzystaniem oddzielnego typu wersji systemu operacyjnego Automotive. Sprawdzamy je ręcznie, by mieć pewność, że można je bezpiecznie używać w samochodzie. Więcej informacji znajdziesz w artykule Dystrybucja aplikacji na Androida do samochodów.

Wymagane funkcje systemu operacyjnego Android Automotive

Aby aplikacje na Androida Automotive mogły być widoczne w Sklepie Play w samochodzie, muszą w pliku AndroidManifest.xml zawierać ten element <uses-feature>:

<manifest ...>
    ...
    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />
    ...
</manifest>

Aplikacje przesyłane na tory inne niż samochodowe nie mogą zadeklarować elementu <uses-feature> pokazanego w poprzednim przykładowym kodzie, ponieważ nie zależą od sprzętu związanego z samochodem. Aby więc oferować tę samą aplikację zarówno na potrzeby urządzeń motoryzacyjnych, jak i innych, musisz wygenerować co najmniej 2 rodzaje aplikacji: jedną dla urządzeń motoryzacyjnych i drugą dla urządzeń mobilnych. Więcej informacji o tworzeniu tych osobnych smaków znajdziesz w tej dokumentacji:

Aplikacje w obu rodzajach aplikacji mogą mieć taką samą nazwę pakietu, ale muszą mieć różne kody wersji, ponieważ są przesyłane do ścieżek w Sklepie Play oddzielnie.

Zamiast osobnych smaków możesz też użyć osobnych nazw pakietów dla plików APK lub pakietów aplikacji na urządzenia mobilne i związane z samochodem. Wady każdego podejścia znajdziesz w sekcji Nazwy pakietów w przewodniku dla programistów aplikacji do multimediów.

Oprócz elementu pokazanego w poprzednim przykładowym kodzie aplikacje utworzone na potrzeby systemu operacyjnego Android Automotive muszą zawierać w głównym elemencie <manifest> te elementy <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"/>

Gdy ustawisz te funkcje jako niewymagane, zapobiegnie konfliktowi z funkcjami dostępnymi w systemie operacyjnym Android Automotive.

Upewnij się, że nie ma aktywności zoptymalizowanych pod kątem rozpraszania uwagi.

Aby mieć pewność, że aplikacji będzie można używać tylko po zaparkowaniu, nie dodawaj tego elementu <meta-data> do elementu <activity> w pliku manifestu:

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

Bez tych metadanych aktywność w aplikacji jest automatycznie blokowana przez system operacyjny w momencie przejścia w tryb samochodowy, aby nie rozpraszać kierowcy. Odbywa się to jako wywołanie zwrotne cyklu życia onPause. W tym czasie musisz wstrzymać odtwarzanie zarówno obrazu, jak i dźwięku z aplikacji.

Optymalizacja aplikacji pod kątem systemu operacyjnego Android Automotive

Aby zapewnić użytkownikom maksymalną wygodę, podczas tworzenia aplikacji na Androida Automotive weź pod uwagę te kwestie.

Optymalizacja pod kątem dużych ekranów

Ekrany w pojazdach z systemem operacyjnym Android Automotive są bardziej podobne pod względem rozmiaru, rozdzielczości i formatu obrazu do tabletów i urządzeń składanych niż do telefonów. Dzięki temu optymalizacja aplikacji pod kątem dużych ekranów jest korzystna również dla użytkowników samochodów.

W szczególności przeczytaj przewodniki na temat obsługi różnych rozmiarów ekranu i przechodzenia interfejsu użytkownika na układy elastyczne, aby dowiedzieć się, jak w pełni wykorzystać potencjał dużych rozmiarów ekranu. Znajdziesz w nim także inspiracje i wskazówki dotyczące projektowania w galerii reklam oraz gier.

Inne optymalizacje dużych ekranów, np. zgodność danych wejściowych, nie przynoszą korzyści w systemie operacyjnym Android Automotive, ale i tak mogą zwiększyć wygodę użytkowników. Na przykład nawigacja za pomocą klawiatury wykorzystuje te same interfejsy API co nawigacja obrotowa, więc wprowadzone w niej optymalizacje mogą przynieść korzyści obu formatom.

Praca z elementami w oknie i z wycięciem w ekranie

Tak 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 inne niż prostokątne.

Domyślnie aplikacje wyświetlają się na obszarze, który nie pokrywa się z paskami systemu ani wycinankami. Możesz jednak chcieć, aby aplikacja ukrywała paski systemowe, rysowała za nimi treści lub wyświetlała zawartość w wycięciu w ekranie zgodnie z opisem w sekcji Umieszczanie aplikacji w oknach. Jeśli Twoja aplikacja ma którąś z tych funkcji, w kolejnych sekcjach znajdziesz szczegółowe informacje o tym, jak zapewnić jej prawidłowe działanie w ekosystemie urządzeń z systemem Android Automotive.

Słupki systemowe, tryb pojemny i renderowanie od krawędzi do krawędzi

Słupki systemowe w samochodach mogą mieć inne wymiary i umiejscowienie niż na innych urządzeniach. Na przykład paski nawigacyjne mogą znajdować się po lewej, prawej lub dolnej części ekranu. Nawet jeśli na górze znajduje się pasek stanu, a pasek nawigacyjny u dołu (jak ma to miejsce na większości telefonów i tabletów), rozmiar tych elementów będzie prawdopodobnie znacznie większy w samochodach.

Dodatkowo system operacyjny Android Automotive pozwala producentom OEM określić, czy aplikacje mogą wyświetlać lub ukrywać paski systemu podczas przechodzenia do trybu pełnoekranowego i wyłączania go. Na przykład, zapobiegając ukrywaniu pasków systemu przez aplikacje, OEM może zapewnić, że elementy sterujące pojazdem, takie jak klimatyzacja, są zawsze dostępne na ekranie. Jeśli producent OEM uniemożliwił aplikacjom kontrolowanie pasków systemu, nic się nie stanie, gdy aplikacja wywoła interfejsy API WindowInsetsController (lub WindowInsetsControllerCompat) w celu wyświetlenia lub ukrycia pasków systemu. Więcej informacji o tym, jak sprawdzić, czy aplikacja potrafiła modyfikować elementy, znajdziesz w dokumentacji show i hide.

Producenci OEM mogą również określić, czy aplikacje mogą ustawiać kolor i przezroczystość pasków systemu, aby zawsze były one wyraźnie widoczne. Jeśli aplikacja zajmuje całą szerokość ekranu, sprawdź, czy za paskami systemowe widać tylko niekrytyczne treści. Te treści mogą nie być widoczne, jeśli producent urządzenia OEM nie zezwala na 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 Twoja aplikacja rozwija się od początku do końca, nie zakładaj rozmiaru, liczby, typu czy umiejscowienia pasków systemowych. Zamiast tego użyj interfejsów API wstawionych okien, aby rozmieścić zawartość aplikacji względem pasków systemowych. Więcej informacji o korzystaniu z tych interfejsów API znajdziesz w artykule Wyświetlanie treści od krawędzi do krawędzi w aplikacji. Zakodowane na stałe wartości dopełnienia, które choć nigdy nie są zalecane, mogą umieszczać treści w bezpiecznym obszarze na innych urządzeniach, których prawdopodobnie nie będzie w samochodach.

Dostosuj się do wyświetlacza o nieregularnym kształcie

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

Schemat urządzenia z systemem operacyjnym 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 ramkę ograniczającą wycięcie wyświetlacza krzywej.

Jeśli aplikacja nie renderuje się od krawędzi do krawędzi, nie musisz niczego robić, aby została wyrenderowana w bezpiecznym obszarze.

Jeśli aplikacja renderuje od krawędzi do krawędzi, możesz określić, jak będzie działać z wycięciem w ekranie. Możesz to zrobić za pomocą zasobów, ustawiając atrybut android:windowLayoutInDisplayCutoutMode dla motywu aplikacji lub w czasie działania, modyfikując atrybut okna layoutInDisplayCutoutMode.

Na urządzeniach z systemem operacyjnym Android Automotive rodzaje wycięć w ekranie różnią się od tych na urządzeniach mobilnych, dlatego nie używaj elementów LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT ani LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES, które działają zoptymalizowane pod kątem wycinków na urządzeniach mobilnych. Zamiast tego użyj symbolu LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER lub LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS, żeby zawsze go unikać, albo zawsze wstawić wycięcie. Jeśli wybierzesz tę drugą opcję, przeczytaj sekcję Obsługa wycinków w ekranie, aby dowiedzieć się więcej o interfejsach API związanych z wycięciem w ekranie.

Jeśli Twoja aplikacja renderuje się w obszarze z wycięciem w ekranie i chcesz, aby system operacyjny Android Automotive różnił się od działania na urządzeniach mobilnych, przeczytaj sekcję Wyłączanie funkcji, by dowiedzieć się, czy aplikacja działa w taki sposób w czasie działania, lub Korzystanie z zasobów alternatywnych, jeśli aplikacja ustawia ten sposób działania przy użyciu plików zasobów.

Wyłączanie funkcji

Jeśli udostępniasz istniejącą aplikację mobilną na system operacyjny Android Automotive, niektóre funkcje mogą być nieodpowiednie lub niedostępne. Na przykład samochody zwykle nie zapewniają dostępu do kamer. Poza tym w systemie operacyjnym Android Automotive dostępna jest tylko część Usług Google Play. Więcej informacji znajdziesz na stronie Usługi Google Play dla samochodów.

Za pomocą interfejsu API PackageManager.hasSystemFeature możesz wykryć, czy aplikacja działa na systemie operacyjnym Android Automotive, sprawdzając 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 Android Auto, możesz też użyć interfejsu API CarConnection w bibliotece aplikacji Android for Cars, aby sprawdzić, czy aplikacja ma system operacyjny Android Automotive lub Android Auto albo czy w ogóle nie jest połączona z samochodem.

W przypadku funkcji obraz w obrazie postępuj zgodnie ze sprawdzonymi metodami, aby sprawdzić, czy ta funkcja jest dostępna, i odpowiednio zareagować.

Rozwiązywanie problemów w trybie offline

Choć samochody coraz częściej łączą się z internetem, zalecamy działanie aplikacji bez połączenia z internetem – jak np. w tych przypadkach:

  • Użytkownicy mogą zrezygnować z mobilnej transmisji danych oferowanej w ramach pakietu subskrypcji producenta samochodu.
  • Dostęp do mobilnej transmisji danych może być ograniczony na niektórych obszarach.
  • Samochody z nadajnikami Wi-Fi mogą znajdować się poza zasięgiem Wi-Fi lub producent OEM może wyłączyć Wi-Fi na rzecz sieci komórkowej.

Przygotuj się na takie sytuacje w aplikacji, płynnie pogarszając funkcje, które zależą od dostępu do internetu, np. udostępniając treści offline. Więcej informacji znajdziesz w sprawdzonych metodach optymalizacji sieci.

Korzystanie z zasobów alternatywnych

Aby dostosować aplikację do wymagań samochodów, możesz użyć kwalifikatora zasobów car, aby udostępnić zasoby alternatywne podczas jazdy w pojeździe z systemem operacyjnym Android Automotive. Jeśli np. do przechowywania wartości dopełnienia używasz zasobów wymiarów, możesz użyć większej wartości dla zbioru zasobów car, aby zwiększyć docelowe elementy dotykowe.

Dystrybucja aplikacji

Po przetestowaniu aplikacji pod kątem zgodności ze wskazówkami dotyczącymi jakości aplikacji samochodowych w danej kategorii i wprowadzeniem kompilacji systemu operacyjnego Android Automotive ze wszystkimi niezbędnymi zmianami dla danej kategorii możesz ją opublikować na ścieżkach w formacie Automotive OS w Sklepie Play. Więcej informacji o procesie publikowania znajdziesz w artykule Dystrybucja aplikacji na Androida w samochodach.

Prześlij opinię na temat zaparkowanych aplikacji

Jeśli podczas tworzenia zaparkowanej aplikacji na system operacyjny Android Automotive napotkasz problem lub otrzymasz prośbę o dodanie funkcji, możesz to zgłosić, korzystając z narzędzia Google Issue Tracker. Pamiętaj, aby w szablonie problemu podać wszystkie wymagane informacje. Zanim zgłosisz nowy problem, sprawdź, czy nie ma go już na liście problemów. Możesz zasubskrybować problem i głosować na nie, klikając gwiazdkę w narzędziu do śledzenia problemów. Więcej informacji znajdziesz w artykule Subskrybowanie problemu.

Utwórz nowy numer