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

System operacyjny Android Automotive umożliwia użytkownikom instalowanie aplikacji w samochodzie. Aby dotrzeć do użytkowników tej platformy, musisz rozpowszechniać aplikację zoptymalizowaną pod kątem kierowcy, zgodną z systemem operacyjnym Android Automotive. Możesz ponownie wykorzystać prawie cały kod i zasoby w aplikacji Android Auto, ale musisz utworzyć oddzielną kompilację, która spełnia wymagania podane na tej stronie.

Omówienie programowania

Dodanie obsługi systemu operacyjnego Android Automotive wymaga tylko kilku kroków opisanych w sekcjach poniżej:

  1. Włącz funkcje motoryzacyjne w Android Studio.
  2. Tworzenie modułu motoryzacyjnego
  3. Zaktualizuj zależności Gradle.
  4. Opcjonalnie: Wdróż ustawienia i aktywność związaną z logowaniem.

Uwagi dotyczące projektu

System operacyjny Android Automotive zajmuje się układem treści multimedialnych, które otrzymuje z usługi przeglądarki multimediów aplikacji. Oznacza to, że aplikacja nie wyświetla interfejsu ani nie uruchamia żadnych działań, gdy użytkownik uruchomi odtwarzanie multimediów.

Jeśli implementujesz ustawienia lub działania związane z logowaniem, muszą one być zoptymalizowane pod kątem pojazdów. Projektując te obszary aplikacji, zapoznaj się ze wskazówkami dotyczącymi projektowania systemu operacyjnego Android Automotive.

Konfigurowanie projektu

Aby włączyć obsługę systemu operacyjnego Android Automotive, musisz skonfigurować kilka części projektu aplikacji.

Włączanie funkcji motoryzacyjnych w Android Studio

Aby mieć pewność, że wszystkie funkcje systemu operacyjnego Automotive są włączone, używaj Androida Studio w wersji 4.0 lub nowszej.

Tworzenie modułu motoryzacyjnego

Niektóre komponenty systemu operacyjnego Android Automotive, np. plik manifestu, mają wymagania typowe dla danej platformy. Utwórz moduł, który oddziela kody tych komponentów od innych kodów w projekcie, np. kodu używanego w aplikacji na telefon.

Aby dodać moduł motoryzacyjny do projektu, wykonaj te czynności:

  1. W Android Studio kliknij File > New > New Module (Plik > Nowy > Nowy moduł).
  2. Wybierz Automotive Module (Moduł motoryzacyjny) i kliknij Next (Dalej).
  3. Wpisz nazwę aplikacji/biblioteki. Taką nazwę zobaczą użytkownicy Twojej aplikacji w systemie operacyjnym Android Automotive.
  4. Wypełnij pole Nazwa modułu.
  5. Zmień Nazwę pakietu, by pasowała do Twojej aplikacji.
  6. Wybierz API 28: Android 9.0 (Pie) jako Minimalny pakiet SDK i kliknij Dalej.

    Wszystkie samochody obsługujące system operacyjny Android Automotive działają na Androidzie 9 (poziom interfejsu API 28) lub wyższym, więc wybranie tej wartości dotyczy wszystkich 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 nowym module Automotive:

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

Element application zawiera standardowe informacje o aplikacji oraz element uses-feature deklarujący obsługę systemu operacyjnego Android Automotive. Zwróć uwagę, że w pliku manifestu nie ma zadeklarowanych aktywności.

Jeśli wdrożysz ustawienia lub aktywność związaną z logowaniem, dodaj je tutaj. Działania te są wywoływane przez system na podstawie wyraźnych intencji i są jedynymi działaniami deklarowanymi w pliku manifestu aplikacji na Androida Automotive.

Po dodaniu ustawień lub aktywności związanej z logowaniem uzupełnij plik manifestu, ustawiając atrybut android:appCategory="audio" w elemencie application i dodając te elementy 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>

Wyraźne ustawienie tych funkcji na required="false" sprawia, że aplikacja nie koliduje z dostępnymi funkcjami sprzętowymi dostępnymi na urządzeniach z systemem operacyjnym Automotive.

Deklarowanie obsługi multimediów w systemie operacyjnym Android Automotive

Aby zadeklarować, że Twoja aplikacja obsługuje system operacyjny Android Automotive, użyj tego wpisu w pliku manifestu:

<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, który deklaruje funkcje motoryzacyjne obsługiwane przez Twoją aplikację.

Aby wskazać, że masz aplikację do multimediów, dodaj plik XML o nazwie automotive_app_desc.xml do katalogu res/xml/ w projekcie. Umieść w tym pliku te elementy:

<automotiveApp>
    <uses name="media"/>
</automotiveApp>

Filtry intencji

System operacyjny Android Automotive używa jawnych intencji do aktywowania działań w aplikacji do multimediów. Nie umieszczaj w pliku manifestu żadnych aktywności z filtrami intencji CATEGORY_LAUNCHER lub ACTION_MAIN.

Działania takie jak w poniższym przykładzie są zwykle kierowane na telefon lub inne urządzenie mobilne. Wyrejestruj je w module, który tworzy aplikację na telefon, a nie w module, który tworzy aplikację na Androida 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 umieszczenie usługi przeglądarki multimediów w osobnym module, który jest współużytkowany przez aplikację na telefon i moduł samochodowy. Jeśli korzystasz z tego rozwiązania, musisz zaktualizować moduł motoryzacyjny, aby zawierał moduł udostępniony, jak pokazano w tym fragmencie:

my-auto-module/build.gradle

Odlotowy

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 usługi przeglądarki multimediów możesz też udostępniać w aplikacji na Androida Automotive ustawienia zoptymalizowane pod kątem pojazdów i logować się. Dzięki temu zyskasz dostęp do funkcji, których nie ma w interfejsach Android Media API.

Stosuj te działania tylko wtedy, gdy aplikacja na system operacyjny Android Automotive musi umożliwiać użytkownikom logowanie się lub określać ustawienia aplikacji. Android Auto nie korzysta z tych danych.

Przepływy pracy związane z aktywnością

Ten diagram pokazuje, jak użytkownik korzysta z Twoich ustawień i aktywności logowania się przy użyciu systemu operacyjnego Android Automotive:

Przepływy pracy ustawień i logowania

Rysunek 1. Ustawienia i przepływy pracy związane z aktywnością logowania.

Ogranicz rozpraszanie uwagi w ustawieniach i logowaniu się.

Aby Twoje ustawienia lub działania związane z logowaniem były dostępne tylko wtedy, gdy pojazd użytkownika jest zaparkowany, sprawdź, czy elementy <activity> nie zawierają poniższego elementu <meta-data>. Jeśli tak będzie, aplikacja zostanie odrzucona w trakcie sprawdzania.

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

Dodaj aktywność związaną z ustawieniami

Możesz dodać działanie związane z ustawieniami zoptymalizowanymi pod kątem pojazdu, aby użytkownicy mogli konfigurować ustawienia aplikacji w samochodzie. Aktywność związana z ustawieniami może też służyć do innych czynności, takich jak logowanie się na konto użytkownika i wylogowywanie się z nich oraz przełączanie kont użytkowników. Pamiętaj, że aktywność jest wywoływana tylko przez aplikację działającą na systemie operacyjnym Android Automotive. Aplikacje na telefon połączone z Androidem Auto nie używają go.

Deklarowanie aktywności związanej z ustawieniami

Aktywność ustawień musisz zadeklarować w pliku manifestu aplikacji, tak jak w tym fragmencie 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>

Wdrażanie aktywności związanej z ustawieniami

Gdy użytkownik uruchamia Twoją aplikację, system operacyjny Android Automotive wykrywa zadeklarowaną przez Ciebie aktywność dotyczącą ustawień i wyświetla agencję, np. ikonę. Użytkownik może kliknąć lub wybrać tę afordancję na wyświetlaczu w samochodzie, aby przejść do wybranej aktywności. System operacyjny Android Automotive wysyła intencję ACTION_APPLICATION_PREFERENCES, która informuje aplikację, że ma uruchomić aktywność związaną z ustawieniami.

W pozostałej części tej sekcji opisujemy, jak dostosować kod z przykładowej aplikacji Universal Android Music Player (UAMP), aby zaimplementować w aplikacji działanie związane z ustawieniami.

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 wdrożyć aktywność, wykonaj te czynności:

  1. Skopiuj folder automotive/automotive-lib do modułu motoryzacyjnego.
  2. Zdefiniuj drzewo ustawień, tak jak w tym przykładzie: automotive/src/main/res/xml/preferences.xml.
  3. Zaimplementuj element PreferenceFragmentCompat wyświetlany przez aktywność związaną z ustawieniami. Więcej informacji znajdziesz w plikach SettingsFragment.kt i SettingsActivity.kt w UAMP oraz w przewodniku po ustawieniach Androida.

Podczas wdrażania aktywności związanej z ustawieniami rozważ te sprawdzone metody korzystania z niektórych komponentów w bibliotece preferencji:

  • Nie możesz ustawić głębokości większej niż 2 poziomów poniżej widoku głównego.
  • Nie używaj DropDownPreference. Zamiast niego użyj elementu ListPreference.
  • Komponenty organizacyjne:
  • Uwzględnij key i title we wszystkich tych komponentach. Możesz też dodać właściwość summary, icon lub obie te wartości:
    • Preference
      • Dostosuj logikę w wywołaniu zwrotnym onPreferenceTreeClick() w implementacji PreferenceFragmentCompat.
    • CheckBoxPreference
      • Tekst warunkowy może zawierać summaryOn lub summaryOff zamiast summary.
    • SwitchPreference
      • Tekst warunkowy może zawierać summaryOn lub summaryOff zamiast summary.
      • Może zawierać switchTextOn lub switchTextOff.
    • SeekBarPreference
      • Uwzględnij min, max i defaultValue.
    • EditTextPreference
      • Uwzględnij dialogTitle, positiveButtonText i negativeButtonText.
      • Może zawierać dialogMessage lub dialogLayoutResource.
    • com.example.android.uamp.automotive.lib.ListPreference
      • Pochodzi głównie z języka: ListPreference.
      • Służy do wyświetlania listy obiektów Preference jednokrotnego wyboru.
      • Musi mieć tablicę entries i odpowiednią wartość entryValues.
    • com.example.android.uamp.automotive.lib.MultiSelectListPreference
      • Pochodzi głównie z języka MultiSelectListPreference
      • Służy do wyświetlania listy jednokrotnego wyboru obiektów Preference.
      • Musi mieć tablicę entries i odpowiednią wartość entryValues.

Dodaj aktywność związaną z logowaniem

Jeśli Twoja aplikacja wymaga od użytkownika zalogowania się, zanim będzie mógł z niej korzystać, możesz dodać aktywność związaną z logowaniem zoptymalizowaną pod kątem pojazdu, która obsługuje logowanie się i wylogowywanie. Możesz też dodać procedury logowania i wylogowania do aktywności związanej z ustawieniami, ale jeśli nie możesz użyć aplikacji, dopóki użytkownik się nie zaloguje, możesz użyć dedykowanej aktywności związanej z logowaniem. Pamiętaj, że ta aktywność jest wywoływana tylko przez aplikację działającą w systemie operacyjnym Android Automotive. Aplikacje na telefon połączone z Androidem Auto nie używają go.

Wymagaj logowania przy uruchomieniu aplikacji

Aby wymagać od użytkownika zalogowania się, zanim będzie mógł korzystać z Twojej aplikacji, usługa przeglądarki multimediów musi:

  1. W metodzie onLoadChildren() swojej usługi wyślij wynik null za pomocą metody sendResult().
  2. Za pomocą metody setState() ustaw PlaybackStateCompat sesji multimedialnej na STATE_ERROR. Informuje on system operacyjny Android Automotive, że do czasu usunięcia błędu nie można wykonywać żadnych innych operacji.
  3. Ustaw kod błędu PlaybackStateCompat sesji multimedialnej na ERROR_CODE_AUTHENTICATION_EXPIRED. Informuje to system operacyjny Android Automotive, że użytkownik musi się uwierzytelnić.
  4. Ustaw komunikat o błędzie PlaybackStateCompat sesji multimedialnej za pomocą metody setErrorMessage(). Ten komunikat o błędzie jest widoczny dla użytkowników, dlatego zlokalizuj go pod kątem bieżącego języka użytkownika.
  5. Ustaw rozszerzenia PlaybackStateCompat sesji multimedialnej za pomocą metody setExtras(). Uwzględnij 2 te klucze:

Ten fragment kodu pokazuje, w jaki sposób aplikacja może wymagać od użytkownika zalogowania się przed użyciem:

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, ustaw w PlaybackStateCompat z powrotem stan inny niż STATE_ERROR, a potem zabierz użytkownika z powrotem do systemu operacyjnego Android Automotive, wywołując metodę finish() działania.

Wdrażanie aktywności związanej z logowaniem

Google oferuje wiele narzędzi do zarządzania tożsamością, które ułatwiają użytkownikom logowanie się w aplikacjach w samochodach. Niektóre narzędzia, takie jak Uwierzytelnianie Firebase, zapewniają kompleksowy zestaw narzędzi do tworzenia spersonalizowanych funkcji uwierzytelniania. Inne narzędzia wykorzystują istniejące dane logowania użytkownika lub inne technologie, aby umożliwiać jego wygodne logowanie.

Te narzędzia mogą ułatwić użytkownikom logowanie się na innych urządzeniach:

  • Logowanie i rejestracja jednym dotknięciem: jeśli masz już wdrożone jednym dotknięciem na innych urządzeniach, na przykład w aplikacji na telefon, zastosuj ją w aplikacji na system operacyjny Android Automotive, aby obsługiwać dotychczasowych użytkowników jednym dotknięciem.
  • Logowanie przez Google: jeśli masz już wdrożone Logowanie przez Google na innych urządzeniach, np. w aplikacji na telefon, zaimplementuj tę funkcję w aplikacji systemu operacyjnego Android Automotive, aby obsługiwać dotychczasowych użytkowników Logowania przez Google.
  • Autouzupełnianie z Google: jeśli użytkownicy włączyli Autouzupełnianie z Google na innych urządzeniach z Androidem, ich dane logowania są zapisywane w Menedżerze haseł Google. Gdy użytkownicy zalogują się w aplikacji na system operacyjny Android Automotive, Autouzupełnianie z Google zasugeruje odpowiednie zapisane dane logowania. Korzystanie z Autouzupełniania z Google nie wymaga prac nad aplikacjami. Deweloperzy aplikacji mogą jednak zoptymalizować swoje aplikacje, aby uzyskać lepsze wyniki. Autouzupełnianie z Google jest obsługiwane na wszystkich urządzeniach z Androidem 8.0 (poziom interfejsu API 26) lub nowszym, w tym z systemem operacyjnym Android Automotive.

Użyj menedżera konta

Aplikacje na system operacyjny Android Automotive, które mają uwierzytelnianie, muszą używać usługi AccountManager z tych powodów:

  • Większa wygoda użytkowania i łatwiejsze zarządzanie kontem: użytkownicy mogą łatwo zarządzać wszystkimi swoimi kontami (w tym logować się i wylogowywać) z menu kont w ustawieniach systemu.
  • Funkcje „gościa”: samochody są współdzielone przez urządzenia, co oznacza, że OEM może włączyć w pojeździe funkcję „gościa”, przy czym nie można dodawać kont. To ograniczenie jest osiągane za pomocą DISALLOW_MODIFY_ACCOUNTS dla AccountManager.

Uprawnienia

Jeśli chcesz poprosić użytkownika o przyznanie uprawnień, użyj tego samego procesu co w przypadku czynności uwierzytelniania lub ustawień na diagramie przepływów pracy związanych z aktywnością pokazanego w poprzedniej sekcji.

Obsługa błędów

Błędy w aplikacjach do multimediów na Androidzie Automotive są komunikowane przez PlaybackStateCompat sesji multimedialnej. W przypadku wszystkich błędów ustaw odpowiedni kod i komunikat o błędzie w PlaybackStateCompat. W rezultacie w interfejsie pojawi się Toast.

Gdy wystąpi błąd, ale można kontynuować odtwarzanie, zgłoszenie niekrytycznego błędu. Na przykład użytkownik może odtwarzać muzykę w aplikacji, zanim się zaloguje, ale musi się zalogować, aby pominąć utwór. W przypadku takiego błędu system może zasugerować użytkownikowi zalogowanie się bez przerywania odtwarzania bieżącego elementu multimedialnego.

Gdy zgłosisz błąd niekrytyczny, zachowaj pozostałą część pliku PlaybackStateCompat bez zmian (z wyjątkiem kodu błędu i komunikatu o błędzie). Ta metoda umożliwia kontynuowanie odtwarzania bieżącego elementu multimedialnego, gdy użytkownik decyduje, czy się zalogować.

Gdy odtwarzanie jest niedostępne, np. gdy nie ma połączenia z internetem i treści offline, ustaw stan PlaybackStateCompat na STATE_ERROR.

Przy kolejnych aktualizacjach PlaybackStateCompat usuń wszystkie kody błędów i komunikaty o błędach, aby uniknąć wyświetlania wielu ostrzeżeń dotyczących tego samego błędu.

Jeśli w którymkolwiek momencie nie możesz wczytać drzewa przeglądania – na przykład gdy wymagane jest uwierzytelnienie, a użytkownik nie jest zalogowany – wyślij puste drzewo przeglądania. Aby to zasygnalizować, zwracaj wartość null z onLoadChildren() głównego węzła mediów. W takim przypadku system wyświetli błąd na pełnym ekranie z komunikatem o błędzie ustawionym w komponencie PlaybackStateCompat.

Błędy, które można wykonać

Jeśli przy błędzie można podjąć działania, w PlaybackStateCompat umieść dodatkowo te 2 dodatki:

Błędy, które można wykonać, są oznaczone jako Dialog, a użytkownicy mogą je naprawić tylko po zatrzymaniu samochodu.

Przypadki błędów testowania

Sprawdź, czy aplikacja płynnie obsługuje błędy we wszystkich sytuacjach, w tym:

  • Różne poziomy wersji produktu: na przykład bezpłatne i premium lub gdy użytkownik jest zalogowany i niezalogowany użytkownik.
  • różne stany jazdy: np. „parking” i „samochód”;
  • różne stany połączenia: na przykład online i offline;

Inne rzeczy, które warto wziąć pod uwagę

Podczas tworzenia aplikacji na system operacyjny Android Automotive weź pod uwagę te kwestie:

Treści offline

W razie potrzeby zaimplementuj obsługę odtwarzania offline. Samochody z systemem operacyjnym Android Automotive powinny mieć własne łącze danych, co oznacza, że abonament na transmisję danych jest wliczony w cenę pojazdu lub jest opłacany przez użytkownika. W przypadku samochodów samochody mają też jednak zwykle inne problemy z łącznością niż urządzenia mobilne.

Oto kilka kwestii, o których warto pamiętać, rozważając strategię wspierania offline:

  • Najlepiej jest pobierać treści, gdy aplikacja jest używana.
  • Nie zakładaj, że dostępna jest sieć Wi-Fi. Samochód nigdy nie znajdzie się w zasięgu Wi-Fi, a producent może je wyłączyć na rzecz sieci komórkowej.
  • Inteligentne zapisywanie w pamięci podręcznej treści, których oczekują użytkownicy, jest dozwolone, ale zalecamy pozwolić im zmienić ten sposób działania w ustawieniach.
  • Ilość miejsca na dysku w samochodach jest różna, dlatego daj użytkownikom możliwość usuwania treści offline, na przykład za pomocą opcji w ustawieniach aktywności związanej z ustawieniami.

Obsługa WebView

Komponenty WebView są obsługiwane w systemie operacyjnym Android Automotive, ale można ich używać tylko w ustawieniach i logowaniu się. Aktywności, które używają WebView, muszą mieć akredytację „close” lub „back” 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 i innych linków związanych z prawem w sekcji aktywności związanej z ustawieniami.
  • Przepływ aktywności związanej z logowaniem w przeglądarce.

Jeśli korzystasz z WebView, możesz włączyć JavaScript.

Zabezpieczanie komponentu WebView

Podejmij wszelkie możliwe środki ostrożności, aby komponent WebView nie był punktem dostępu do internetu. Poniżej znajdziesz przykład blokowania komponentu WebView z adresem URL używanym w wywołaniu loadUrl() i zapobieganiu przekierowań. Zdecydowanie zalecamy stosowanie takich środków ochrony, jak to tylko możliwe, np. przy wyświetlaniu linków związanych z prawem.

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żyć nazwy pakietu z aplikacji mobilnej lub utworzyć nową. Jeśli użyjesz innej nazwy pakietu, aplikacja ma 2 osobne informacje o niej w Sklepie Play. Jeśli ponownie użyjesz obecnej nazwy pakietu, aplikacja będzie miała jedną stronę na obu platformach.

Jest to głównie decyzja biznesowa. Jeśli na przykład masz jeden zespół, który pracuje nad aplikacją mobilną, a drugi nad Twoją aplikacją na system operacyjny Android Automotive, warto nadać im osobne nazwy pakietów i pozwolić każdemu zespołowi na zarządzanie własnymi informacjami o aplikacji w Sklepie Play. Nie ma znacznego wysiłku technicznego wymaganego przy zastosowaniu obu metod.

W tabeli poniżej znajdziesz podsumowanie kilku innych kluczowych różnic między zachowaniem obecnej nazwy pakietu a korzystaniem z nowej nazwy:

Cecha Ta sama nazwa pakietu Nazwa nowego pakietu
Informacje o aplikacji Single Wiele
Instalacja lustrzana Tak: „szybkie ponowne zainstalowanie aplikacji” w kreatorze konfiguracji Nie
Proces sprawdzania w Sklepie Play Blokowanie sprawdzania: jeśli sprawdzanie jednego pliku APK się nie powiedzie, pozostałe pliki APK przesłane w tej samej wersji zostaną zablokowane. Pojedyncze opinie
Statystyki, dane i wizytówki Łącznie: możesz filtrować dane specyficzne dla branży motoryzacyjnej. Rozdziel
Indeksowanie i ranking wyszukiwania Popraw obecną pozycję Bez przenoszenia
Integracja z innymi aplikacjami Najczęściej nie są wymagane żadne zmiany, zakładając, że kod multimediów jest wspólny dla obu plików APK. Może być konieczne zaktualizowanie odpowiedniej aplikacji, na przykład aby umożliwić odtwarzanie identyfikatorów URI za pomocą Asystenta Google.

Najczęstsze pytania

Poniżej znajdziesz odpowiedzi na najczęstsze pytania o system operacyjny Android Automotive.

Sprzęt

Czy aplikacja może mieć dostęp do mikrofonu

W przypadku aplikacji kierowanych na Androida 10 (poziom interfejsu API 29) lub nowszego zapoznaj się z dokumentacją udostępniania danych wejściowych audio. Nie jest to możliwe przed poziomem 29 interfejsu API.

Do których interfejsów API samochodów możemy uzyskać dostęp i w jaki sposób?

Obowiązują ograniczenia do interfejsów API udostępnianych przez producenta OEM. Wprowadzamy procesy ujednolicania sposobu dostępu do tych interfejsów API.

Aplikacje mogą uzyskiwać dostęp do interfejsów API samochodu za pomocą interfejsów SetProperty() i GetProperty() w CarPropertyManager. Listę wszystkich dostępnych właściwości znajdziesz w kodzie źródłowym lub w dokumentacji referencyjnej. Jeśli usługa jest opatrzona adnotacją @SystemApi, dostęp jest ograniczony do wstępnie załadowanych aplikacji systemowych.

Jakie typy kodeków audio są obsługiwane?

Zapoznaj się ze szczegółowymi informacjami o kodeku audio w dokumentacji CDD na 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 bibliotek i pakietów SDK innych firm?

Nie mamy żadnych konkretnych wytycznych dotyczących korzystania z bibliotek i pakietów SDK innych firm. Jeśli zdecydujesz się korzystać z pakietów SDK i bibliotek innych firm, nadal musisz spełniać wszystkie wymagania dotyczące jakości aplikacji samochodowych.

Czy mogę korzystać z usługi na pierwszym planie?

Jedynym dozwolonym przypadkiem użycia usługi na pierwszym planie jest pobranie treści do użytku offline. Jeśli potrzebujesz pomocy związanej z usługą na pierwszym planie w innym przypadku, skontaktuj się z nami na grupie dyskusyjnej o systemie operacyjnym Android Automotive.

Publikowanie aplikacji systemu operacyjnego Android Automotive

Jak opublikować aplikację na system operacyjny Android Automotive przy użyciu Konsoli Google Play?

Proces publikowania aplikacji jest podobny do publikowania aplikacji na telefon, ale używasz innego formatu. Aby włączyć w aplikacji format systemu operacyjnego Android Automotive, wykonaj te czynności:

  1. Otwórz Konsolę Play.
  2. Wybierz swoją aplikację.
  3. W menu po lewej stronie kliknij Wersja > Konfiguracja > Ustawienia zaawansowane > Format.
  4. Kliknij Dodaj format > System operacyjny Android Automotive, a potem postępuj zgodnie z instrukcjami w Konsoli Play.

Dodatkowe materiały

Więcej informacji o systemie operacyjnym Android Automotive znajdziesz w tych materiałach dodatkowych.

Próbki

Przewodniki

Blogi

Filmy

Zgłoś problem z systemem operacyjnym Android Automotive

Jeśli podczas tworzenia aplikacji do multimediów na system operacyjny Android Automotive napotkasz problem, możesz go zgłosić za pomocą narzędzia Google Issue Tracker. Pamiętaj, aby w szablonie problemu podać wszystkie wymagane informacje.

Utwórz nowy numer

Zanim zgłosisz nowy problem, sprawdź, czy nie ma go już na liście problemów. Możesz zasubskrybować temat i głosować na nie, klikając gwiazdkę przy danym problemie w narzędziu do śledzenia. Więcej informacji znajdziesz w artykule Subskrybowanie problemu.