System operacyjny Android Automotive umożliwia użytkownikom instalowanie aplikacji w samochodzie. Do użytkownikom tej platformy, należy dystrybuować aplikację zoptymalizowaną pod kątem kierowcy, zgodne z systemem operacyjnym Android Automotive. Możesz wykorzystać prawie cały kod i w aplikacji Android Auto, ale musisz utworzyć osobną kompilację, spełnia wymagania podane na tej stronie.
Omówienie programowania
Aby dodać obsługę systemu operacyjnego Android Automotive, wystarczy wykonać kilka czynności. w następujących sekcjach:
- Włącz funkcje motoryzacyjne w Android Studio.
- Utwórz moduł motoryzacyjny.
- Zaktualizuj zależności Gradle.
- Opcjonalnie Zaimplementuj ustawienia i aktywności związane z logowaniem.
- Opcjonalnie wybierz Odczytaj wskazówki dotyczące hosta multimediów.
Uwagi dotyczące projektu
System operacyjny Android Automotive dba o układ treści multimedialnych, z usługi przeglądarki multimediów w aplikacji. Oznacza to, że aplikacja nie wyświetla interfejsu i nie uruchamia żadnego Twojej aktywności, gdy użytkownik aktywuje odtwarzanie multimediów.
Jeśli korzystasz z ustawień lub działań związanych z logowaniem, te działania muszą być zoptymalizowane pod kątem pojazdów. Więcej informacji znajdziesz w wytycznych dotyczących projektowania. na system operacyjny Android Automotive.
Konfigurowanie projektu
Aby włączyć tę funkcję, musisz skonfigurować kilka części projektu aplikacji obsługa systemu operacyjnego Android Automotive.
Włącz funkcje motoryzacyjne w Android Studio
Użyj Androida Studio 4.0 lub nowszego, aby mieć pewność, że wszystkie funkcje systemu operacyjnego Automotive .
Tworzenie modułu motoryzacyjnego
Niektóre komponenty systemu operacyjnego Android Automotive, takie jak plik manifestu, mają wymaganiom określonym na tej platformie. Utwórz moduł, który będzie przechowywać dla tych komponentów oddzielnie od innego kodu w projekcie, takiego jak kodu używanego w aplikacji Telefon.
Aby dodać moduł motoryzacyjny do projektu, wykonaj te czynności:
- W Android Studio kliknij Plik > Nowe > Nowy moduł.
- Wybierz Moduł motoryzacyjny i kliknij Dalej.
- Wpisz nazwę aplikacji/biblioteki. Tę nazwę widzą użytkownicy i aplikacja na system operacyjny Android Automotive.
- Wpisz nazwę modułu.
- Dostosuj Nazwę pakietu, aby pasowała do aplikacji.
Wybierz API 28: Android 9.0 (Pie) w sekcji Minimum SDK, a następnie kliknij Dalej.
Wszystkie samochody z obsługą systemu operacyjnego Android Automotive muszą mieć system Android 9 (poziom interfejsu API 28) lub wyższą, więc wybór tej wartości powoduje kierowanie reklam na wszystkie dla zgodnych samochodów.
Wybierz Brak aktywności, a następnie kliknij Zakończ.
Po utworzeniu modułu w Android Studio otwórz AndroidManifest.xml
w
Twój nowy moduł motoryzacyjny:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.media">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme" />
<uses-feature
android:name="android.hardware.type.automotive"
android:required="true" />
</manifest>
application
zawiera standardowe informacje o aplikacji oraz
uses-feature
deklarujący obsługę systemu operacyjnego Android Automotive. Pamiętaj, że
nie są zadeklarowane w manifeście żadne działania.
Jeśli korzystasz z ustawień lub działań związanych z logowaniem, dodaj ich tutaj. Te działania są wywoływane przez system za pomocą wyraźnych intencji i są jedynymi działaniami zadeklarowanymi w pliku manifestu dla Aplikacja na system operacyjny Android Automotive.
Po dodaniu ustawień lub aktywności związanej z logowaniem dokończ tworzenie pliku manifestu przez
ustawianie atrybutu android:appCategory="audio"
w elemencie application
i dodanie tych elementów uses-feature
:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.media"> <application android:allowBackup="true" android:appCategory="audio" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" /> <uses-feature android:name="android.hardware.type.automotive" android:required="true" /> <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" /> </manifest>
Bezpośrednie ustawienie tych funkcji na required="false"
spowoduje, że:
Twoja aplikacja nie koliduje z funkcjami sprzętowymi dostępnymi w systemie operacyjnym Automotive
urządzenia.
Zadeklaruj obsługę multimediów w systemie operacyjnym Android Automotive
Użyj tego wpisu w pliku manifestu, aby zadeklarować, że aplikacja obsługuje System operacyjny Android Automotive:
<application>
...
<meta-data android:name="com.android.automotive"
android:resource="@xml/automotive_app_desc"/>
...
</application>
Ten wpis w pliku manifestu odnosi się do pliku XML deklarującego motoryzację funkcji obsługiwanych przez Twoją aplikację.
Aby wskazać, że masz aplikację do multimediów, dodaj
pliku XML o nazwie automotive_app_desc.xml
do katalogu res/xml/
w
w projektach AI. W tym pliku umieść te informacje:
<automotiveApp>
<uses name="media"/>
</automotiveApp>
Filtry intencji
System operacyjny Android Automotive wykorzystuje wyraźne intencje do aktywowania działań w multimediach
. Nie uwzględniaj żadnych aktywności, które zawierają
CATEGORY_LAUNCHER
lub intencję ACTION_MAIN
w pliku manifestu.
Działania takie jak poniżej są zwykle kierowane na telefon lub innego urządzenia mobilnego. W module zadeklaruj te działania, które: tworzy aplikację na telefon, a nie w module, który tworzy system operacyjny Android Automotive. .
<activity android:name=".MyActivity">
<intent-filter>
<!-- You can't use either of these intents for Android Automotive OS -->
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<!--
In their place, you can include other intent filters for any activities
that your app needs for Android Automotive OS, such as settings or
sign-in activities.
-->
</intent-filter>
</activity>
Zaktualizuj zależności Gradle
Zalecamy zachowanie usługi przeglądarki multimediów. w osobnym module udostępnianym między aplikacją na telefon i samochodem . Jeśli korzystasz z tej metody, musisz zaktualizować , tak jak widać poniżej:
Odlotowe
buildscript { ... dependencies { ... implementation project(':shared_module_name') } }
Kotlin
buildscript { ... dependencies { ... implementation(project(":shared_module_name")) } }
Wdrażanie ustawień i aktywności związanych z logowaniem
Oprócz przeglądarki multimediów możesz też udostępniać usługi zoptymalizowane pod kątem pojazdów. ustawienia i aktywności związane z logowaniem w aplikacji na system operacyjny Android Automotive. Aktywności te pozwalają udostępniać funkcje aplikacji, których nie ma w Interfejsy API Android Media.
Wykonuj te działania tylko wtedy, gdy Twoja aplikacja na system operacyjny Android Automotive musi umożliwiać użytkownikom logowanie się lub określać ustawienia aplikacji. Te aktywności nie są używane przez Androida Auto.
Przepływy pracy związane z aktywnością
Poniższy diagram przedstawia interakcje użytkownika z ustawieniami i czynności związane z logowaniem na urządzeniach z systemem operacyjnym Android Automotive:
Unikaj rozpraszania uwagi w ustawieniach i podczas logowania
Aby ustawienia lub informacje o aktywności związanej z logowaniem były dostępne tylko do użytku
gdy pojazd jest zaparkowany, sprawdź, czy elementy <activity>
nie uwzględniaj tego elementu <meta-data>
. Twoja aplikacja zostanie odrzucona
pod kątem obecności takich elementów.
<!-- NOT ALLOWED -->
<meta-data
android:name="distractionOptimized"
android:value="true"/>
Dodaj aktywność związaną z ustawieniami
Możesz dodać aktywność związaną z ustawieniami zoptymalizowanymi pod kątem pojazdu, aby które użytkownicy mogą skonfigurować w swoich samochodach. Twoje ustawienia może też umożliwiać inne przepływy pracy, takie jak logowanie lub wylogowywanie użytkownika konta lub przełączanie kont użytkowników. Pamiętaj, że to działanie dotyczy tylko uruchamianych przez aplikację działającą w systemie operacyjnym Android Automotive. Połączono z aplikacjami na telefonie Android Auto nie jest używany.
Zadeklarowanie aktywności związanej z ustawieniami
W pliku manifestu aplikacji musisz zadeklarować aktywność związaną z ustawieniami, jak pokazano w sekcji ten fragment kodu:
<application>
...
<activity android:name=".AppSettingsActivity"
android:exported="true"
android:theme="@style/SettingsActivity"
android:label="@string/app_settings_activity_title">
<intent-filter>
<action android:name="android.intent.action.APPLICATION_PREFERENCES"/>
</intent-filter>
</activity>
...
</application>
Wdróż aktywność związaną z ustawieniami
Gdy użytkownik uruchamia Twoją aplikację, system operacyjny Android Automotive wykrywa
zadeklarowaną przez Ciebie aktywność i wyświetla afordancję, np. ikonę.
Użytkownik może wybrać tę afordancję za pomocą wyświetlacza w samochodzie, aby poruszać się po niej
do danej aktywności. System operacyjny Android Automotive wysyła ACTION_APPLICATION_PREFERENCES
która informuje aplikację, że ma rozpocząć działanie związane z ustawieniami.
Pozostała część tej sekcji zawiera informacje na temat dostosowywania kodu z modułu Universal Przykładowa aplikacja Android Music Player (UAMP) aby zaimplementować aktywność związaną z ustawieniami w aplikacji.
Na początek pobierz przykładowy kod:
# Clone the UAMP repositorygit clone https://github.com/android/uamp.git
# Fetch the appropriate pull request to your local repositorygit fetch origin pull/323/head:NEW_LOCAL_BRANCH_NAME
# Switch to the new branchgit checkout NEW_LOCAL_BRANCH_NAME
Aby zaimplementować swoją aktywność, wykonaj te czynności:
- Skopiuj folder
automotive/automotive-lib
do modułu motoryzacyjnego. - Zdefiniuj drzewo preferencji, na przykład
automotive/src/main/res/xml/preferences.xml
Wdrażanie
PreferenceFragmentCompat
wyświetlane są informacje o aktywności związanej z ustawieniami. ZobaczSettingsFragment.kt
oraz Pliki (SettingsActivity.kt
) w formacie UAMP i w Ustawieniach Androida .
Podczas wdrażania działań związanych z ustawieniami weź pod uwagę te sprawdzone metody niektóre komponenty w bibliotece preferencji:
- Mają najwyżej 2 poziomy głębi pod widokiem głównym aktywność związaną z ustawieniami.
- Nie używaj
DropDownPreference
. Zamiast nich użyjListPreference
. - Komponenty organizacyjne:
PreferenceScreen
- Musi to być najwyższy poziom drzewa ustawień.
PreferenceCategory
- Służy do grupowania
Preference
obiektów. - Dodaj atrybut
title
.
- Służy do grupowania
- Uwzględnij
key
ititle
w każdym z poniższych komponentów. Możesz też uwzględnićsummary
,icon
lub oba:Preference
- Dostosuj logikę w wywołaniu zwrotnym
onPreferenceTreeClick()
swojegoPreferenceFragmentCompat
.
- Dostosuj logikę w wywołaniu zwrotnym
CheckBoxPreference
- W przypadku tekstu warunkowego można użyć właściwości
summaryOn
lubsummaryOff
zamiastsummary
.
- W przypadku tekstu warunkowego można użyć właściwości
SwitchPreference
- W przypadku tekstu warunkowego można użyć właściwości
summaryOn
lubsummaryOff
zamiastsummary
. - Może mieć
switchTextOn
lubswitchTextOff
.
- W przypadku tekstu warunkowego można użyć właściwości
SeekBarPreference
- Uwzględnij
min
,max
idefaultValue
.
- Uwzględnij
EditTextPreference
- Uwzględnij
dialogTitle
,positiveButtonText
inegativeButtonText
. - Może mieć
dialogMessage
lubdialogLayoutResource
.
- Uwzględnij
com.example.android.uamp.automotive.lib.ListPreference
- Pochodzi głównie z:
ListPreference
. - Służy do wyświetlania listy jednokrotnego wyboru zawierającej obiekty
Preference
. - Musi mieć tablicę o wartości
entries
i odpowiedniej wartościentryValues
.
- Pochodzi głównie z:
com.example.android.uamp.automotive.lib.MultiSelectListPreference
- Pochodzi głównie z:
MultiSelectListPreference
- Służy do wyświetlania listy jednokrotnego wyboru zawierającej obiekty
Preference
. - Musi mieć tablicę o wartości
entries
i odpowiedniej wartościentryValues
.
- Pochodzi głównie z:
Dodaj aktywność związaną z logowaniem
Jeśli Twoja aplikacja wymaga od użytkownika zalogowania się, aby mógł z niej korzystać, możesz dodać zoptymalizowaną pod kątem pojazdu aktywność logowania, obsługuje logowanie się w aplikacji i wylogowywanie z niej. Możesz też dodać informacje o logowaniu się i wylogowywaniu do aktywności ustawień, ale używaj funkcji dedykowanej aktywności związanej z logowaniem, jeśli aplikacja nie może zostać użyta do czasu, zaloguje się na Twoje konto. Pamiętaj, że ta aktywność jest wyzwalana tylko przez aplikację działającą na system operacyjny Android Automotive. Nie używają ich aplikacje na telefon połączone z Androidem Auto.
Wymagaj logowania się przy uruchamianiu aplikacji
Jeśli chcesz wymagać od użytkownika zalogowania się, aby mógł korzystać z Twojej aplikacji, przeglądarka multimediów usługa musi:
- W metodzie
onLoadChildren()
Twojej usługi wyślij wyniknull
za pomocąsendResult()
. . - Ustaw
PlaybackStateCompat
sesji multimedialnej doSTATE_ERROR
za pomocą operatorasetState()
. Informuje to system operacyjny Android Automotive, że żadne inne operacje nie będą mogły być wykonywane do czasu naprawiono błąd. - Ustaw
PlaybackStateCompat
dla sesji multimediów kod błędu doERROR_CODE_AUTHENTICATION_EXPIRED
. Informuje on system operacyjny Android Automotive, że użytkownik musi się uwierzytelnić. - Ustaw
PlaybackStateCompat
dla sesji multimediów za pomocą interfejsusetErrorMessage()
. Ponieważ ten komunikat o błędzie jest widoczny dla użytkowników, zlokalizuj go dla bieżącego języka użytkownika. Ustaw
PlaybackStateCompat
dla sesji multimediów za pomocą funkcjisetExtras()
. Uwzględnij 2 te klucze:PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL
: ciąg znaków wyświetlany na przycisku, który rozpoczyna proces logowania. Ponieważ ten ciąg jest widoczny dla użytkowników, zlokalizuj go pod kątem dla bieżącego języka.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT
:PendingIntent
, który kieruje do danych logowania, gdy użytkownik kliknie przycisk, o którym mowa wPLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL
Ten fragment kodu pokazuje, jak aplikacja może wymagać od użytkownika zalogowania się przed użyciem aplikacji:
Kotlin
import androidx.media.utils.MediaConstants val signInIntent = Intent(this, SignInActivity::class.java) val signInActivityPendingIntent = PendingIntent.getActivity(this, 0, signInIntent, 0) val extras = Bundle().apply { putString( MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL, "Sign in" ) putParcelable( MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT, signInActivityPendingIntent ) } val playbackState = PlaybackStateCompat.Builder() .setState(PlaybackStateCompat.STATE_ERROR, 0, 0f) .setErrorMessage( PlaybackStateCompat.ERROR_CODE_AUTHENTICATION_EXPIRED, "Authentication required" ) .setExtras(extras) .build() mediaSession.setPlaybackState(playbackState)
Java
import androidx.media.utils.MediaConstants; Intent signInIntent = new Intent(this, SignInActivity.class); PendingIntent signInActivityPendingIntent = PendingIntent.getActivity(this, 0, signInIntent, 0); Bundle extras = new Bundle(); extras.putString( MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL, "Sign in"); extras.putParcelable( MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT, signInActivityPendingIntent); PlaybackStateCompat playbackState = new PlaybackStateCompat.Builder() .setState(PlaybackStateCompat.STATE_ERROR, 0, 0f) .setErrorMessage( PlaybackStateCompat.ERROR_CODE_AUTHENTICATION_EXPIRED, "Authentication required" ) .setExtras(extras) .build(); mediaSession.setPlaybackState(playbackState);
Gdy użytkownik zostanie uwierzytelniony, skonfiguruj PlaybackStateCompat
z powrotem do stanu innego niż STATE_ERROR
,
a potem przekieruj użytkownika z powrotem do systemu operacyjnego Android Automotive, wywołując funkcję
finish()
.
.
Wdróż logowanie
Google oferuje różne narzędzia tożsamości które ułatwia użytkownikom logowanie się w aplikacji w samochodach. Niektóre takich jak Uwierzytelnianie Firebase, kompleksowe zestawy narzędzi, ułatwiają tworzenie spersonalizowanych funkcji uwierzytelniania. Inne narzędzia z istniejących danych logowania użytkownika i w innych technologiach, które ułatwiają tworzenie z logowania się.
Te narzędzia mogą Ci ułatwić logowanie dla użytkowników, którzy zalogowali się wcześniej na innym urządzeniu:
- Logowanie i rejestracja jednym dotknięciem: jeśli masz już wdrożoną funkcję jednego dotknięcia. dla innych urządzeń, takich jak aplikacja Telefon, należy wdrożyć Aplikacja na system operacyjny Android Automotive, która obsługuje istniejących użytkowników One Tap.
- Logowanie przez Google: jeśli masz już zaimplementowaną logowanie przez Google. w przypadku innych urządzeń, takich jak aplikacja Telefon, Logowanie się w aplikacji na system operacyjny Android Automotive w celu obsługi istniejącego logowania przez Google użytkowników.
- Autouzupełnianie z Google: jeśli użytkownicy włączyli autouzupełnianie z Google na innych urządzeń z Androidem dane logowania są zapisywane w Menedżerze haseł Google. Gdy tacy użytkownicy zalogują się w Twojej aplikacji na system operacyjny Android Automotive, autouzupełnianie wpisz Google sugeruje odpowiednie zapisane dane logowania. Wymagania autouzupełniania z Google nie wymaga dużych nakładów pracy. Deweloperzy aplikacji mogą jednak zoptymalizować swoje aplikacje pod kątem lepszej jakości wyników. Autouzupełnianie z Google jest obsługiwane na wszystkich urządzeniach z Androidem 8.0 (poziom interfejsu API 26) lub wyższy, w tym system operacyjny Android Automotive.
Użyj usługi AccountManager
Aplikacje na system operacyjny Android Automotive, które wymagają uwierzytelniania, muszą używać AccountManager z tych powodów:
- lepszy komfort obsługi i łatwiejsze zarządzanie kontem: użytkownicy mogą łatwo zarządzać wszystkimi w menu kont w ustawieniach systemowych, w tym na stronie logowania i wylogować się.
- „Gość” funkcje: samochody są współużytkowanymi urządzeniami, co oznacza, że OEM może umożliwiać
„gość” w pojeździe, w którym nie można dodawać kont. Ten
ograniczenie można osiągnąć za pomocą funkcji
DISALLOW_MODIFY_ACCOUNTS
zaAccountManager
.
Uprawnienia
Jeśli chcesz poprosić użytkownika o przyznanie uprawnień, wykonaj tę samą procedurę aktywności związanej z uwierzytelnianiem lub ustawieniami w przepływach pracy związanych z aktywnością pokazany w poprzedniej sekcji.
Odczyt wskazówek dotyczących hosta multimediów
W zależności od aplikacji systemowej (w tym jej wersji), która łączy się z przeglądarki multimediów, aplikacja może otrzymywać te dodatki:
Obsługa błędów
Błędy w aplikacjach do multimediów na Androidzie Automotive są przekazywane za pomocą multimediów
PlaybackStateCompat
sesji. Ustaw odpowiedni błąd dla wszystkich błędów
i komunikat o błędzie w PlaybackStateCompat
. To powoduje, że pojawia się Toast
w interfejsie.
Gdy występuje błąd, ale odtwarzanie można kontynuować, generuje komunikat niekrytyczny . Użytkownik może na przykład mieć możliwość odtwarzania muzyki w aplikacji przed zalogowaniem się, muszą się zalogować, zanim będą mogli pominąć utwór. W przypadku błędu niekrytycznego system może zasugerować użytkownikowi zalogowanie się bez przerywania odtwarzania bieżącego elementu multimedialnego.
W przypadku wystąpienia błędu niekrytycznego zachowaj pozostałe informacje
PlaybackStateCompat
w stanie obecnym, z wyjątkiem kodu błędu i komunikatu o błędzie. Użycie tego
pozwala kontynuować odtwarzanie bieżącego elementu multimedialnego,
decyduje, czy się zalogować.
Jeśli odtwarzanie jest niemożliwe, na przykład przy braku połączenia z internetem
brak treści offline, ustaw stan PlaybackStateCompat
na STATE_ERROR
.
Przy kolejnych aktualizacjach urządzenia PlaybackStateCompat
usuń wszystkie kody błędów
i komunikatów o błędach, aby uniknąć wyświetlania kilku ostrzeżeń dotyczących tego samego błędu.
Jeśli na którymkolwiek etapie nie będzie można wczytać drzewa przeglądania – na przykład
wymagaj uwierzytelniania, a użytkownik nie jest zalogowany – wyślij puste pole
drzewo przeglądania. Aby to zasygnalizować, zwróć wartość null z funkcji onLoadChildren()
dla zapytania
główny węzeł multimediów. W takim przypadku system wyświetla obraz na pełnym ekranie
z komunikatem o błędzie ustawionym w PlaybackStateCompat
.
Błędy możliwe do wykonania
Jeśli błąd jest przydatny, ustaw dodatkowo następujące dwa elementy dodatkowe w
PlaybackStateCompat
:
PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL
: etykietę przycisku, który należy kliknąć, aby naprawić błąd. Ponieważ ten ciąg jest dla użytkownika, zlokalizuj go pod kątem bieżącego języka użytkownika.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT
: przyciskPendingIntent
uruchamiany po kliknięciu przycisku w celu naprawienia błędu, np. uruchamiając aktywność związaną z logowaniem.
Błędy możliwe do działania są oznaczone jako Dialog
i mogą zostać naprawione przez użytkowników tylko wtedy,
samochód jest zatrzymany.
Testowanie przypadków błędów
Sprawdź, czy aplikacja sprawnie obsługuje błędy we wszystkich sytuacjach, m.in.:
- różne poziomy produktu: np. bezpłatny i płatny albo płatny; lub niezalogowany użytkownik
- Różne stany jazdy: np. zaparkowany i samochód.
- Różne stany połączenia: na przykład online i offline.
Inne rzeczy, które warto wziąć pod uwagę
Pamiętaj o innych kwestiach przy tworzeniu aplikacji na Androida Automotive Aplikacja systemu operacyjnego:
Treści offline
W razie potrzeby zaimplementuj obsługę odtwarzania offline. Samochody z Androidem Automotive System operacyjny powinien mieć własne połączenie transmisji danych, pakiet danych jest wliczony w koszt pojazdu lub opłacany przez użytkownika. Oczekuje się jednak, że samochody będą mieć bardziej zmienne połączenie niż telefony komórkowe. urządzenia.
Oto kilka kwestii, o których warto pamiętać, rozważając wsparcie offline strategia:
- Najlepszy czas na pobieranie zawartości to czas, gdy aplikacja jest używana.
- Nie zakładaj, że masz dostęp do sieci Wi-Fi. Samochód może nigdy nie znaleźć się w zasięgu Wi-Fi, lub producent OEM wyłączył Wi-Fi na rzecz sieci komórkowej.
- Można inteligentnie buforować treści, których użytkownicy mogą używać, zalecamy, aby pozwolić użytkownikowi zmienić to zachowanie aktywność związaną z ustawieniami.
- Ilość miejsca na dysku w samochodach jest różna, więc daj użytkownikom możliwość treści offline, np. przy użyciu opcji w aktywność związaną z ustawieniami.
Obsługa WebView
Komponenty WebView są obsługiwane w systemie operacyjnym Android Automotive, ale są dozwolone tylko w przypadku: ustawienia i aktywność związaną z logowaniem. Aktywności korzystające z komponentu WebView muszą mieć parametr „zamknij” lub „wstecz” afordancji poza komponentem WebView.
Oto kilka przykładów dopuszczalnych przypadków użycia komponentów WebView:
- wyświetlanie polityki prywatności, warunków korzystania z usługi lub innych linków związanych z prawem. w aktywności związanej z ustawieniami.
- Proces internetowy w ramach aktywności związanej z logowaniem.
Korzystając z komponentu WebView, możesz włączyć JavaScriptu.
Zabezpiecz komponent WebView
Przeprowadź wszystkie możliwe środki ostrożności, aby mieć pewność, że komponent WebView nie jest
i punktu dostępu do internetu. Możesz skorzystać z podanego niżej fragmentu kodu,
jak zablokować komponent WebView do adresu URL używanego w parametrze
loadUrl()
i zapobiegać przekierowaniom. Zdecydowanie zalecamy wdrożenie środków ochrony
gdy jest to możliwe, na przykład przy wyświetlaniu reklam
linki do stron prawnych.
Kotlin
override fun shouldOverrideUrlLoading(webView: WebView, webResourceRequest: WebResourceRequest): Boolean { val originalUri: Uri = Uri.parse(webView.originalUrl) // Check for allowed URLs if (originalUri.equals(Uri.parse(BLANK_URL)) || originalUri.equals(webResourceRequest.url)) { return false } if (webResourceRequest.isRedirect) { logger.w("Redirect detected, not following") return true } setupWizardWebViewClientListener.onUriBlocked(webResourceRequest.url) logger.w( String.format( "Navigation prevented to %s original is %s", webResourceRequest.url, originalUri)) return true }
Java
@Override public boolean shouldOverrideUrlLoading(WebView webView, WebResourceRequest webResourceRequest) { Uri originalUri = Uri.parse(webView.getOriginalUrl()); // Check for allowed URLs if (originalUri.equals(Uri.parse(BLANK_URL)) || originalUri.equals(webResourceRequest.getUrl())) { return false; } if (webResourceRequest.isRedirect()) { logger.w("Redirect detected, not following"); return true; } setupWizardWebViewClientListener.onUriBlocked(webResourceRequest.getUrl()); logger.w( String.format( "Navigation prevented to %s original is %s", webResourceRequest.getUrl(), originalUri)); return true; }
Nazwy pakietów
Ponieważ rozpowszechniasz oddzielny pakiet Android Package Kit (APK) na system operacyjny Android Automotive, możesz użyj nazwy pakietu z aplikacji mobilnej lub utwórz nowy pakiet imię i nazwisko. Jeśli używasz innej nazwy pakietu, Twoja aplikacja ma 2 osobne Sklep Play strony. Jeśli ponownie użyjesz bieżącej nazwy pakietu, aplikacja ma na obu platformach.
Jest to głównie decyzja biznesowa. Jeśli na przykład masz jeden zespół, który pracuje nad aplikację mobilną oraz osobny zespół pracujący nad Androidem Automotive w systemie operacyjnym, warto nadać osobne nazwy pakietów i zarządzać jej własną stroną w Sklepie Play. Nie ma dużej różnicy pod względem wymaga pracy technicznej każdej z tych metod.
W tabeli poniżej znajdziesz podsumowanie kilku innych kluczowych różnic między utrzymaniem bieżącej nazwy pakietu z nową nazwą:
Funkcja | Ta sama nazwa pakietu | Nazwa nowego pakietu |
---|---|---|
Informacje o aplikacji | Pojedynczy | Wiele |
Powielona instalacja | Tak: „szybka ponowna instalacja aplikacji” podczas kreatora konfiguracji | Nie |
Proces sprawdzania w Sklepie Play | Blokowanie opinii: jeśli weryfikacja nie powiedzie się w przypadku jednego pliku APK, inne pliki APK przesłane w tej samej wersji są zablokowane | Pojedyncze opinie |
Statystyki, dane i parametry życiowe | Połączone: możesz filtrować dane dotyczące branży motoryzacyjnej. | Rozdziel |
Indeksowanie i ranking wyszukiwania | Zbuduj na bazie obecnego stanu | Bez przenoszenia danych |
Integracja z innymi aplikacjami | Prawdopodobnie nie będą wymagane żadne zmiany, przy założeniu, że kod mediów jest wspólny dla obu pakietów APK | Konieczne może być zaktualizowanie odpowiedniej aplikacji, na przykład do odtwarzania identyfikatora URI za pomocą Asystenta Google. |
Najczęstsze pytania
W poniższych sekcjach znajdziesz odpowiedzi na niektóre z najczęściej zadawanych pytań dotyczących system operacyjny Android Automotive.
Sprzęt
Czy moja aplikacja może uzyskać dostęp do mikrofonu?
Informacje o aplikacjach kierowanych na Androida 10 (poziom interfejsu API 29) lub nowszego znajdziesz w artykule o udostępnianiu dokumentacji wejścia audio. To nie jest jest możliwe przed poziomem 29.
Do których interfejsów API w samochodzie możemy uzyskać dostęp i w jaki sposób?
Możesz korzystać tylko z interfejsów API udostępnianych przez OEM. Procesy które pozwalają ustandaryzować sposób dostępu do tych interfejsów.
Aplikacje mogą uzyskiwać dostęp do interfejsów API samochodu za pomocą SetProperty()
i GetProperty()
w CarPropertyManager
.
Zapoznaj się z kodem źródłowym.
lub dokumentację referencyjną,
z listą wszystkich dostępnych miejsc zakwaterowania. Jeśli usługa zawiera adnotacje
w @SystemApi
, dostęp jest ograniczony do wstępnie załadowanych aplikacji systemowych.
Jakie typy kodeków audio są obsługiwane?
Więcej informacji znajdziesz w informacjach o kodeku audio. w CDD Androida.
Czy Widevine DRM jest obsługiwane?
Tak. Widevine DRM jest obsługiwane.
Programowanie i testowanie
Czy są jakieś ograniczenia lub zalecenia dotyczące korzystania z pakietów SDK i bibliotek innych firm?
Nie ma żadnych konkretnych wytycznych dotyczących używania bibliotek i pakietów SDK innych firm. Jeśli zdecydujesz się używać pakietów SDK i bibliotek innych firm, nadal ponosisz odpowiedzialność za zgodność ze wszystkimi wymaganiami dotyczącymi jakości aplikacji samochodowych.
Czy mogę korzystać z usługi na pierwszym planie?
Jedynym dozwolonym przypadkiem użycia usługi na pierwszym planie jest pobieranie treści w trybie offline. Jeśli masz inny przypadek użycia usługi na pierwszym planie, który Ci odpowiada aby uzyskać pomoc, skontaktuj się z nami przy użyciu systemu operacyjnego Android Automotive grupie dyskusyjnej.
Publikowanie aplikacji na system operacyjny Android Automotive
Jak opublikować aplikację na system operacyjny Android Automotive, używając Konsoli Google Play?
Proces publikowania aplikacji jest podobny do publikowania aplikacji na telefon, z tą różnicą, że na innym formacie. Aby włączyć w aplikacji korzystanie z Androida Automotive formatu systemu operacyjnego, wykonaj te czynności:
- Otwórz Konsolę Play.
- Wybierz swoją aplikację.
- W menu po lewej stronie kliknij Wersja > Konfiguracja > Ustawienia zaawansowane > Formaty.
- Kliknij Dodaj format > system operacyjny Android Automotive, a potem postępuj zgodnie z instrukcjami w Konsoli Play.
Dodatkowe materiały
Aby dowiedzieć się więcej o systemie operacyjnym Android Automotive, zapoznaj się z tymi dodatkowymi informacjami i zasobami Google Cloud.
Próbki
Przewodniki
- Projektowanie z myślą o jeździe samochodem
- Korzystanie z aplikacji testowej kontrolera multimediów
- Powiadomienia w systemie operacyjnym Android Automotive
- Jakość aplikacji na Androida w samochodach
Blogi
- Aktualizacje dla deweloperów dotyczące systemu operacyjnego Android Automotive
- Tworzenie aplikacji na system operacyjny Android Automotive
Filmy
- How to Build Media Apps for Cars (Jak tworzyć aplikacje multimedialne do samochodów) (Android Dev Summit 2019)
- Jak tworzyć aplikacje na Androida do samochodu (Google I/O 2019)
Zgłoś problem z multimediami w systemie operacyjnym Android Automotive
Jeśli podczas tworzenia aplikacji do multimediów na Androida Automotive napotkasz problem systemu operacyjnego, możesz to zgłosić za pomocą Google Issue Tracker. Pamiętaj, aby w szablonie problemu podać wszystkie wymagane informacje.
Zanim zgłosisz nowy problem, sprawdź, czy został już zgłoszony w problemach z listy. Możesz zasubskrybować kanał i głosować na problemy, klikając gwiazdkę przy problemie w lokalizatora. Więcej informacji: Subskrybowanie problemu.