Medya uygulamanıza Android Automotive OS desteğini ekleyin

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:

  1. Android Studio'da otomotiv özelliklerini etkinleştirme.
  2. Otomotiv modülü oluşturun.
  3. Gradle bağımlılıkları güncelleyin.
  4. İsteğe bağlı olarak Ayarları ve oturum açma etkinliklerini uygulayın.
  5. İ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:

  1. Android Studio'da Dosya > Yeni > Yeni Modül'ü tıklayın.
  2. Otomotiv Modülü'nü seçin ve İleri'yi tıklayın.
  3. Bir uygulama/kitaplık adı girin. Bu, Android Automotive OS'te kullanıcıların uygulamanız için gördüğü addır.
  4. Bir modül adı girin.
  5. Paket adını uygulamanızla eşleşecek şekilde ayarlayın.
  6. 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.

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

my-auto-module/build.gradle

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 ve oturum açma etkinlikleri için iş akışları

Şekil 1. Ayarlar ve oturum açma etkinliği iş akışları.

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

Etkinliğinizi uygulamak için aşağıdaki adımları uygulayın:

  1. automotive/automotive-lib klasörünü otomotiv modülünüze kopyalayın.
  2. automotive/src/main/res/xml/preferences.xml'te gösterildiği gibi bir tercih ağacı tanımlayın.
  3. Ayarlarınızın gösterildiği bir PreferenceFragmentCompat uygulayın. Daha fazla bilgi için UAMP'deki SettingsFragment.kt ve SettingsActivity.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 yerine ListPreference kullanın.
  • Kuruluş bileşenleri:
  • Aşağıdaki tüm bileşenlere bir key ve title ekleyin. Ayrıca summary, icon veya her ikisini de ekleyebilirsiniz:
    • Preference
      • PreferenceFragmentCompat uygulamanızın onPreferenceTreeClick() geri çağırma işlevindeki mantığı özelleştirin.
    • CheckBoxPreference
      • Koşullu metin için summary yerine summaryOn veya summaryOff olabilir.
    • SwitchPreference
      • Koşullu metin için summary yerine summaryOn veya summaryOff olabilir.
      • switchTextOn veya switchTextOff olabilir.
    • SeekBarPreference
      • min, max ve defaultValue ekleyin.
    • EditTextPreference
      • dialogTitle, positiveButtonText ve negativeButtonText öğelerini dahil edin.
      • dialogMessage ve/veya dialogLayoutResource 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 ilgili entryValues olmalıdır.
    • 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 ilgili entryValues olmalıdır.

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:

  1. Hizmetinizin onLoadChildren() yönteminde, sendResult() yöntemini kullanarak null sonucunu gönderin.
  2. setState() yöntemini kullanarak medya oturumunun PlaybackStateCompat değerini STATE_ERROR olarak ayarlayın. Bu, Android Automotive OS'e hata çözülene kadar başka işlem yapılamayacağını bildirir.
  3. Medya oturumunun PlaybackStateCompat hata kodunu ERROR_CODE_AUTHENTICATION_EXPIRED olarak ayarlayın. Bu, Android Automotive OS'e kullanıcının kimlik doğrulaması yapması gerektiğini bildirir.
  4. setErrorMessage() yöntemini kullanarak medya oturumunun PlaybackStateCompathata 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.
  5. setExtras() yöntemini kullanarak medya oturumunun PlaybackStateCompat ek özelliklerini ayarlayın. Aşağıdaki iki anahtarı ekleyin:

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çin DISALLOW_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:

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:

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

Bloglar

Videolar

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 sorun oluşturma

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.