Oprócz obsługi aplikacji przeznaczonych do korzystania podczas jazdy Android Automotive OS obsługuje przeglądarki, gry i filmy do korzystania podczas postoju. Możesz wysłać tę samą aplikację do samochodów co inne dużych ekranów z kilkoma drobnymi zmianami.
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 systemu operacyjnego Android Automotive. Aby skonfigurować emulator, postępuj zgodnie z instrukcjami 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 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łnić samochód wytycznych dotyczących jakości aplikacji, aplikacje muszą obsługiwać orientację pionową i poziomą. lub orientacji strony.
- Interfejsy API dostępne na innych urządzeniach mogą nie być dostępne na systemie Android Automotive. Na przykład niektóre interfejsy API Usług Google Play są niedostępne na Androidzie. Automotive OS. Zobacz sekcję Wyłączanie funkcji. .
Konfigurowanie plików manifestu aplikacji
Aby kierować aplikację na system operacyjny Android Automotive, musisz uwzględnić w niej określone wpisy w pliku manifestu. Dzięki nim aplikacje kierowane na system operacyjny Android Automotive są przesyłane do Sklepu Play w osobnym typie wersji systemu operacyjnego Automotive. Są one poddawane ręcznej weryfikacji, aby zapewnić ich bezpieczeństwo podczas korzystania w samochodzie. Więcej informacji znajdziesz w artykule Dystrybucja aplikacji na Androida w samochodach. .
Wymagane funkcje systemu operacyjnego Android Automotive
Aplikacje na system operacyjny Android Automotive, które mają być widoczne w Sklepie Play w samochodzie
musi zawierać te właściwości: <uses-feature>
element w AndroidManifest.xml
plik:
<manifest ...>
...
<uses-feature
android:name="android.hardware.type.automotive"
android:required="true" />
...
</manifest>
Aplikacje przesłane do ścieżek niebędących samochodami nie mogą zadeklarować tego uprawnienia: <uses-feature>
pokazane w poprzednim przykładzie kodu, ponieważ nie mogą one polegać
sprzęt do samochodu. Aby udostępnić tę samą aplikację na urządzeniach samochodowych i niesamochodowych, musisz wygenerować co najmniej 2 wersje aplikacji: jedną na potrzeby urządzeń samochodowych, a drugą na potrzeby urządzeń mobilnych. Więcej informacji
aby dowiedzieć się, jak utworzyć te oddzielne smaki, zapoznaj się z dokumentacją:
Oba warianty aplikacji mogą mieć tę samą nazwę pakietu, ale muszą mieć różne kody wersji, ponieważ są przesyłane do ścieżek w Sklepie Play osobno.
Zamiast używać osobnych smaków, możesz użyć osobnego pakietu nazwy mobilnych i motorowych plików APK lub pakietów aplikacji. Aby poznać zalety i wady obu tych metod, zapoznaj się z nazwami pakietów w przewodniku dla deweloperów aplikacji multimedialnych.
Oprócz elementu pokazanego w poprzednim przykładowym kodzie aplikacje stworzone na potrzeby
System operacyjny Android Automotive musi zawierać te elementy <uses-feature>
w
element główny <manifest>
:
<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 tam żadnych aktywności zoptymalizowanych 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 aktywność w aplikacji jest automatycznie blokowana
przez system operacyjny, gdy samochód przejdzie w tryb samochodowy, aby ograniczyć rozpraszanie uwagi
sterownika. Dzieje się tak, gdy
onPause
wywołanie zwrotne w cyklu życia usługi, w trakcie którego należy wstrzymać odtwarzanie filmu i dźwięku
z aplikacji.
Wpisy manifestu dotyczące określonej kategorii
Oprócz powyższych wymagań, które dotyczą wszystkich zaparkowanych aplikacji, kategorie filmów i gier mają 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 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 obecne w pojazdach z systemu operacyjnego Android Automotive są bardziej podobne pod względem rozmiaru. i rozdzielczość obrazu, czyli format obrazu na tablety i urządzenia składane, a nie na telefony. W związku z tym optymalizacja aplikacji pod kątem dużych ekranów przynosi korzyści także użytkownikom w samochodach.
Szczegółowe informacje o optymalizowaniu wyświetlania na dużych ekranach znajdziesz w poradnikach Obsługa różnych rozmiarów ekranów i Przekształcanie interfejsu na układy elastyczne. Możesz też zaczerpnąć inspiracji i poradniki dotyczące projektowania w galeriach multimediów i gier.
Inne optymalizacje dla dużego ekranu, takie jak metody wprowadzania zgodność nie są bezpośrednio korzystne dla systemu operacyjnego Android Automotive, ale nadal mogą i zwiększać wygodę użytkowników. 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 wkładkami okiennymi i wycięciami w ekranie
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 rysują się na obszarze, który nie pokrywa się z paskami systemowymi lub wycięcia w ekranie. Aplikacja może jednak ukrywać paski systemowe, rysować za nimi treści lub pokazywać je w wycięciu w ekranie zgodnie z opisem. w artykule Umieszczanie aplikacji w wkładkach okien. Jeśli Twoja aplikacja wykonuje któreś z tych działań, zapoznaj się z podrozdziałami poniżej, aby dowiedzieć się, jak sprawić, aby działała prawidłowo 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. Paski nawigacyjne mogą np. znajdować się po lewej stronie, w prawej części ekranu lub w dolnej części ekranu. Nawet jeśli pasek stanu jest włączony oraz pasek nawigacyjny u dołu (jak w większości telefonów i tabletów), rozmiar tych elementów będzie prawdopodobnie znacznie większy w przypadku samochodów.
Ponadto system operacyjny Android Automotive umożliwia producentom OEM określenie, czy
Aplikacje mogą wyświetlić lub ukryć paski systemowe, aby włączyć i zamknąć tryb kompleksowy
. 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
kontroli pasków systemowych, nic się nie dzieje, gdy aplikacja wywołuje
WindowInsetsController
(lub WindowInsetsControllerCompat
)
Interfejsy API do wyświetlania lub ukrywania pasków systemowych. Zapoznaj się z dokumentacją: show
i
hide
, aby dowiedzieć się więcej o tym, jak sprawdzić, czy aplikacja mogła zmodyfikować
.
Producenci OEM mogą też określić, czy aplikacje mogą ustawiać kolor i przezroczystość pasków systemu, aby zawsze były wyraźnie widoczne. Jeśli aplikacja wyświetla się od krawędzi do krawędzi, sprawdź, czy za paskami systemowymi wyświetlane są tylko treści niekrytyczne. Ta treść może nie być widoczna, jeśli producent oryginalnego urządzenia uniemożliwi ustawienie koloru czy przezroczystość 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 systemu. Zamiast tego do układania użyj interfejsów API wstawienia okien jej zawartości względem pasków systemowych. 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. Zakodowane na stałe wartości dopełnienia, które podczas nigdy nie jest zalecany, może powodować, że treści będą znajdować się w bezpiecznym obszarze na innych urządzeniach w samochodach.
Dostosuj do wyświetlaczy o nieregularnym kształcie
Oprócz wyświetlaczy prostokątnych niektóre pojazdy mogą mieć ekrany o nieregularnym kształcie, jak na rysunku 1:
Jeśli aplikacja nie renderuje się od brzegu do brzegu, nie musisz nic robić do renderowania w bezpiecznym obszarze.
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ć za pomocą zasobów,
Ustaw wartość
android:windowLayoutInDisplayCutoutMode
atrybutu dla motywu aplikacji lub w czasie działania.
przez zmianę
layoutInDisplayCutoutMode
.
.
Ponieważ rodzaje wycięć w ekranie w urządzeniach z systemem operacyjnym Android Automotive
różnią się od tych na urządzeniach mobilnych,
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
lub LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
,
które są zoptymalizowane pod kątem wycięcia w 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. Wybierając tę drugą opcję,
Więcej informacji znajdziesz w sekcji o obsłudze wycięć w ekranie.
na temat interfejsów API związanych z wycięciami w ekranie.
Jeśli aplikacja renderuje się w obszarze wycięcia w wyświetlaczu i chcesz, różnice w zachowaniu między systemem operacyjnym Android Automotive a systemem operacyjnym Android, patrz sekcja Wyłącz funkcje, aby uzyskać wskazówki, jeśli Twoja aplikacja je ustawia. działania w czasie działania, a w razie potrzeby korzystaj z zasobów alternatywnych aplikacja ustawia to zachowanie za pomocą 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. Dla: Na przykład samochody zwykle nie mają 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.hasSystemFeature
API, 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 CarConnection z biblioteki aplikacji Android do samochodu, aby wykryć, czy aplikacja działa na systemie Android Automotive czy Android Auto, albo czy w ogóle nie jest połączona z samochodem.
W przypadku trybu obraz w obrazie (PIP) postępuj zgodnie z sprawdzonych metod, by sprawdzić, czy i odpowiednio na nie 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 mobilnej transmisji danych oferowanej w ramach subskrypcji od producenta samochodu.
- Dostęp do mobilnej transmisji danych może być ograniczony na niektórych obszarach.
- 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 sytuacje w aplikacji, płynnie pogarszając funkcje, które zależą od dostępu do internetu, np. oferując treści offline. Więcej informacji znajdziesz w sprawdzonych metodach optymalizacji .
Korzystanie z zasobów alternatywnych
Aby pomóc w dostosowaniu aplikacji do potrzeb samochodów, możesz użyć kwalifikatora zasobów car
, aby podać
zasoby alternatywne
w samochodzie z systemem operacyjnym Android Automotive. Na przykład, jeśli używasz
Zasoby wymiarów, które mają być przechowywane
dopełnienia, można użyć większej wartości dla zbioru zasobów car
,
większe docelowe elementy dotykowe.
Dystrybucja aplikacji
Po przetestowaniu aplikacji pod kątem zgodności ze wskazówkami dotyczącymi jakości aplikacji na potrzeby samochodów w danej kategorii i utworzeniu wersji na system operacyjny Android Automotive z koniecznymi zmianami dla danej kategorii możesz opublikować ją w Sklepie Play na ścieżce dla systemu operacyjnego Automotive. Więcej informacji o procesie publikowania znajdziesz w artykule Udostępnianie aplikacji na Androida w samochodach.
Przesyłanie opinii o zaparkowanych aplikacjach
Jeśli napotkasz problem lub będziesz mieć prośbę o dodanie funkcji podczas tworzenia na system operacyjny Android Automotive, możesz zgłosić ją za pomocą Google Issue Tracker. Pamiętaj, aby podać wszystkie wymagane informacje w szablonie problemu. 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: Subskrybowanie problemu.