Android Automotive OS, kullanıcıların arabaya uygulama yüklemesine olanak tanır. Bu platformda kullanıcılara ulaşabilmek için Android Automotive OS ile uyumlu ve sürücüye göre optimize edilmiş uygulamalar dağıtmanız gerekir. Android Auto uygulamanızda hemen hemen tüm kod ve kaynakları yeniden kullanabilirsiniz. Ancak bu sayfadaki şartları karşılayan ayrı bir derleme oluşturmanız gerekir.
Geliştirmeye genel bakış
Android Automotive OS desteği eklemek için aşağıdaki bölümlerde açıklandığı gibi yalnızca birkaç adım uygulamanız gerekir:
- Android Studio'da otomotiv özelliklerini etkinleştirme.
- Otomotiv modülü oluşturun.
- Gradle bağımlılıkları güncelleyin.
- İsteğe bağlı olarak Ayarları ve oturum açma etkinliklerini uygulayın.
- İsteğe bağlı olarak Medya barındırıcı ipuçları'nı okuyun.
Tasarımla ilgili dikkat edilmesi gereken noktalar
Android Automotive OS, uygulamanızın medya tarayıcısı hizmetinden aldığı medya içeriğini yerleştirir. Bu, kullanıcı medya oynatmayı tetiklediğinde uygulamanızın kullanıcı arayüzünü çizmediği ve etkinliklerinizin hiçbirini başlatmadığı anlamına gelir.
Ayarlar veya oturum açma etkinlikleri uyguluyorsanız bu etkinlikler araç için optimize edilmiş olmalıdır. Uygulamanızın bu alanlarını tasarlarken Android Automotive OS için Tasarım yönergeleri'ne bakın.
Projenizi oluşturma
Android Automotive OS desteğini etkinleştirmek için uygulamanızın projesinin birkaç bölümünü ayarlamanız gerekir.
Android Studio'da otomotiv özelliklerini etkinleştirme
Tüm Automotive OS özelliklerinin etkinleştirildiğinden emin olmak için Android Studio 4.0 veya sonraki bir sürümü kullanın.
Otomotiv modülü oluşturma
Android Automotive OS'in manifest gibi bazı bileşenleri platforma özgü gereksinimlere sahiptir. Bu bileşenlerin kodunu, telefon uygulamanız için kullanılan kod gibi projenizdeki diğer kodlardan ayrı tutabilecek bir modül oluşturun.
Projenize otomotiv modülü eklemek için aşağıdaki adımları uygulayın:
- Android Studio'da Dosya > Yeni > Yeni Modül'ü tıklayın.
- Otomotiv Modülü'nü seçin ve İleri'yi tıklayın.
- Bir uygulama/kitaplık adı girin. Bu, Android Automotive OS'te kullanıcıların uygulamanız için gördüğü addır.
- Bir modül adı girin.
- Paket adını uygulamanızla eşleşecek şekilde ayarlayın.
Minimum SDK için API 28: Android 9.0 (Pie)'i seçin ve ardından İleri'yi tıklayın.
Android Automotive OS'i destekleyen tüm araçlar Android 9 (API seviyesi 28) veya sonraki sürümleri çalıştırır. Bu nedenle, bu değeri seçtiğinizde uyumlu tüm araçlar hedeflenir.
Etkinlik yok'u seçin ve ardından Son'u tıklayın.
Android Studio'da modülünüzü oluşturduktan sonra yeni otomotiv modülünüzde AndroidManifest.xml
'yi açın:
<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
öğesinde bazı standart uygulama bilgilerinin yanı sıra Android Automotive OS desteğini beyan eden bir uses-feature
öğesi bulunur. Manifest dosyasında beyan edilen etkinlik olmadığını unutmayın.
Ayarlar veya oturum açma etkinlikleri uygularsanız bunları buraya ekleyin. Bu etkinlikler, sistem tarafından açık intent'ler kullanılarak tetiklenir ve Android Automotive OS uygulamanız için manifest dosyasında tanımladığınız tek etkinliklerdir.
Herhangi bir ayar veya oturum açma etkinliği ekledikten sonra application
öğesinde android:appCategory="audio"
özelliğini ayarlayarak ve aşağıdaki uses-feature
öğelerini ekleyerek manifest dosyanızı tamamlayın:
<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>
Bu özellikleri açıkça required="false"
olarak ayarlamak, uygulamanızın Automotive OS cihazlardaki mevcut donanım özellikleriyle çakışmasını önler.
Android Automotive OS için medya desteği beyan etme
Uygulamanızın Android Automotive OS'i desteklediğini beyan etmek için aşağıdaki manifest girişini kullanın:
<application>
...
<meta-data android:name="com.android.automotive"
android:resource="@xml/automotive_app_desc"/>
...
</application>
Bu manifest girişi, uygulamanızın desteklediği otomotiv özelliklerini açıklayan bir XML dosyasını ifade eder.
Medya uygulamanız olduğunu belirtmek için projenizdeki res/xml/
dizinine automotive_app_desc.xml
adlı bir XML dosyası ekleyin. Bu dosyaya aşağıdaki içeriği ekleyin:
<automotiveApp>
<uses name="media"/>
</automotiveApp>
Niyet filtreleri
Android Automotive OS, medya uygulamanızdaki etkinlikleri tetiklemek için açık intent'leri kullanır. Manifest dosyasına CATEGORY_LAUNCHER
veya ACTION_MAIN
intent filtresi içeren etkinlikler eklemeyin.
Aşağıdaki örnekteki gibi etkinlikler genellikle bir telefonu veya başka bir mobil cihazı hedefler. Bu etkinlikleri, Android Automotive OS uygulamanızı oluşturan modülde değil, telefon uygulamasını oluşturan modülde beyan edin.
<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>
Gradle bağımlılıkları güncelleme
Medya tarayıcısı hizmetinizi, telefon uygulamanız ile otomotiv modülünüz arasında paylaştığınız ayrı bir modülde tutmanızı öneririz. Bu yaklaşımı kullanıyorsanız otomotiv modülünüzü, aşağıdaki snippet'te gösterildiği gibi paylaşılan modülü içerecek şekilde güncellemeniz gerekir:
Groovy
buildscript { ... dependencies { ... implementation project(':shared_module_name') } }
Kotlin
buildscript { ... dependencies { ... implementation(project(":shared_module_name")) } }
Ayarları ve oturum açma etkinliklerini uygulama
Medya tarayıcısı hizmetinize ek olarak, Android Automotive OS uygulamanız için araca özel ayarlar ve oturum açma etkinlikleri de sağlayabilirsiniz. Bu etkinlikler, Android Media API'lerine dahil olmayan uygulama işlevleri sunmanıza olanak tanır.
Bu etkinlikleri yalnızca Android Automotive OS uygulamanızın kullanıcıların oturum açmasına veya uygulama ayarlarını belirtmesine izin vermesi gerekiyorsa uygulayın. Bu etkinlikler Android Auto tarafından kullanılmaz.
Etkinlik iş akışları
Aşağıdaki şemada, kullanıcının Android Automotive OS'i kullanarak ayarlarınızla ve oturum açma etkinliklerinizle nasıl etkileşimde bulunduğu gösterilmektedir:
Ayarlarınızda ve oturum açma etkinliklerinizde dikkat dağıtıcı unsurları engelleme
Ayarlarınızın ve/veya oturum açma etkinliklerinizin yalnızca kullanıcının aracı park halindeyken kullanılabilmesini sağlamak için <activity>
öğelerinin aşağıdaki <meta-data>
öğesini içermediğini doğrulayın. Bu tür bir öğe varsa uygulamanız inceleme sırasında reddedilir.
<!-- NOT ALLOWED -->
<meta-data
android:name="distractionOptimized"
android:value="true"/>
Ayar etkinliği ekleme
Kullanıcıların arabalarında uygulamanızın ayarlarını yapılandırabilmesi için araca özelleştirilmiş bir ayar etkinliği ekleyebilirsiniz. Ayarlar etkinliğiniz, kullanıcı hesabında oturum açma veya kapatma ya da kullanıcı hesapları arasında geçiş yapma gibi başka iş akışları da sağlayabilir. Bu etkinliğin yalnızca Android Automotive OS'te çalışan bir uygulama tarafından tetiklendiğini unutmayın. Android Auto'ya bağlı telefon uygulamaları bu özelliği kullanmaz.
Ayarlar etkinliği beyan etme
Ayar etkinliğinizi, aşağıdaki kod snippet'inde gösterildiği gibi uygulamanızın manifest dosyasında beyan etmeniz gerekir:
<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>
Ayarlarınızı uygulama etkinliğinizi uygulama
Bir kullanıcı uygulamanızı başlattığında Android Automotive OS, beyan ettiğiniz ayarlar etkinliğini algılar ve bir simge gibi bir imkanı görüntüler.
Kullanıcı, etkinliğe gitmek için aracının ekranını kullanarak bu olanağa dokunabilir veya bu olanağı seçebilir. Android Automotive OS, uygulamanıza ayarlar etkinliğinizi başlatmasını söyleyen ACTION_APPLICATION_PREFERENCES
intent'ini gönderir.
Bu bölümün geri kalanında, uygulamanız için bir ayarlar etkinliği uygulamak üzere Universal Android Music Player (UAMP) örnek uygulamasındaki kodu nasıl uyarlayabileceğiniz gösterilmektedir.
Başlamak için örnek kodu indirin:
# 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
Etkinliğinizi uygulamak için aşağıdaki adımları uygulayın:
automotive/automotive-lib
klasörünü otomotiv modülünüze kopyalayın.automotive/src/main/res/xml/preferences.xml
'te gösterildiği gibi bir tercih ağacı tanımlayın.Ayarlarınızın gösterildiği bir
PreferenceFragmentCompat
uygulayın. Daha fazla bilgi için UAMP'dekiSettingsFragment.kt
veSettingsActivity.kt
dosyalarına ve Android Ayarları kılavuzuna bakın.
Ayar etkinliğinizi uygularken tercih kitaplığındaki bazı bileşenleri kullanmayla ilgili aşağıdaki en iyi uygulamaları göz önünde bulundurun:
- Ayarlar etkinliğinizde ana görünümün altında en fazla iki düzey derinlik olmalıdır.
DropDownPreference
kullanmayın. Bunun yerineListPreference
kullanın.- Kuruluş bileşenleri:
PreferenceScreen
- Bu, tercihler ağacınızın üst düzeyi olmalıdır.
PreferenceCategory
Preference
nesnelerini gruplandırmak için kullanılır.title
ekleyin.
- Aşağıdaki tüm bileşenlere bir
key
vetitle
ekleyin. Ayrıcasummary
,icon
veya her ikisini de ekleyebilirsiniz:Preference
PreferenceFragmentCompat
uygulamanızınonPreferenceTreeClick()
geri çağırma işlevindeki mantığı özelleştirin.
CheckBoxPreference
- Koşullu metin için
summary
yerinesummaryOn
veyasummaryOff
olabilir.
- Koşullu metin için
SwitchPreference
- Koşullu metin için
summary
yerinesummaryOn
veyasummaryOff
olabilir. switchTextOn
veyaswitchTextOff
olabilir.
- Koşullu metin için
SeekBarPreference
min
,max
vedefaultValue
ekleyin.
EditTextPreference
dialogTitle
,positiveButtonText
venegativeButtonText
öğelerini dahil edin.dialogMessage
ve/veyadialogLayoutResource
içerebilir.
com.example.android.uamp.automotive.lib.ListPreference
- Çoğunlukla
ListPreference
'ten türetilir. Preference
nesnelerinin tek seçimli listesini görüntülemek için kullanılır.entries
dizisi ve ilgilientryValues
olmalıdır.
- Çoğunlukla
com.example.android.uamp.automotive.lib.MultiSelectListPreference
- Çoğunlukla
MultiSelectListPreference
kaynağından türetilir. Preference
nesnelerinin çoklu seçim listesini görüntülemek için kullanılır.entries
dizisi ve ilgilientryValues
olmalıdır.
- Çoğunlukla
Oturum açma etkinliği ekleme
Uygulamanızı kullanabilmek için kullanıcıların oturum açması gerekiyorsa uygulamanızda oturum açma ve oturumu kapatma işlemlerini yöneten, araçlara yönelik bir oturum açma etkinliği ekleyebilirsiniz. Oturum açma ve oturumu kapatma iş akışlarını bir ayarlar etkinliğine de ekleyebilirsiniz ancak kullanıcı oturum açana kadar uygulamanız kullanılamıyorsa özel bir oturum açma etkinliği kullanın. Bu etkinliğin yalnızca Android Automotive OS'te çalışan bir uygulama tarafından tetiklendiğini unutmayın. Android Auto'ya bağlı telefon uygulamaları bu özelliği kullanmaz.
Uygulamanın başlatılmasında oturum açmayı zorunlu kılma
Kullanıcıların uygulamanızı kullanabilmeleri için oturum açmalarını zorunlu kılmak istiyorsanız medya tarayıcısı hizmetinizin aşağıdakileri yapması gerekir:
- Hizmetinizin
onLoadChildren()
yönteminde,sendResult()
yöntemini kullanaraknull
sonucunu gönderin. setState()
yöntemini kullanarak medya oturumununPlaybackStateCompat
değeriniSTATE_ERROR
olarak ayarlayın. Bu, Android Automotive OS'e hata çözülene kadar başka işlem yapılamayacağını bildirir.- Medya oturumunun
PlaybackStateCompat
hata kodunuERROR_CODE_AUTHENTICATION_EXPIRED
olarak ayarlayın. Bu, Android Automotive OS'e kullanıcının kimlik doğrulaması yapması gerektiğini bildirir. setErrorMessage()
yöntemini kullanarak medya oturumununPlaybackStateCompat
hata mesajını ayarlayın. Bu hata mesajı kullanıcıya yönelik olduğundan, kullanıcının mevcut yerel diline göre yerelleştirin.setExtras()
yöntemini kullanarak medya oturumununPlaybackStateCompat
ek özelliklerini ayarlayın. Aşağıdaki iki anahtarı ekleyin:PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL
: Giriş iş akışını başlatan düğmede görüntülenen bir dize. Bu dize kullanıcıya yönelik olduğundan kullanıcının geçerli yerel diline göre yerelleştirin.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT
: Kullanıcı,PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL
tarafından belirtilen düğmeye dokunduğunda kullanıcıyı oturum açma etkinliğinize yönlendiren birPendingIntent
.
Aşağıdaki kod snippet'inde, uygulamanızın kullanıcıdan uygulamanızı kullanmadan önce oturum açmasını nasıl isteyebileceği gösterilmektedir:
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);
Kullanıcının kimliği başarıyla doğrulandıktan sonra PlaybackStateCompat
değerini STATE_ERROR
dışında bir değere ayarlayın, ardından etkinliğin finish()
yöntemini çağırarak kullanıcıyı Android Automotive OS'e geri götürün.
Oturum açma etkinliğinizi uygulama
Google, kullanıcıların arabalarında uygulamanızda oturum açmasına yardımcı olmak için kullanabileceğiniz çeşitli kimlik araçları sunar. Firebase Authentication gibi bazı araçlar, özelleştirilmiş kimlik doğrulama deneyimleri oluşturmanıza yardımcı olabilecek tam yığın araç setleri sağlar. Diğer araçlar, kullanıcılar için sorunsuz oturum açma deneyimleri oluşturmanıza yardımcı olmak amacıyla kullanıcının mevcut kimlik bilgilerinden veya diğer teknolojilerden yararlanır.
Aşağıdaki araçlar, daha önce başka bir cihazda oturum açmış kullanıcılar için daha kolay bir oturum açma deneyimi oluşturmanıza yardımcı olabilir:
- One Tap ile Oturum Açma ve Kaydolma: Telefon uygulamanız gibi diğer cihazlar için One Tap'ı zaten uyguladıysanız mevcut One Tap kullanıcılarını desteklemek için Android Automotive OS uygulamanız için de uygulayın.
- Google ile oturum açma: Telefon uygulamanız gibi diğer cihazlar için Google ile oturum açma özelliğini zaten uyguladıysanız mevcut Google ile oturum açma kullanıcılarını desteklemek için Android Automotive OS uygulamanız için Google ile oturum açma özelliğini uygulayın.
- Google ile otomatik doldurma: Kullanıcılar diğer Android cihazlarında Google ile otomatik doldurma özelliğini etkinleştirdiyse kimlik bilgileri Google Şifre Yöneticisi'ne kaydedilir. Bu kullanıcılar Android Automotive OS uygulamanızda oturum açtığında Google ile Otomatik Doldurma, ilgili kayıtlı kimlik bilgilerini önerir. Google ile Otomatik Doldurma özelliğini kullanmak için uygulama geliştirme çalışması gerekmez. Ancak uygulama geliştiriciler uygulamaları için daha kaliteli sonuçlar elde edecek şekilde optimizasyon yapabilir. Google ile otomatik doldurma özelliği, Android Automotive OS dahil olmak üzere Android 8.0 (API düzeyi 26) veya sonraki sürümleri çalıştıran tüm cihazlarda desteklenir.
AccountManager'ı kullanma
Kimlik doğrulaması olan Android Automotive OS uygulamaları, aşağıdaki nedenlerle AccountManager'ı kullanmalıdır:
- Daha iyi kullanıcı deneyimi ve hesap yönetimi kolaylığı: Kullanıcılar, oturum açma ve oturum kapatma dahil olmak üzere tüm hesaplarını sistem ayarlarındaki hesap menüsünden kolayca yönetebilir.
- "Konuk" deneyimleri: Arabalar paylaşılan cihazlardır. Bu nedenle OEM'ler, hesap eklenemeyecek şekilde araçta "konuk" deneyimleri etkinleştirebilir. Bu kısıtlama,
AccountManager
içinDISALLOW_MODIFY_ACCOUNTS
kullanılarak elde edilir.
İzinler
Kullanıcıdan izin istemeniz gerekiyorsa önceki bölümde gösterilen etkinlik iş akışları şemasında kimlik doğrulama etkinliği veya ayarlar etkinliği ile aynı akışı kullanın.
Medya barındırma ipuçlarını okuma
Medya tarayıcısı hizmetinize bağlanan sistem uygulamasına (sürümü dahil) bağlı olarak uygulamanız aşağıdaki ek bilgileri alabilir:
MediaBrowserServiceCompat#onGetRoot
bölgesinde:MediaBrowserServiceCompat#onLoadChildren
veMediaBrowserServiceCompat#onSearch
bölgelerinde:
Hata İşleme
Android Automotive OS'teki medya uygulamalarındaki hatalar, medya oturumunun PlaybackStateCompat
aracılığıyla iletilir. Tüm hatalar için PlaybackStateCompat
içinde uygun bir hata kodu ve hata mesajı ayarlayın. Bu durum, kullanıcı arayüzünde bir Toast
görünmesine neden olur.
Hata oluştuğunda ancak oynatma devam edebiliyorsa önemli olmayan bir hata gönderin. Örneğin, bir kullanıcı oturum açmadan önce uygulamada müzik çalabilir ancak şarkı atlamak için oturum açması gerekir. Ölümcül olmayan bir hata kullandığınızda sistem, kullanıcının mevcut medya öğesinin oynatılmasını kesintiye uğratmadan giriş yapmasını önerebilir.
Önemli olmayan bir hata gönderdiğinizde, hata kodu ve hata mesajı dışındaki PlaybackStateCompat
'ün geri kalanını olduğu gibi koruyun. Bu yaklaşım, kullanıcı oturum açıp açmayacağına karar verirken mevcut medya öğesinin oynatılmasının devam etmesini sağlar.
İnternet bağlantısı olmadığında ve çevrimdışı içerik olmadığında oynatma mümkün olmadığında PlaybackStateCompat
durumunu STATE_ERROR
olarak ayarlayın.
PlaybackStateCompat
'ünüzde yapılan sonraki güncellemelerde, aynı hata için birden fazla uyarı gösterilmesini önlemek amacıyla tüm hata kodlarını ve hata mesajlarını temizleyin.
Herhangi bir noktada bir göz atma ağacı yükleyemezseniz (ör. kimlik doğrulama gerekiyorsa ve kullanıcı oturum açmadıysa) boş bir göz atma ağacı gönderin. Bunu belirtmek için kök medya düğümü için onLoadChildren()
kaynağından null sonuç döndürün. Bu durumda sistem, PlaybackStateCompat
'te ayarlanan hata mesajını içeren tam ekran bir hata gösterir.
Eyleme dönüştürülebilir hatalar
Bir hata düzeltilebilir durumdaysa PlaybackStateCompat
bölümünde aşağıdaki iki ek ayarı da yapın:
PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL
: Hatayı çözmek için tıklanacak düğmenin etiketi. Bu dize kullanıcıya yönelik olduğundan kullanıcının mevcut yerel diline göre yerelleştirin.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT
: düğmenin hatayı çözmek için çalıştırdığıPendingIntent
(ör. oturum açma etkinliğinizi başlatarak).
Düzeltilebilir hatalar Dialog
olarak görünür ve yalnızca araç durdurulduğunda kullanıcılar tarafından çözülebilir.
Hata örneklerini test etme
Uygulamanızın aşağıdakiler de dahil olmak üzere tüm senaryolarda hataları sorunsuz bir şekilde ele aldığını doğrulayın:
- Ürününüzün farklı katmanları: Örneğin, ücretsiz ve premium veya oturum açmış ve oturum kapatmış
- Farklı sürüş durumları: Örneğin, park edilmiş ve sürüş sırasında
- Farklı bağlantı durumları: Örneğin, online ve çevrimdışı
Dikkat edilmesi gereken diğer noktalar
Android Automotive OS uygulamanızı geliştirirken aşağıdaki hususları da göz önünde bulundurun:
Çevrimdışı içerik
Mümkünse çevrimdışı oynatma desteğini uygulayın. Android Automotive OS'in kullanıldığı araçların kendi veri bağlantısına sahip olması beklenir. Yani veri planı aracın maliyetine dahildir veya kullanıcı tarafından ödenir. Ancak arabaların mobil cihazlardan daha değişken bir bağlantıya sahip olması da bekleniyor.
Çevrimdışı destek stratejinizi belirlerken göz önünde bulundurmanız gereken birkaç nokta aşağıda verilmiştir:
- İçerik indirmek için en uygun zaman, uygulamanız kullanımdaykendir.
- Kablosuz bağlantının kullanılabileceğini varsaymayın. Araç hiçbir zaman kablosuz aralığa giremeyebilir veya OEM, hücresel ağ için kablosuz bağlantıyı devre dışı bırakmış olabilir.
- Kullanıcıların kullanmasını beklediğiniz içeriği akıllıca önbelleğe almak sorun olmasa da kullanıcının ayarlar etkinliğiniz aracılığıyla bu davranışı değiştirmesine izin vermenizi öneririz.
- Arabalardaki disk alanı değişiklik gösterir. Bu nedenle, kullanıcılara çevrimdışı içerikleri silmeleri için bir yol sunun (ör. ayarlar etkinliğinizdeki bir seçenek aracılığıyla).
WebView desteği
WebView'ler Android Automotive OS'te desteklenir ancak yalnızca ayarlarınız ve oturum açma etkinlikleriniz için izin verilir. WebView kullanan etkinliklerde, WebView'in dışında bir "kapat" veya "geri" olanağı bulunmalıdır.
Web Görünümü'nün kabul edilebilir kullanım alanlarına örnek olarak şunlar verilebilir:
- Gizlilik politikanızı, hizmet şartlarınızı veya yasal konularla ilgili diğer bağlantıları ayarlarınız etkinliğinde gösterme
- Oturum açma etkinliğinizde web tabanlı bir akış.
WebView kullanırken JavaScript'i etkinleştirebilirsiniz.
WebView'inizin güvenliğini sağlama
Web Görünümü'nüzün daha geniş internete giriş noktası olmaması için mümkün olan tüm önlemleri alın. WebView'in loadUrl()
çağrısında kullanılan URL'ye nasıl kilitleneceği ve yönlendirmelerin nasıl önleneceğiyle ilgili örnek için aşağıdaki kod snippet'ine bakın. Mümkün olduğunda (ör. yasal konularla ilgili bağlantılar gösterirken) bu tür önlemleri uygulamanızı önemle tavsiye ederiz.
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; }
Paket adları
Android Automotive OS için ayrı bir Android Paketi Kiti (APK) dağıttığınızdan mobil uygulamanızdaki paket adını yeniden kullanabilir veya yeni bir paket adı oluşturabilirsiniz. Farklı bir paket adı kullanıyorsanız uygulamanızın iki ayrı Play Store girişi vardır. Mevcut paket adınızı yeniden kullanırsanız uygulamanız her iki platformda da tek bir girişe sahip olur.
Bu, esas olarak işletmeyle ilgili bir karardır. Örneğin, mobil uygulama üzerinde çalışan bir ekibiniz ve Android Automotive OS uygulamanız üzerinde çalışan ayrı bir ekibiniz varsa ayrı paket adları kullanmak ve her ekibin kendi Play Store girişini yönetmesine izin vermek mantıklı olabilir. Her iki yaklaşımı kullanmak için gereken teknik çaba arasında büyük bir fark yoktur.
Aşağıdaki tabloda, mevcut paket adınızı kullanmaya devam etmek ile yeni bir paket adı kullanmak arasındaki diğer bazı temel farklılıklar özetlenmektedir:
Özellik | Aynı paket adı | Yeni paket adı |
---|---|---|
Mağaza girişi | Tek | Birden çok |
Yansıtılmış yükleme | Evet: Kurulum sihirbazı sırasında "hızlı uygulama yeniden yükleme" | Hayır |
Play Store inceleme süreci | İncelemeleri engelleme: Bir APK'nın incelemesi başarısız olursa aynı sürümde gönderilen diğer APK'lar engellenir | Bağımsız yorumlar |
İstatistikler, metrikler ve önemli metrikler | Birleştirilmiş: Otomotiv sektörüne özgü verileri filtreleyebilirsiniz. | Ayır |
Dizine ekleme ve arama sıralaması | Mevcut konumdan yararlanma | Aktarma yapılamaz. |
Diğer uygulamalarla entegrasyon | Medya kodunun her iki APK arasında paylaşıldığı varsayıldığında büyük olasılıkla değişiklik gerekmez. | İlgili uygulamayı (ör. Google Asistan ile URI oynatma) güncellemeniz gerekebilir. |
Sık sorulan sorular
Android Automotive OS hakkında sık sorulan bazı soruların yanıtlarını aşağıdaki bölümlerde bulabilirsiniz.
Donanım
Uygulamam mikrofona erişebilir mi?
Android 10 (API düzeyi 29) veya sonraki sürümleri hedefleyen uygulamalar için ses girişini paylaşma belgelerine bakın. Bu, API düzeyi 29'dan önce mümkün değildir.
Hangi araç API'lerine nasıl erişebiliriz?
OEM tarafından sunulan API'lerle sınırlısınız. Bu API'lere erişim şeklinizi standartlaştırmak için süreçler geliştirilmektedir.
Uygulamalar, CarPropertyManager
içinde SetProperty()
ve GetProperty()
öğelerini kullanarak araba API'lerine erişebilir.
Mevcut tüm özelliklerin listesini görmek için kaynak koda veya referans dokümanlarına bakın. Mülk, @SystemApi
ile notlandırılmışsa önceden yüklenmiş sistem uygulamalarıyla sınırlıdır.
Hangi ses codec'leri desteklenir?
Android CDD'deki ses codec'i ayrıntılarına bakın.
Widevine DRM destekleniyor mu?
Evet. Widevine DRM desteklenir.
Geliştirme ve test
Üçüncü taraf SDK'ları ve kitaplıklarını kullanmayla ilgili herhangi bir kısıtlama veya öneri var mı?
Üçüncü taraf SDK'ları ve kitaplıklarının kullanımıyla ilgili özel yönergelerimiz yoktur. Üçüncü taraf SDK'ları ve kitaplıklarını kullanmayı seçseniz bile tüm araç uygulaması kalite koşullarına uymaktan sorumlusunuz.
Ön plan hizmeti kullanabilir miyim?
Ön plan hizmetlerinin yalnızca çevrimdışı kullanım için içerik indirme amacıyla kullanılmasına izin verilir. Desteklenmesini istediğiniz başka bir ön plan hizmeti kullanım alanı varsa Android Automotive OS tartışma grubunu kullanarak bizimle iletişime geçin.
Android Automotive OS uygulamalarını yayınlama
Android Automotive OS uygulamamı Google Play Console'u kullanarak nasıl yayınlayabilirim?
Android Automotive OS uygulamanızı Google Play Console'u kullanarak yayınlama hakkında ayrıntılı bilgi için Arabalara dağıtma başlıklı makaleyi inceleyin.
Ek kaynaklar
Android Automotive OS hakkında daha fazla bilgi edinmek için aşağıdaki ek kaynaklara bakın.
Örnekler
Kılavuzlar
- Design for Driving
- Medya denetleyici test uygulamasını kullanma
- Android Automotive OS'te bildirimler
- Arabalar için Android uygulama kalitesi
Bloglar
- Geliştiriciler için Android Automotive OS güncellemeleri
- Android Automotive OS için uygulama geliştirme
Videolar
- Arac İçin Medya Uygulamaları Geliştirme (Android Dev Summit '19)
- Arabalar için Android Uygulamaları Geliştirme (Google I/O'19)
Android Automotive OS medyasıyla ilgili sorunları bildirme
Android Automotive OS için medya uygulamanızı geliştirirken sorunla karşılaşırsanız Google Sorun Takip Aracı'nı kullanarak sorunu bildirebilirsiniz. Sorun şablonunda istenen tüm bilgileri doldurduğunuzdan emin olun.
Yeni bir sorun bildirmeden önce, sorunun sorun listesinde bildirilip bildirilmediğini kontrol edin. İzleyicideki bir sorunun yıldızını tıklayarak sorunlara abone olabilir ve oy verebilirsiniz. Daha fazla bilgi için Bir soruna abone olma başlıklı makaleyi inceleyin.