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:
- W przypadku aplikacji wideo przeczytaj artykuł Oznaczanie aplikacji jako aplikacji wideo.
- W przypadku gier przeczytaj artykuł Oznaczanie aplikacji jako gry.
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:
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.