Inżynier ds. relacji z deweloperami
Inżynier ds. relacji z deweloperami
W miarę jak wyświetlacze w samochodach stają się coraz bardziej popularne w pojazdach z Androidem Auto i systemem operacyjnym Android Automotive, deweloperzy stają przed wyjątkowym wyzwaniem: muszą zapewnić bogate, dostosowane do potrzeb użytkownika funkcje podczas postoju oraz bezpieczne dla kierowcy, oparte na szablonach funkcje podczas jazdy. Podczas tej kompleksowej 30-minutowej sesji technicznej omówimy kompleksową architekturę i podejścia do programowania, które pozwalają dostosować aplikacje na Androida do samochodów.
Od podstaw projektowania aplikacji do użytku w samochodach po najnowsze podejścia do tworzenia multimediów, które przełączają się z dźwięku na obraz, gdy samochód przechodzi z trybu jazdy na parkowanie – dowiesz się wszystkiego, co musisz wiedzieć, aby Twoja aplikacja mogła ruszyć w drogę.
Transkrypcja
OK.
Witam wszystkich.
Dziękujemy za udział w tej sesji. Samochód to Twoje płótno.
Ta sesja dotyczy tworzenia aplikacji na Androida do użytku w samochodzie.
Nazywam się Paul Lammertsma.
A ja Thomas Weathers.
Jesteśmy inżynierami ds. relacji z deweloperami w zespole Androida do samochodu.
Wielu z Was poświęciło zapewne sporo czasu i energii, aby aplikacje wyglądały i działały świetnie na różnych ekranach i urządzeniach, takich jak telefony, urządzenia składane czy tablety.
Dzisiaj skupimy się na ekranie, o którym być może nie pomyśleliście.
Może też pomóc Ci dotrzeć do użytkowników w unikalny sposób.
To wyświetlacz w samochodzie.
Zacznijmy od krótkiego omówienia tego, co rozumiemy pod pojęciem Androida do samochodu.
Android do samochodu nie jest jednolitym systemem.
Możesz kierować reklamy na 2 platformy.
Pierwszy z nich to Android Auto, czyli system projekcyjny oparty na telefonie.
W przypadku Androida Auto aplikacja działa na telefonie i wyświetla interfejs na wyświetlaczu w samochodzie za pomocą połączenia przewodowego lub bezprzewodowego.
Drugi to system operacyjny Android Automotive, czyli wersja Androida, która działa bezpośrednio w pojeździe.
System operacyjny Android Automotive działa niezależnie od telefonu, ma bezpośredni dostęp do sprzętu pojazdu, takiego jak klimatyzacja i radio, a co ważne, zarządza też własnym połączeniem do transmisji danych.
Podzbiór samochodów z systemem operacyjnym Android Automotive to samochody z wbudowanymi usługami Google.
Samochody z wbudowanymi usługami Google zawierają też aplikacje i usługi Google, takie jak Sklep Play, Gemini i Mapy Google.
Chociaż istnieją 2 platformy, chcemy ułatwić Ci tworzenie aplikacji, które będą działać na obu z nich.
Oto przykład aplikacji multimedialnej utworzonej raz przy użyciu biblioteki aplikacji do samochodu i tego, jak wyglądałaby ona na Androidzie Auto i systemie operacyjnym Android Automotive na różnych rozmiarach i kształtach wyświetlaczy.
Istnieje wiele różnych typów urządzeń i powierzchni, na które możesz tworzyć aplikacje.
Dlaczego więc jest to ważne w przypadku samochodów?
Po pierwsze, skala jest tu ogromna.
Obecnie po drogach jeździ ponad 250 milionów samochodów zgodnych z Androidem Auto i ponad 100 modeli samochodów z wbudowanymi usługami Google 16 różnych marek.
A gdy Twoje aplikacje są w samochodach, docierasz do użytkowników podczas ich codziennych dojazdów do pracy, na zajęcia rodzinne, podczas załatwiania spraw, a nawet podczas podróży.
W Stanach Zjednoczonych, według badania American Driving Survey przeprowadzonego przez AAA w 2024 r., kierowcy spędzają za kierownicą średnio 60 minut dziennie.
Nie docierasz jednak do użytkowników tylko wtedy, gdy aktywnie prowadzą samochód.
Docierasz też do nich, gdy są zaparkowani.
Może ładują samochód na stacji ładowania EV albo czekają w kolejce, żeby odebrać dziecko ze szkoły.
Wraz ze wzrostem popularności wyświetlaczy dla pasażerów spodziewamy się, że w przyszłości pojawi się jeszcze więcej możliwości zwiększania zaangażowania użytkowników.
OK.
Przyjrzyjmy się teraz różnym rodzajom funkcji, które możesz tworzyć na potrzeby samochodów.
Aby dowiedzieć się, jak tworzyć aplikacje na samochody, warto poznać 2 główne sytuacje i stany, w których aplikacje działają w pojeździe.
Po pierwsze, są to aplikacje, których używasz podczas jazdy.
Są to funkcje zoptymalizowane pod kątem jazdy, z których można korzystać, gdy pojazd jest w ruchu.
Obejmuje to aplikacje z kategorii widocznych na ekranie, takie jak aplikacje audio, które zwykle nazywamy multimediami, aplikacje do obsługi wiadomości i komunikacji, nawigacja itp.
Funkcje zoptymalizowane pod kątem kierowcy muszą spełniać rygorystyczne kryteria ochrony przed rozpraszaniem uwagi.
Istnieją specjalne wymagania dotyczące tworzenia interfejsu aplikacji, aby można było bezpiecznie z niej korzystać podczas jazdy.
Istnieje kilka różnych sposobów tworzenia aplikacji zoptymalizowanych pod kątem jazdy.
W tym wystąpieniu skupimy się jednak na korzystaniu z biblioteki aplikacji samochodowych.
Jest to zestaw bibliotek Jetpack, które udostępniają oparty na szablonach framework z interfejsami użytkownika zoptymalizowanymi pod kątem jazdy, a także dostosowują się do różnych konfiguracji sprzętowych w samochodach.
Zastanów się nad takimi kwestiami jak metody wprowadzania danych, rozmiary ekranów i formaty obrazu.
Nie jest to jedyny sposób tworzenia aplikacji zoptymalizowanych pod kątem jazdy samochodem, ale w tej prezentacji chcę się skupić na tworzeniu aplikacji za pomocą biblioteki aplikacji Android do samochodu.
Często nazywamy to CAL.
Jak już wspomnieliśmy, Biblioteka aplikacji do samochodu to zestaw bibliotek, które pomagają tworzyć aplikacje do użytku w pojazdach.
Jest to platforma oparta na szablonach, która zapewnia interfejsy użytkownika zoptymalizowane pod kątem jazdy, a jednocześnie dostosowuje się do różnych konfiguracji sprzętowych.
Możesz utworzyć aplikację i mieć pewność, że będzie działać dobrze we wszystkich tych różnych konfiguracjach, niezależnie od tego, czy korzystają z Androida Auto czy systemu operacyjnego Android Automotive.
Aplikacje tworzone za pomocą CAL mogą korzystać z tej architektury klienta hosta.
Aplikacja hosta, którą jest Android Auto lub Google Automotive App Host w przypadku samochodów z wbudowanymi usługami Google, jest systemowym mechanizmem renderowania.
Ostatecznie to on decyduje o tym, co ma być wyświetlane użytkownikowi na ekranie.
Dlatego jako deweloper aplikacji nie rysujesz pikseli.
Zamiast tego przekazujesz uporządkowane dane i ich stan do szablonów biblioteki aplikacji samochodowych.
To właśnie ten host pobiera dane i wyświetla je w bezpieczny sposób, zgodnie z zasadami bezpieczeństwa, w układzie z minimalną liczbą elementów rozpraszających uwagę.
Przyjrzyjmy się klasom w CAL, które musisz rozszerzyć, aby utworzyć aplikację, zaczynając od CarAppService.
Jest to podklasa usługi Androida, która służy jako punkt wejścia dla aplikacji hosta do komunikacji z aplikacjami klienckimi. Jej celem jest tworzenie instancji sesji, z którymi host następnie wchodzi w interakcję.
Sesję można sobie wyobrazić jako instancję aplikacji klienckiej działającej na wyświetlaczu w pojeździe.
Podobnie jak inne komponenty Androida, ma on własny cykl życia, który może służyć do inicjowania i usuwania zasobów używanych przez cały czas istnienia instancji sesji.
Jest to relacja jeden do wielu między CarAppService a sesją.
Na przykład usługa CarAppService może mieć 2 instancje sesji: jedną dla wyświetlacza głównego, a drugą dla wyświetlacza deski rozdzielczej w przypadku aplikacji do nawigacji, które obsługują ekrany deski rozdzielczej.
Oto przykład: samochód ma wyświetlacz główny i wyświetlacz na desce rozdzielczej. Każdy z nich jest powiązany z osobną sesją. W ten sposób deweloper aplikacji może obsługiwać pojazdy z wieloma wyświetlaczami.
Następnie w ramach sesji instancje ekranu odpowiadają za generowanie interfejsów użytkownika renderowanych przez aplikacje hosta.
Te interfejsy są reprezentowane przez klasy szablonów, z których każda modeluje określony typ układu, np. siatkę lub listę.
Każda sesja zarządza stosem instancji ekranu, które obsługują wzorce przeglądania w różnych częściach aplikacji. Podobnie jak sesja, ekran ma własny cykl życia, który można wykorzystać.
Jednak fakt, że host renderuje interfejs użytkownika, a Ty używasz szablonów biblioteki aplikacji samochodowych, nie oznacza, że masz ograniczone możliwości lub nie możesz dostosować aplikacji.
Możesz korzystać z wielu szablonów i komponentów, a także łączyć je, aby uzyskać pożądany efekt.
Istnieją szablony ogólnego przeznaczenia, które mogą być używane przez wszystkie typy aplikacji w bibliotece aplikacji samochodowych, oraz szablony specjalnego przeznaczenia, które są przeznaczone do konkretnych wrażeń użytkownika aplikacji, takich jak nawigacja czy punkty zainteresowania.
Zanim jednak przejdziemy do szczegółów tworzenia aplikacji zoptymalizowanych pod kątem jazdy, chcę omówić inną sytuację, w której można uruchamiać aplikacje w samochodach: gdy samochód jest zaparkowany.
Są pewne kategorie aplikacji, których można używać tylko wtedy, gdy pojazd jest zaparkowany. Dotyczy to m.in. aplikacji wideo, gier i przeglądarek.
Gdy samochód nie jest w ruchu, wytyczne dotyczące rozpraszania uwagi kierowcy nie obowiązują i możesz zapewnić użytkownikom wrażenia bardziej zgodne z istniejącym adaptacyjnym interfejsem.
Zaparkowane aplikacje są oparte na aktywności i są podobne lub nawet takie same jak aktywności używane na innych urządzeniach, takich jak telefony czy tablety. Szczegółowo omówimy je w następnej sekcji.
Chociaż aplikacje używane podczas postoju wykorzystują istniejące aktywności adaptacyjne, nadal musisz przestrzegać wskazówek dotyczących jakości aplikacji samochodowych, od deklaracji w pliku manifestu i wycięć wyświetlacza po wstrzymywanie odtwarzania, gdy samochód zacznie się poruszać.
Aby pomóc w automatyzacji tej pracy, wprowadziliśmy nową umiejętność na Androidzie dotyczącą aplikacji, które działają po zaparkowaniu.
Zanim zaczniesz, upewnij się, że masz zainstalowany interfejs wiersza poleceń Androida. Znajdziesz go pod tym krótkim linkiem.
Po skonfigurowaniu uruchom android skills list, aby poznać dostępne umiejętności.
android skills list
android skills add android-for-cars-parked-appsJest ich wiele i możesz je wykorzystać, aby wejść na wyższy poziom tworzenia aplikacji na Androida.
W przypadku Androida do samochodu możesz użyć android skills add android-for-cars-parked-apps, aby dodać umiejętność do kontekstu agenta.
Teraz, niezależnie od tego, jaki jest Twój ulubiony agent AI, otrzymasz od niego szczegółowe instrukcje dotyczące konfigurowania pliku manifestu na potrzeby Androida Auto lub systemu operacyjnego Android Automotive, obsługi wstawek okien samochodowych i takich elementów jak przechodzenie wstecz, egzekwowanie ograniczeń odtwarzania związanych z rozpraszaniem uwagi kierowcy, a nawet sprawdzanie aplikacji wideo, gry lub przeglądarki przed przesłaniem ich do Google Play.
Tworzenie aplikacji na samochody jest też nieco wyjątkowe ze względu na kategorie aplikacji.
Jak już wspomnieliśmy, istnieją pewne kategorie aplikacji, których można używać podczas jazdy, oraz inne kategorie aplikacji, których można używać podczas postoju.
Wyróżnione kategorie to te, z których można korzystać podczas jazdy.
Niektóre z nich są oznaczone jako CAL, czyli Biblioteka aplikacji do samochodu. Aplikacje z tej kategorii używają szablonów takich jak te, które widzieliśmy przed chwilą.
Teraz szybko je omówię, ale nie będę wchodzić w szczegóły.
Zacznijmy od aplikacji do multimediów. Są to aplikacje, które odtwarzają dźwięk, a nie obraz.
Można je tworzyć na 2 sposoby.
Ta na górze, oznaczona jako MediaBrowserService, jest najprostszą opcją.
Dostarczasz metadane, a interfejs ekranu systemu multimedialnego w pełni dba o renderowanie odtwarzania i interfejsu przeglądarki multimediów w sposób zoptymalizowany pod kątem samochodów.
Inną opcją jest tworzenie aplikacji do multimediów za pomocą biblioteki aplikacji samochodowych, co daje większą kontrolę i więcej możliwości dostosowywania stylu i prezentacji aplikacji do multimediów. Thomas za chwilę opowie o tym więcej.
Aplikacje do nawigacji są oczywiście kluczowym przypadkiem użycia, ponieważ zapewniają trasy i szczegółowe wskazówki dojazdu.
Do tej kategorii należą też aplikacje dla kierowców oferujących przejazdy.
Aplikacje z ciekawymi miejscami pomagają znaleźć przydatne lokalizacje w pobliżu, takie jak ładowarki EV czy miejsca parkingowe.
Aplikacje Internetu rzeczy (IoT) umożliwiają dostęp do inteligentnych urządzeń, np. do zarządzania domem, z dowolnego miejsca.
Dostępne są też aplikacje pogodowe, które mogą m.in. wyświetlać radar w czasie rzeczywistym, ostrzeżenia o burzach i prognozy dla konkretnych lokalizacji.
Ostatnia kategoria, czyli komunikacja, dzieli się na 3 podkategorie: rozszerzanie podstawowych powiadomień na samochód, aplikacje do obsługi wiadomości i aplikacje do rozmów wideo.
Są też kategorie aplikacji, których można używać tylko podczas postoju: aplikacje do odtwarzania strumieniowego, gry i przeglądarki internetowe.
Z przyjemnością informuję, że od kilku tygodni wszyscy deweloperzy mogą publikować gry na Androida Auto i system operacyjny Android Automotive.
Niektóre z tych kategorii są oznaczone jako „Otwarte”, inne jako „W wersji beta”, a jeszcze inne jako „Już wkrótce”.
Otwarta oznacza, że każdy deweloper może przesłać aplikację z tej kategorii bezpośrednio do wersji produkcyjnej.
Wersja beta oznacza, że możesz publikować aplikację na ścieżkach wewnętrznych lub zamkniętych, ale nie możesz jej opublikować na ścieżce produkcyjnej, chyba że zostaniesz przyjęty(-a) do programu wcześniejszego dostępu.
Dokumentacja dotycząca każdej z tych kategorii zawiera więcej informacji oraz link do formularza zgłoszenia zainteresowania.
Kategoria „Już wkrótce” obejmuje kategorie, które obecnie nie są obsługiwane, ale planujemy je obsługiwać w przyszłości.
Zależy nam przede wszystkim na ujednoliceniu platformy.
Chcemy, aby deweloperzy mogli tworzyć aplikacje i uzyskiwać jak największy zasięg, pisząc kod raz i rozpowszechniając go zarówno na Androida Auto, jak i system operacyjny Android Automotive, niezależnie od kategorii.
Teraz Thomas opowie o mediach.
Pozdrawiam
Świetnie.
Dlatego w zeszłym roku wprowadziliśmy bibliotekę aplikacji samochodowych dla aplikacji do multimediów w wersji 1.8, dzięki czemu w Androidzie Auto pojawiły się interfejsy przeglądania oparte na szablonach i działania niestandardowe.
Obejmuje to szablon odtwarzania multimediów widoczny po lewej stronie.
W tym roku na konferencji I/O wprowadziliśmy więcej interfejsów użytkownika do przeglądania za pomocą biblioteki aplikacji samochodowych w wersji 1.9.
Wraz z wprowadzeniem wersji beta CAL 1.9 możesz teraz odblokować kluczowe aktualizacje funkcji w systemach Auto i Automotive OS.
Najważniejsze funkcje to m.in. dostosowywanie marki za pomocą ekspresji aplikacji, co pozwala na dostosowywanie tokenów kolorów i kształtów za pomocą układów renderowanych przez hosta przy zachowaniu zasad bezpieczeństwa, a także nowe komponenty interfejsu, takie jak sekcje wyróżnione, skondensowane elementy listy, przewijane elementy i stały miniodtwarzacz.
Ponadto CAL 1.9 rozszerza obsługę szablonów multimediów na AAOS, co zapewnia prawdziwe ujednolicenie platformy w obu ekosystemach.
Już wkrótce udostępnimy kolejną wersję Biblioteki aplikacji samochodowych: CAL w wersji 10.
Wersja 10 CAL będzie zawierać więcej szablonów niestandardowych aplikacji do komunikacji, co zapewni bardziej niezawodne i spersonalizowane funkcje połączeń podczas jazdy.
Dodajemy też nową kategorię aplikacji i szablonów aplikacji, które umożliwiają korzystanie z trybu konwersacyjnego podczas jazdy.
Pracujemy też nad kolejnymi funkcjami, które ułatwią płynne przechodzenie z trybu parkowania do trybu jazdy dzięki szablonom biblioteki aplikacji samochodowych.
Wkrótce podamy więcej informacji na ten temat.
Funkcje trybu postoju i jazdy dostępne w bibliotece aplikacji do samochodu umożliwiają aplikacji dynamiczne przełączanie trybów i wyświetlanie treści adaptacyjnych podczas postoju oraz płynne przełączanie z powrotem na szablony biblioteki aplikacji do samochodu podczas jazdy.
Kluczowe zastosowania obejmują oferowanie dostosowanych procesów uwierzytelniania, gdy pojazd jest zaparkowany, lub włączanie specjalnego trybu parkowania, np. do odtwarzania strumieniowego podcastów wideo lub klipów muzycznych.
Jest on bezpośrednio zintegrowany z szablonem odtwarzania multimediów.
Dlatego w zaparkowanych pojazdach kierowcy mają pełny dostęp do natywnej aktywności aplikacji na Androida, co umożliwia korzystanie z multimediów, takich jak strumieniowe przesyłanie filmów.
Gdy tylko samochód ruszy, włączają się zabezpieczenia przed rozpraszaniem uwagi, co powoduje, że aplikacja przełącza się z powrotem na szablon multimediów z biblioteki aplikacji do samochodu, aby zapewnić zgodne z zasadami i nieprzerwane odtwarzanie dźwięku.
Jesteśmy w przełomowym momencie, jeśli chodzi o wrażenia z jazdy samochodem.
Aplikacje do multimediów chcą wyjść poza tradycyjne interfejsy przeglądania i odtwarzania, aby zapewnić kierowcom i pasażerom bogatsze, bardziej wciągające i interaktywne wrażenia.
Teraz przyjrzymy się przykładowi, jak dodać aktywność wideo natywnego za pomocą biblioteki Media3, aby rozpocząć odtwarzanie, gdy samochód przejdzie w tryb parkowania.
Aby to zrobić, połącz powierzchnię renderowania wideo bezpośrednio z instancją odtwarzania w tle.
override fun onStart() {
super.onStart()
...
controllerFuture = MediaController.Builder(
this,
sessionToken
).buildAsync()
controllerFuture?.addListener({
mediaController = controllerFuture?.get()
playerView.player = mediaController
}, ContextCompat.getMainExecutor(this))
}Chcesz uniknąć tworzenia osobnego odtwarzacza multimediów w ramach tej aktywności, ale zamiast tego chcesz zachować centralny odtwarzacz ExoPlayer lub odtwarzacz multimediów w ramach usługi głównej, np. usługi biblioteki multimediów Media3, która obsługuje zarówno strumienie audio, jak i wideo.
Dlatego podczas jazdy, gdy nie jest powiązana żadna aktywna usługa, odtwarzacz dekoduje tylko dźwięk. Gdy jednak kierowca otworzy aktywność wideo po zaparkowaniu, możesz dołączyć powierzchnię renderowania bezpośrednio do odtwarzacza usługi.
Dzięki Media3 mediaController implementuje odtwarzacz natywnie, co umożliwia bezpośrednie przypisanie, jak widać tutaj: playerView ustawione-- playerView.player ustawione bezpośrednio na mediaController.
Następnie musisz zarejestrować natywny punkt wejścia za pomocą ParkedOnlyOnClickListener.
val watchVideoAction = Action.Builder()
.setTitle("Watch Video")
.setIcon(videoCarIcon)
.setOnClickListener(
ParkedOnlyOnClickListener.create {
val intent = Intent(
carContext,
VideoPlayerActivity::class.java
)
.apply {
addFlags(
Intent.FLAG_ACTIVITY_NEW_TASK
)
}
carContext.startActivity(intent)
})
.build()Ten kod zawiera aktywator intencji na pasku nagłówka interfejsu odtwarzania multimediów.
Dodajmy więc działanie, które uruchamia odtwarzanie filmu, i umieśćmy jego detektor wyboru w obiekcie ParkedOnlyOnClickListener.
W trybie prowadzenia samochodu te kliknięcia są przechwytywane przez aplikację hosta, która wyświetla komunikat systemowy dotyczący bezpieczeństwa. Nie możesz więc przejść do tego ekranu podczas jazdy, ale gdy zaparkujesz, wywołanie zwrotne aktywuje startActivity w carContext, aby uruchomić wyznaczoną aktywność na pełnym ekranie.
Pamiętaj, że w tych aplikacjach z biblioteki aplikacji do samochodu musisz oznaczyć cel filmu jako distractionOptimized=false w pliku manifestu, aby system operacyjny rozpoznał, że jest to przepływ pracy tylko podczas postoju.
<activity
android:name=".VideoPlayerActivity"
android:exported="false"
android:launchMode="singleTop">
<meta-data
android:name="distractionOptimized"
android:value="false" />
</activity>Na koniec zobaczmy, co się stanie, gdy kierowca zmieni tryb parkowania na tryb jazdy.
Jeśli aktywność nie jest zoptymalizowana pod kątem minimalizacji liczby elementów rozpraszających uwagę i pozostaje aktywna podczas jazdy, AAOS wyświetla systemową nakładkę blokującą, która informuje, że aby dalej korzystać z aplikacji, trzeba zaparkować.
Aby uniknąć tego zablokowanego ekranu, chcemy płynnie wrócić do szablonu odtwarzania multimediów bez przerywania dźwięku.
Gdy isRequiresDistractionOptimization ma wartość „true”, czyścimy powierzchnię renderowania filmu z podstawowej sesji multimedialnej i wywołujemy zakończenie aktywności w Google Play, ponieważ została ona uruchomiona na podstawie CAL. Zakończenie powoduje bezpośredni powrót do szablonu odtwarzania multimediów i kontynuowanie odtwarzania dźwięku.
class VideoPlayerActivity : ComponentActivity(){
override fun onStart() {
…
if (uxRestrictionsManager?
.currentCarUxRestrictions?
.isRequiresDistractionOptimization
== true) {
revertToCarAppTemplate()
}
}
private fun revertToCarAppTemplate() {
mediaControllerCompat
.sendCommand("CMD_CLEAR_VIDEO_SURFACE",
null, null)
finish()
}
}Utrzymanie nieprzerwanego odtwarzania dźwięku jest kluczowe dla wygody użytkowników, dlatego utrzymanie aktywnej sesji multimedialnej jako usługi na pierwszym planie pozwala na płynne odtwarzanie dźwięku podczas zmian stanu.
<activity
android:name="androidx.car.app.activity.CarAppActivity"
android:exported="true"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="androidx.car.app.media.action.SHOW_MEDIA_PLAYBACK" />
</intent-filter>
<meta-data
android:name="distractionOptimized"
android:value="true" />
</activity>Należy też zastąpić onNewIntent na ekranie CAL, aby przechwytywać intencje SHOW_MEDIA_PLAYBACK.
class MyCarAppSession : Session() {
override fun onCreateScreen(intent: Intent): Screen {
// 1. Link your active MediaSession token with Car App Library's MediaPlaybackManager
val mediaPlaybackManager = carContext.getCarService(MediaPlaybackManager::class.java)
mediaPlaybackManager.registerMediaPlaybackToken(mediaSessionToken)
// 2. Handle deep link if cold-started from the vehicle's media widget
handlePlaybackIntent(intent)
return HomeScreen(carContext)
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
// 3. Handle deep link when the session is already running
handlePlaybackIntent(intent)
}
}Dzięki temu za każdym razem, gdy użytkownicy wejdą w interakcję z widżetem multimedialnym systemu pojazdu, który znajduje się na ekranie głównym samochodu, precyzyjny link przekieruje ich bezpośrednio do widoku „Co jest grane” w bibliotece aplikacji samochodowych.
Dzięki temu sprawdzanie tych przejść podczas procesu tworzenia jest bardzo proste.
W AAOS możesz wykonywać polecenia adb.
W tym przypadku będzie to emulate-driving-state drive lub emulate-driving-state park, gdy zechcesz przełączyć się z powrotem między aktywnościami.
Oto przykład użycia naszej nowej przykładowej aplikacji do multimediów Media3, która korzysta z biblioteki aplikacji do samochodu i umożliwia odtwarzanie filmów po zaparkowaniu.
Zapraszamy do odwiedzenia naszego stoiska z adaptacyjnym Androidem na dole i do zapoznania się z przykładowymi aplikacjami na samochody na GitHubie.
Funkcje parkowania i jazdy są obecnie dostępne w systemie operacyjnym Android Automotive w przypadku aplikacji do multimediów, które zostały już zintegrowane z biblioteką CAL, aby zapewnić lepsze wrażenia podczas jazdy. Teraz mogą one oferować bardziej rozbudowane funkcje podczas parkowania.
Wkrótce znajdziesz więcej informacji na ten temat w naszej dokumentacji na stronie developer.android.com. Tam też możesz wyrazić zainteresowanie tą funkcją w swojej aplikacji.
Paul.
Świetnie.
Dziękuję, Thomas.
Zanim zakończymy, chcę przedstawić kilka sposobów, dzięki którym możecie dowiedzieć się więcej o tym, co planujemy na ten rok.
Jak wspomniał Thomas, CAL 1.9 jest obecnie w wersji alfa.
Wkrótce udostępnimy ją w wersji beta.
Przed końcem roku CAL 1.10 wejdzie w fazę alfa, dzięki czemu będzie można zacząć oceniać interfejsy konwersacyjne oraz najnowsze funkcje komunikacji i parkowania.
Na koniec chcemy poinformować, że gry są dostępne na Androidzie Auto i systemie operacyjnym Android Automotive, więc to idealny moment na optymalizację gier pod kątem samochodów.
Więcej informacji o implementacji znajdziesz w przewodniku „Tworzenie gier na samochody”.
Więcej informacji o tym, jak dostosować gry do samochodów, oraz o innych nowościach i zmianach w Androidzie do samochodu znajdziesz na stronie „Nowości”.
Mamy nadzieję, że udało nam się pokazać, że samochody i ich użytkownicy są gotowi na Twoje aplikacje.
Możesz wykorzystać istniejące aplikacje adaptacyjne, aby zapewnić bogate wrażenia podczas postoju, i użyć różnych szablonów z biblioteki aplikacji do samochodu, aby stworzyć bezpieczne środowisko zoptymalizowane pod kątem jazdy.
Przed opublikowaniem możesz dokładnie przetestować aplikację za pomocą jednostki głównej na komputerze, emulatorów, systemu AAOS na urządzeniu Pixel Tablet lub Laboratorium Firebase.
Masz już umiejętności, które pozwolą Ci tworzyć aplikacje na ten ekosystem, a miliony samochodów czekają na Twoje aplikacje, więc zacznijmy je tworzyć.
android skills list
android skills add android-for-cars-parked-appsoverride fun onStart() {
super.onStart()
...
controllerFuture = MediaController.Builder(
this,
sessionToken
).buildAsync()
controllerFuture?.addListener({
mediaController = controllerFuture?.get()
playerView.player = mediaController
}, ContextCompat.getMainExecutor(this))
}val watchVideoAction = Action.Builder()
.setTitle("Watch Video")
.setIcon(videoCarIcon)
.setOnClickListener(
ParkedOnlyOnClickListener.create {
val intent = Intent(
carContext,
VideoPlayerActivity::class.java
)
.apply {
addFlags(
Intent.FLAG_ACTIVITY_NEW_TASK
)
}
carContext.startActivity(intent)
})
.build()<activity
android:name=".VideoPlayerActivity"
android:exported="false"
android:launchMode="singleTop">
<meta-data
android:name="distractionOptimized"
android:value="false" />
</activity>class VideoPlayerActivity : ComponentActivity(){
override fun onStart() {
…
if (uxRestrictionsManager?
.currentCarUxRestrictions?
.isRequiresDistractionOptimization
== true) {
revertToCarAppTemplate()
}
}
private fun revertToCarAppTemplate() {
mediaControllerCompat
.sendCommand("CMD_CLEAR_VIDEO_SURFACE",
null, null)
finish()
}
}<activity
android:name="androidx.car.app.activity.CarAppActivity"
android:exported="true"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="androidx.car.app.media.action.SHOW_MEDIA_PLAYBACK" />
</intent-filter>
<meta-data
android:name="distractionOptimized"
android:value="true" />
</activity>class MyCarAppSession : Session() {
override fun onCreateScreen(intent: Intent): Screen {
// 1. Link your active MediaSession token with Car App Library's MediaPlaybackManager
val mediaPlaybackManager = carContext.getCarService(MediaPlaybackManager::class.java)
mediaPlaybackManager.registerMediaPlaybackToken(mediaSessionToken)
// 2. Handle deep link if cold-started from the vehicle's media widget
handlePlaybackIntent(intent)
return HomeScreen(carContext)
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
// 3. Handle deep link when the session is already running
handlePlaybackIntent(intent)
}
}