Tworzenie zaparkowanych aplikacji na system operacyjny Android Automotive

Oprócz obsługi aplikacji przeznaczonych do używania podczas jazdy Android Automotive obsługuje przeglądarki, gry i aplikacje wideo, których można używać po zaparkowaniu. Do samochodów możesz wysyłać tę samą aplikację co inne urządzenia z dużym ekranem, wprowadzając tylko kilka drobnych zmian.

Testowanie istniejącej aplikacji przy użyciu emulatora systemu operacyjnego Android Automotive

Aby zacząć tworzyć aplikację na system operacyjny Android Automotive, najpierw przetestuj ją w emulatorze 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 opisanymi w artykule Uruchamianie aplikacji w emulatorze.

Podczas uruchamiania aplikacji zwróć uwagę na problemy ze zgodnością, takie jak:

  • Ekrany informacyjno-rozrywkowe mają stałą orientację. Aby zachować zgodność ze wskazówkami dotyczącymi jakości aplikacji samochodowych, 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. Szczegółowe informacje o tym, jak rozwiązać te problemy, znajdziesz w sekcji Wyłączanie funkcji.

Skonfiguruj pliki manifestu aplikacji

Aby kierować reklamy na system operacyjny Android Automotive, aplikacja musi mieć określone wpisy w pliku manifestu. Dzięki nim aplikacje kierowane na system operacyjny Android Automotive są przesyłane do Sklepu Play z użyciem oddzielnego typu wersji. Sprawdzamy je ręcznie, dzięki czemu mamy pewność, że nadają się do użytku w samochodzie. Więcej informacji znajdziesz w artykule Dystrybucja aplikacji na Androida w samochodach.

Wymagane funkcje systemu operacyjnego Android Automotive

Aby aplikacje na system operacyjny Android Automotive mogły znaleźć się w Sklepie Play w samochodzie, plik AndroidManifest.xml musi zawierać ten element <uses-feature>:

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

Aplikacje przesłane na ścieżki inne niż samochodowe nie mogą zadeklarować elementu <uses-feature> pokazanego w poprzednim przykładowym kodzie, ponieważ nie mogą one polegać na sprzęcie używanym w konkretnym samochodzie. Aby udostępnić tę samą aplikację zarówno do urządzeń motoryzacyjnych, jak i innych, musisz wygenerować co najmniej 2 rodzaje aplikacji: jeden dla samochodów i drugi dla urządzeń mobilnych. Więcej informacji o tworzeniu tych osobnych smaków znajdziesz w tej dokumentacji:

Te 2 rodzaje 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 używać osobnych smaków, możesz też użyć osobnych nazw pakietów dla mobilnych i motorowych pakietów APK lub pakietów aplikacji. Aby poznać zalety każdego z tych rozwiązań, zapoznaj się z sekcją Nazwy pakietów w przewodniku dla programistów aplikacji do multimediów.

Oprócz elementu pokazanego w poprzednim przykładowym kodzie aplikacje na system operacyjny Android Automotive muszą zawierać w elemencie głównym <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"/>

Jeśli ustawisz te funkcje jako niewymagane, zapobiegnie to konfliktowi między aplikacją a funkcjami sprzętowymi dostępnymi na urządzeniach z systemem operacyjnym Android Automotive.

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

Aby mieć pewność, że aplikacja jest dostępna tylko po zaparkowaniu, nie umieszczaj w pliku manifestu tego elementu <meta-data> tego elementu <activity>:

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

Bez tych metadanych działania w aplikacji są automatycznie blokowane przez system operacyjny, gdy samochód przechodzi w tryb samochodowy, aby ograniczyć rozpraszanie uwagi kierowcy. Dzieje się to w ramach wywołania zwrotnego onPause w cyklu życia, w którym musisz wstrzymać odtwarzanie filmu i dźwięku z aplikacji.

Wpisy manifestu dotyczące określonej kategorii

Oprócz poprzednich wymagań, które obowiązują w przypadku wszystkich zaparkowanych aplikacji, w przypadku kategorii filmów i gier obowiązują dodatkowe wymagania:

Optymalizacja aplikacji pod kątem systemu operacyjnego Android Automotive

Aby zadbać o jak najlepsze wrażenia użytkowników, podczas tworzenia aplikacji na system operacyjny Android Automotive pamiętaj o tych kwestiach.

Optymalizacja pod kątem dużych ekranów

Ekrany obecne w pojazdach z systemem operacyjnym Android Automotive mają bardziej zbliżony rozmiar, rozdzielczość i format obrazu do tabletów oraz urządzeń składanych niż telefonów. Dlatego zoptymalizowanie aplikacji pod kątem dużych ekranów przyniesie korzyści także użytkownikom w samochodach.

W szczególności zapoznaj się z przewodnikami dotyczącymi obsługi różnych rozmiarów ekranów i Migracja UI do układów elastycznych, w których znajdziesz szczegółowe informacje o tym, jak optymalnie wykorzystać duży wyświetlacz, oraz artykuły z multimediami i grami, które mogą być źródłem inspiracji i wskazówek dotyczących projektowania.

Inne optymalizacje dużego ekranu, takie jak zgodność urządzeń wejściowych, nie są tak samo przydatne w systemie operacyjnym Android Automotive, ale mogą poprawić wygodę użytkowników. Na przykład do nawigacji za pomocą klawiatury wykorzystywane są te same interfejsy API co pokrętła nawigacja, więc wprowadzone w niej optymalizacje mogą być korzystne dla obu formatów.

Praca z wkładkami okiennymi i wycięciami w ekranie

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

Domyślnie aplikacje rysują się w obszarze, który nie pokrywa się z paskami systemowymi ani wycięciami w ekranie. Możesz jednak chcieć, aby aplikacja ukrywała paski systemowe, rysuje za nimi treść lub wyświetla treści w wycięciu w ekranie, jak opisano w artykule Umieszczanie aplikacji w wkładkach okien. Jeśli Twoja aplikacja ma któryś z tych zastosowań, zapoznaj się z sekcjami poniżej, aby dowiedzieć się, jak zapewnić prawidłowe działanie aplikacji w całym ekosystemie urządzeń z systemem operacyjnym Android Automotive.

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

Słupki systemowe w samochodach mogą mieć inny rozmiar i pozycję niż na innych urządzeniach. Paski nawigacyjne mogą np. znajdować się po lewej, prawej lub dolnej części 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 rozmiar tych elementów będzie prawdopodobnie znacznie większy.

Dodatkowo system operacyjny Android Automotive umożliwia producentom OEM określenie, czy aplikacje mogą wyświetlać lub ukrywać paski systemowe, aby włączyć i zamknąć tryb pojemny. Na przykład dzięki zapobieganiu ukrywaniu pasków systemu przez aplikacje producenci OEM mogą mieć pewność, że elementy sterujące pojazdu, takie jak klimatyzacja, są zawsze dostępne na ekranie. Jeśli producent OEM uniemożliwi aplikacjom kontrolowanie pasków systemowych, nic się nie dzieje, gdy aplikacja wywołuje interfejsy API WindowInsetsController (lub WindowInsetsControllerCompat), aby wyświetlić lub ukryć paski systemowe. Więcej informacji o tym, jak sprawdzić, czy aplikacja mogła modyfikować pakiety, znajdziesz w dokumentacji show i hide.

Podobnie OEM może też kontrolować, czy aplikacje mogą ustawiać kolor i przezroczystość pasków systemowych, aby paski i znajdujące się na nich elementy były przez cały czas wyraźnie widoczne. Jeśli aplikacja działa od początku do końca, sprawdź, czy za pasami systemu widać tylko mniej istotne treści. Ta treść może być niewidoczna, 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 jest jak najbardziej rozbudowana, nie traktuj jej rozmiaru, liczby, typu ani lokalizacji słupków systemowych. Zamiast tego rozmieść zawartość aplikacji względem pasków systemowych, korzystając z interfejsów API do wstawiania okien. 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ą jednak zawierać treści w bezpiecznym obszarze na innych urządzeniach i prawdopodobnie nie znajdą się w samochodach.

Dostosuj do wyświetlaczy o nieregularnym kształcie

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

Schemat urządzenia z systemem operacyjnym Android Automotive z zakrzywionym ekranem po prawej stronie.
Rys. 1. Urządzenie z systemem operacyjnym Android Automotive z wygiętym po prawej stronie wyświetlaczem. Obszar zielony to bezpieczny prostokąt, który nie pokrywa się z ramką ograniczającą wycięcie w wyświetlaczu krzywej.

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

Jeśli aplikacja renderuje się od krawędzi do krawędzi, możesz wybrać sposób jej działania w odniesieniu do wycięć 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 layoutInDisplayCutoutMode okna.

Ponieważ na urządzeniach z systemem operacyjnym Android Automotive występują różne rodzaje wycięć w ekranie niż na urządzeniach mobilnych, nie używaj LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT ani LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES, które mają działać zoptymalizowane pod kątem wycięć w urządzeniach mobilnych. Zamiast tego używaj LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER lub LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS, aby zawsze unikać wycięcia lub go zawsze wprowadzać. Jeśli wybierasz tę drugą opcję, zapoznaj się z sekcją Obsługa wycięć w ekranie, aby dowiedzieć się więcej o interfejsach API związanych z wycięciami w ekranie.

Jeśli aplikacja renderuje się w obszarze wycięcia w ekranie i chcesz, aby system operacyjny Android Automotive działał w sposób różny od tego na urządzeniach mobilnych, zapoznaj się z sekcją poświęconą wyłączaniu funkcji w przypadku ustawienia tego zachowania w czasie działania oraz używaniu zasobów alternatywnych, jeśli aplikacja ustawia to zachowanie przy użyciu plików zasobów.

Wyłącz funkcje

Jeśli udostępniasz istniejącą aplikację mobilną na system operacyjny Android Automotive, niektóre funkcje mogą być nieistotne lub niedostępne. Na przykład samochody zwykle nie mają dostępu do kamer. Dodatkowo 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 określić, czy aplikacja działa w 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 Androida Auto, możesz też użyć interfejsu API CarConnection w bibliotece aplikacji Android do samochodu, aby sprawdzić, czy aplikacja działa w systemie operacyjnym Android Automotive lub na Androidzie Auto – albo czy w ogóle nie jest połączona z samochodem.

W przypadku obrazu w obrazie (PIP) postępuj zgodnie z ustalonymi sprawdzonymi metodami, aby sprawdzić, czy dana funkcja jest dostępna, i odpowiednio zareagować.

Obsługa scenariuszy offline

Chociaż samochody są coraz częściej połączone z internetem, zalecamy korzystanie z aplikacji działających bez połączenia z internetem, np. w tych przypadkach:

  • Użytkownicy mogą zrezygnować z mobilnej transmisji danych oferowanej w ramach pakietu subskrypcji od producenta samochodów.
  • Dostęp do mobilnej transmisji danych może być ograniczony na niektórych obszarach.
  • Samochody wyposażone w radio 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 sytuacje w aplikacji, stopniowo pogarszając funkcje zależne od dostępu do internetu, np. udostępniając treści offline. Aby dowiedzieć się więcej, zapoznaj się ze sprawdzonymi metodami optymalizacji sieci.

Korzystanie z zasobów alternatywnych

Aby ułatwić dostosowanie aplikacji do potrzeb samochodów, możesz użyć kwalifikatora zasobów car, aby podać alternatywne zasoby w pojeździe z systemu operacyjnego Android Automotive. Jeśli np. używasz zasobów wymiarów do przechowywania wartości dopełnienia, możesz użyć większej wartości 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 samochodowej w danej kategorii i utworzeniu kompilacji na system operacyjny Android Automotive z wprowadzeniem niezbędnych zmian w kategorii możesz opublikować ją na ścieżkach tego typu w Sklepie Play. Więcej informacji o procesie publikowania znajdziesz w artykule Dystrybucja aplikacji na Androida w samochodach.

Prześlij opinię o zaparkowanych aplikacjach

Jeśli podczas tworzenia zaparkowanej aplikacji na system operacyjny Android Automotive napotkasz problem lub będziesz mieć prośbę o dodanie funkcji, możesz to zgłosić za pomocą narzędzia Google Issue Tracker. Pamiętaj, aby w szablonie problemu podać wszystkie wymagane informacje. Zanim zgłosisz nowy problem, sprawdź, czy nie znajduje się już na liście problemów. Możesz subskrybować dany problem i głosować na nie, klikając gwiazdkę przy problemie w trackerze. Więcej informacji znajdziesz w artykule Subskrybowanie problemu.

Tworzenie nowego numeru