Dodaj obsługę systemu operacyjnego Android Automotive do aplikacji do multimediów

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:

  1. Włącz funkcje motoryzacyjne w Android Studio.
  2. Utwórz moduł motoryzacyjny.
  3. Zaktualizuj zależności Gradle.
  4. Opcjonalnie Zaimplementuj ustawienia i aktywności związane z logowaniem.
  5. 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:

  1. W Android Studio kliknij Plik > Nowe > Nowy moduł.
  2. Wybierz Moduł motoryzacyjny i kliknij Dalej.
  3. Wpisz nazwę aplikacji/biblioteki. Tę nazwę widzą użytkownicy i aplikacja na system operacyjny Android Automotive.
  4. Wpisz nazwę modułu.
  5. Dostosuj Nazwę pakietu, aby pasowała do aplikacji.
  6. 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.

  7. 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:

my-auto-module/build.gradle

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:

Przepływy pracy związane z ustawieniami i działaniami związanymi z logowaniem

Rysunek 1. Ustawienia i przepływy pracy związane z logowaniem.

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 repository
git clone https://github.com/android/uamp.git

# Fetch the appropriate pull request to your local repository
git fetch origin pull/323/head:NEW_LOCAL_BRANCH_NAME

# Switch to the new branch
git checkout NEW_LOCAL_BRANCH_NAME

Aby zaimplementować swoją aktywność, wykonaj te czynności:

  1. Skopiuj folder automotive/automotive-lib do modułu motoryzacyjnego.
  2. Zdefiniuj drzewo preferencji, na przykład automotive/src/main/res/xml/preferences.xml
  3. Wdrażanie PreferenceFragmentCompat wyświetlane są informacje o aktywności związanej z ustawieniami. Zobacz SettingsFragment.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żyj ListPreference.
  • Komponenty organizacyjne:
  • Uwzględnij key i title 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() swojego PreferenceFragmentCompat.
    • CheckBoxPreference
      • W przypadku tekstu warunkowego można użyć właściwości summaryOn lub summaryOff zamiast summary.
    • SwitchPreference
      • W przypadku tekstu warunkowego można użyć właściwości summaryOn lub summaryOff zamiast summary.
      • Może mieć switchTextOn lub switchTextOff.
    • SeekBarPreference
      • Uwzględnij min, max i defaultValue.
    • EditTextPreference
      • Uwzględnij dialogTitle, positiveButtonText i negativeButtonText.
      • Może mieć dialogMessage lub dialogLayoutResource.
    • 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ści entryValues.
    • 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ści entryValues.

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:

  1. W metodzie onLoadChildren() Twojej usługi wyślij wynik null za pomocą sendResult(). .
  2. Ustaw PlaybackStateCompat sesji multimedialnej do STATE_ERROR za pomocą operatora setState() . Informuje to system operacyjny Android Automotive, że żadne inne operacje nie będą mogły być wykonywane do czasu naprawiono błąd.
  3. Ustaw PlaybackStateCompat dla sesji multimediów kod błędu do ERROR_CODE_AUTHENTICATION_EXPIRED. Informuje on system operacyjny Android Automotive, że użytkownik musi się uwierzytelnić.
  4. Ustaw PlaybackStateCompat dla sesji multimediów za pomocą interfejsu setErrorMessage() . Ponieważ ten komunikat o błędzie jest widoczny dla użytkowników, zlokalizuj go dla bieżącego języka użytkownika.
  5. Ustaw PlaybackStateCompat dla sesji multimediów za pomocą funkcji setExtras() . Uwzględnij 2 te klucze:

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 za AccountManager.

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:

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:

  1. Otwórz Konsolę Play.
  2. Wybierz swoją aplikację.
  3. W menu po lewej stronie kliknij Wersja > Konfiguracja > Ustawienia zaawansowane > Formaty.
  4. 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

Blogi

Filmy

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.

Tworzenie nowego numeru

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.