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şmak 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 gereksinimleri karşılayan ayrı bir derleme oluşturmanız gerekir.

Geliştirmeye genel bakış

Android Automotive OS desteğini eklemek aşağıdaki bölümlerde açıklandığı gibi yalnızca birkaç adım gerektirir:

  1. Android Studio'da otomotiv özelliklerini etkinleştirin.
  2. Bir otomotiv modülü oluşturun.
  3. Gradle bağımlılıklarınızı güncelleyin.
  4. İsteğe bağlı olarak, Ayarları ve oturum açma etkinliklerini uygulayın.

Tasarımla ilgili dikkat edilmesi gerekenler

Android Automotive OS, uygulamanızın medya tarayıcısı hizmetinden alınan medya içeriğini düzenler. Yani uygulamanız kullanıcı arayüzünü çizmez ve bir kullanıcı medya oynatmayı tetiklediğinde etkinliklerinizden hiçbirini başlatmaz.

Ayarlar veya oturum açma etkinlikleri uyguluyorsanız bu etkinlikler araç için optimize edilmiş olmalıdır. Uygulamanızın bu bölümlerini tasarlarken Android Automotive OS için Tasarım yönergelerine bakın.

Projenizi oluşturun

Android Automotive OS desteğini etkinleştirmek için uygulamanızın projesinin birkaç bölümünü kurmanız gerekir.

Android Studio'da otomotiv özelliklerini etkinleştir

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

Android Automotive OS'in bazı bileşenlerinin (ör. manifest) platforma özgü gereksinimleri vardır. 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 şu adımları uygulayın:

  1. Android Studio'da Dosya > Yeni > Yeni Modül'ü tıklayın.
  2. Otomotiv Modülü'nü seçin, ardından İleri'yi tıklayın.
  3. Bir Uygulama/Kitaplık adı girin. Bu, kullanıcıların Android Automotive OS'te uygulamanız için gördükleri addır.
  4. Modül adı girin.
  5. Uygulamanızla eşleştirmek için Paket adını ayarlayın.
  6. Minimum SDK için API 28: Android 9.0 (Pie)'ı seçip İleri'yi tıklayın.

    Android Automotive OS'i destekleyen tüm arabalar Android 9 (API düzeyi 28) veya sonraki sürümlerde çalışır. Bu nedenle, bu değerin seçilmesi tüm uyumlu araçları hedefler.

  7. Etkinlik Yok'u seçin ve ardından Son'u tıklayın.

Modülünüzü Android Studio'da oluşturduktan sonra yeni otomotiv modülünüzde AndroidManifest.xml öğesini 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'i desteklediğini belirten bir uses-feature öğesi bulunur. Manifest'te herhangi bir etkinlik olmadığını unutmayın.

Ayarlar veya oturum açma etkinlikleri uygularsanız söz konusu ayarları buraya ekleyin. Bu etkinlikler, açık amaçlar kullanılarak sistem tarafından tetiklenir ve Android Automotive OS uygulamanız için manifest dosyasında yalnızca bu etkinlikleri bildirdiğinizi belirtir.

Ayarları veya oturum açma etkinliklerini ekledikten sonra application öğesinde android:appCategory="audio" özelliğini ayarlayıp 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 özelliklerin açıkça required="false" olarak ayarlanması, uygulamanızın Automotive OS cihazlarındaki mevcut donanım özellikleriyle çakışmamasını sağlar.

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ına yöneliktir.

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

Amaç filtreleri

Android Automotive OS, medya uygulamanızdaki etkinlikleri tetiklemek için açık niyetler kullanır. Manifest dosyasına CATEGORY_LAUNCHER veya ACTION_MAIN amaç filtresi olan etkinlikleri eklemeyin.

Aşağıdaki örnekte gösterilene benzer 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 tanımlayın.

<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ınızı güncelleyin

Medya tarayıcı 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 aşağıdaki snippet'te gösterildiği gibi otomotiv modülünüzü paylaşılan modülü içerecek şekilde güncellemeniz gerekir:

my-auto-module/build.gradle

Modern

buildscript {
    ...
    dependencies {
        ...
        implementation project(':shared_module_name')
    }
}

Kotlin

buildscript {
    ...
    dependencies {
        ...
        implementation(project(":shared_module_name"))
    }
}

Ayarları ve oturum açma etkinliklerini uygulayın

Medya tarayıcı hizmetinize ek olarak, Android Automotive OS uygulamanız için araç için optimize edilmiş ayarlar ve oturum açma etkinlikleri de sağlayabilirsiniz. Bu etkinlikler, Android Media API'lerinde bulunmayan uygulama işlevlerini sağlamanı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 işlemler Android Auto tarafından kullanılmaz.

Etkinlik iş akışları

Aşağıdaki şemada, bir 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ı önleme

Ayarlarınızın ve/veya oturum açma etkinliklerinizin yalnızca kullanıcının aracı park edildiğinde kullanılabildiğinden emin olmak için <activity> öğelerinin aşağıdaki <meta-data> öğesini içermediğini doğrulayın. Böyle 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ırabilmeleri için araca göre optimize edilmiş ayarlar etkinliği ekleyebilirsiniz. Ayar etkinliğiniz, bir kullanıcının hesabında oturum açma veya oturumu kapatma ya da kullanıcı hesaplarını değiştirme 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ı bunu kullanmaz.

Ayar etkinliği bildirme

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 etkinliğinizi uygulama

Bir kullanıcı uygulamanızı başlattığında Android Automotive OS, beyan ettiğiniz ayarlar etkinliğini algılar ve simge gibi bir uygunluk kontrolü görüntüler. Kullanıcı, bu etkinliğe gitmek için arabasının ekranını kullanarak bu fiyata dokunabilir veya seçebilir. Android Automotive OS, uygulamanıza ayar etkinliğinizi başlatmasını söyleyen ACTION_APPLICATION_PREFERENCES niyetini gönderir.

Bu bölümün geri kalanında, uygulamanız için bir ayar 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ı izleyin:

  1. automotive/automotive-lib klasörünü otomotiv modülünüze kopyalayın.
  2. automotive/src/main/res/xml/preferences.xml örneğindeki gibi bir tercihler ağacı tanımlayın.
  3. Ayarlar etkinliğinizin görüntülediği bir PreferenceFragmentCompat uygulayın. Daha fazla bilgi için UAMP'daki SettingsFragment.kt ve SettingsActivity.kt dosyalarına ve Android Ayarları kılavuzuna bakın.

Ayar etkinliğinizi uygularken, Tercih kitaplığındaki bileşenlerden bazılarını kullanmak için aşağıdaki en iyi uygulamalardan yararlanabilirsiniz:

  • Ayarlar etkinliğinizde ana görünümün altında ikiden fazla derinlik düzeyi bulunmamalıdır.
  • DropDownPreference kullanmayın. Bunun yerine ListPreference kullanın.
  • Kuruluş bileşenleri:
    • PreferenceScreen
      • Bu, tercihler ağacınızın en üst düzeyi olmalıdır.
    • PreferenceCategory
      • Preference nesneleri birlikte gruplandırmak için kullanılır.
      • title ekleyin.
  • Aşağıdaki tüm bileşenlere bir key ve title ekleyin. Ayrıca summary, icon veya her ikisini birden ekleyebilirsiniz:
    • Preference
      • PreferenceFragmentCompat uygulamanızın onPreferenceTreeClick() geri çağırma mantığını ö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 ekleyin.
      • dialogMessage ve/veya dialogLayoutResource içerebilir.
    • com.example.android.uamp.automotive.lib.ListPreference
      • Çoğunlukla ListPreference kaynağından geliyor.
      • Preference nesne içeren tek seçimli bir listeyi görüntülemek için kullanılır.
      • entries dizisi ve buna karşılık gelen entryValues olmalıdır.
    • com.example.android.uamp.automotive.lib.MultiSelectListPreference
      • Çoğunlukla MultiSelectListPreference kaynağından geliyor
      • Preference nesnelerinden oluşan çoktan seçmeli bir listeyi görüntülemek için kullanılır.
      • entries dizisi ve buna karşılık gelen entryValues olmalıdır.

Oturum açma etkinliği ekleme

Uygulamanız, kullanıcıların uygulamanızı kullanabilmesi için oturum açmalarını gerektiriyorsa uygulamanızda oturum açma ve kapatma işlemlerini gerçekleştiren, araç için optimize edilmiş bir oturum açma etkinliği ekleyebilirsiniz. Ayrıca, bir ayar etkinliğine oturum açma ve çıkış yapma iş akışları da ekleyebilirsiniz, ancak uygulamanız kullanıcı oturum açana kadar kullanılamıyorsa özel bir oturum açma etkinliği kullanabilirsiniz. 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ı bunu kullanmaz.

Uygulama başlatılırken oturum açmayı gerektir

Medya tarayıcısı hizmetinizin, uygulamanızı kullanabilmesi için öncelikle oturum açmasını zorunlu kılmak üzere şunları yapması gerekir:

  1. Hizmetinizin onLoadChildren() yönteminde, sendResult() yöntemini kullanarak null sonucu gönderin.
  2. setState() yöntemini kullanarak medya oturumunun PlaybackStateCompat değerini STATE_ERROR olarak ayarlayın. Bu, Android Automotive OS'a hata çözülene kadar başka işlem gerçekleştirilemeyeceğini bildirir.
  3. Medya oturumunun PlaybackStateCompat hata kodunu ERROR_CODE_AUTHENTICATION_EXPIRED olarak ayarlayın. Bu, Android Automotive OS'a kullanıcının kimlik doğrulaması yapması gerektiğini bildirir.
  4. Medya oturumunun PlaybackStateCompat hata mesajını, setErrorMessage() yöntemini kullanarak ayarlayın. Bu hata mesajı kullanıcılara yönelik olduğundan, mesajı kullanıcının mevcut yerel ayarına göre yerelleştirin.
  5. Medya oturumunun PlaybackStateCompat ekstralarını, setExtras() yöntemini kullanarak ayarlayın. Aşağıdaki iki anahtarı ekleyin:

Aşağıdaki kod snippet'i, uygulamanızda kullanıcının uygulamayı kullanmadan önce oturum açmasını nasıl gerektirebileceğini gösterir:

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ı kimliği başarıyla doğrulandıktan sonra PlaybackStateCompat cihazını STATE_ERROR dışında bir duruma getirin ve ardından etkinliğin finish() yöntemini çağırarak kullanıcıyı Android Automotive OS'e geri getirin.

Oturum açma etkinliğinizi uygulama

Google, kullanıcıların arabalarında uygulamanızda oturum açmaları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 sunar. Diğer araçlar, kullanıcılar için sorunsuz oturum açma deneyimleri oluşturmanıza yardımcı olmak amacıyla kullanıcıları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'i zaten uyguladıysanız bu özelliği, mevcut One Tap kullanıcılarını desteklemek üzere Android Automotive OS uygulamanızda uygulayın.
  • Google ile Oturum Açma: Telefon uygulamanız gibi diğer cihazlar için Google ile Oturum Açma'yı zaten uyguladıysanız, mevcut Google ile Oturum Açma kullanıcılarını desteklemek üzere Android Automotive OS uygulamanızda 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öneticisine kaydedilir. Bu kullanıcılar Android Automotive OS uygulamanızda oturum açtığında Google ile Otomatik Doldurma özelliği, kaydedilmiş ilgili kimlik bilgilerini önerir. Google ile Otomatik Doldurma özelliği, herhangi bir uygulama geliştirme çabası gerektirmez. Ancak, uygulama geliştiriciler uygulamalarını daha kaliteli sonuçlar için optimize edebilir. Google ile Otomatik Doldurma, Android Automotive OS de dahil olmak üzere Android 8.0 (API düzeyi 26) veya sonraki sürümleri çalıştıran tüm cihazlarda desteklenir.

Hesap Yöneticisi'ni kullanma

Kimlik doğrulaması olan Android Automotive OS uygulamaları, aşağıdaki nedenlerden dolayı AccountManager'ı kullanmalıdır:

  • Daha iyi kullanıcı deneyimi ve hesap yönetimi kolaylığı: Kullanıcılar, tüm hesaplarını sistem ayarlarındaki hesaplar menüsünden (oturum açma ve kapatma dahil) kolayca yönetebilir.
  • "Misafir" deneyimleri: Arabalar paylaşılan cihazlardır. Yani OEM'ler, araçta hesapların eklenemediği "misafir" deneyimlerini etkinleştirebilirler. Bu kısıtlama, AccountManager için DISALLOW_MODIFY_ACCOUNTS kullanılarak elde edilmiştir.

İzinler

Kullanıcıdan izin istemeniz gerekiyorsa önceki bölümde gösterilen kimlik doğrulama etkinliğiyle veya etkinlik iş akışları diyagramındaki ayar etkinliğiyle aynı akışı kullanın.

Hata İşleme

Android Automotive OS'teki medya uygulamalarındaki hatalar, medya oturumunun PlaybackStateCompat üzerinden iletilir. Tüm hatalar için PlaybackStateCompat içinde uygun bir hata kodu ve hata mesajı ayarlayın. Bu, kullanıcı arayüzünde bir Toast görünmesine neden olur.

Bir hata oluştuğunda oynatma devam edebiliyorsa önemli olmayan bir hata verin. Örneğin, bir kullanıcı oturum açmadan önce bir uygulamada müzik çalabilir, ancak bir şarkıyı atlayabilmesi için önce oturum açması gerekir. Önemli olmayan bir hata kullandığınızda sistem, kullanıcının geçerli medya öğesinin oynatılmasını kesintiye uğratmadan giriş yapmasını önerebilir.

Onarılabilir bir hata yayınladığınızda PlaybackStateCompat öğesinin geri kalanını, hata kodu ve hata mesajı dışında, olduğu gibi koruyun. Bu yaklaşım kullanıldığında, kullanıcı oturum açıp açmayacağına karar verirken mevcut medya öğesini oynatma işlemi devam edebilir.

Oynatmanın mümkün olmadığı durumlarda (örneğin, internet bağlantısı olmadığında veya çevrimdışı içerik olmadığında) PlaybackStateCompat durumunu STATE_ERROR olarak ayarlayın.

PlaybackStateCompat cihazınızda sonraki güncellemelerde, aynı hata için birden fazla uyarı görüntülememek amacıyla tüm hata kodlarını ve hata mesajlarını temizleyin.

Herhangi bir noktada bir göz atma ağacı yükleyemezseniz (örneğin, kimlik doğrulama gerektiriyorsa ve kullanıcı oturum açmamışsa) boş bir göz atma ağacı gönderin. Bunu belirtmek amacıyla kök medya düğümü için onLoadChildren() öğesinden boş bir sonuç döndürün. Böyle bir durumda sistem, PlaybackStateCompat içinde ayarlanan hata mesajıyla birlikte tam ekran hata görüntüler.

İşlem yapılabilir hatalar

Bir hata için işlem yapılabilirse PlaybackStateCompat içinde aşağıdaki iki ekstra özelliği de ayarlayın:

İşlem yapılabilir hatalar Dialog olarak görünür ve kullanıcılar tarafından yalnızca araba durduğunda çözülebilir.

Hata durumlarını test etme

Uygulamanızın aşağıdakiler dahil tüm senaryolarda hataları sorunsuz şekilde işlediğini doğrulayın:

  • Ürününüzün farklı katmanları: Örneğin, ücretsiz ve premium/oturum açma ya da oturum kapalı duruma geçme
  • Farklı sürücü durumları: Örneğin, park halinde veya sürüş
  • Farklı bağlantı durumları: örneğin, çevrimiçi ve çevrimdışı

Dikkat edilmesi gereken diğer noktalar

Android Automotive OS uygulamanızı geliştirirken aşağıdaki diğer noktaları aklınızda bulundurun:

Çevrimdışı içerik

Mümkünse çevrimdışı oynatma desteği uygulayın. Android Automotive işletim sistemine sahip arabaların kendi veri bağlantısının olması beklenir. Diğer bir deyişle, bir veri planı araç maliyetine dahil edilir veya kullanıcı tarafından ödenir. Bununla birlikte, arabaların mobil cihazlara göre daha fazla değişken bağlantıya sahip olması da beklenir.

Çevrimdışı destek stratejinizi belirlerken aklınızda bulundurmanız gereken birkaç nokta vardır:

  • İçerik indirmek için en iyi zaman uygulamanızın kullanıldığı zamandır.
  • Kablosuz kullanılabilir olduğunu varsaymayın. Bir araba hiçbir zaman kablosuz bağlantı aralığına giremeyebilir veya OEM, hücresel ağ yerine kablosuz bağlantıyı devre dışı bırakmış olabilir.
  • Kullanıcıların kullanmasını beklediği içeriği akıllı bir şekilde önbelleğe almakta bir sakınca olmamakla birlikte, kullanıcının ayarlar etkinliğiniz üzerinden bu davranışı değiştirmesine izin vermenizi öneririz.
  • Araçlardaki disk alanı değişiklik gösterir. Bu yüzden, ayarlar etkinliğinizdeki bir seçenek gibi kullanıcılara çevrimdışı içeriği silmeleri için bir yol sağlayın.

Web Görünümü desteği

Web Görünümleri, Android Automotive OS'te desteklenir ancak yalnızca ayarlarınız ve oturum açma etkinlikleriniz için kullanılabilir. Web Görünümü kullanan etkinliklerin Web Görünümü dışında "kapat" veya "geri" olanağı olmalıdır.

Aşağıda, Web Görünümleri için kabul edilebilir kullanım alanlarına bazı örnekler verilmiştir:

  • Ayarlar etkinliğinizde gizlilik politikanızı, hizmet şartlarını veya diğer yasal bağlantıları görüntülemek.
  • Oturum açma etkinliğinizde web tabanlı bir akış.

Bir Web Görünümü kullanırken JavaScript'i etkinleştirebilirsiniz.

Web Görünümünüzün güvenliğini sağlama

Web Görünümü'nün daha geniş internete giriş noktası olmadığından emin olmak için mümkün olan tüm önlemleri alın. Web Görünümü'nü loadUrl() çağrısında kullanılan URL'ye kilitleme ve yönlendirmeleri önlemeyle ilgili bir örnek için aşağıdaki kod snippet'ini inceleyin. Uygun durumlarda (ör. yasalarla ilgili bağlantıları görüntülerken) bu gibi önlemler 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 Package Kit (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 olur. Mevcut paket adınızı yeniden kullanırsanız uygulamanızın her iki platformda da tek bir girişi olur.

Bu genel 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ı kullanmanız ve her ekibin kendi Play Store girişini yönetmesine izin vermeniz mantıklı olabilir. İki yaklaşımın da kullanılması için gereken teknik çalışma bakımından büyük bir fark yoktur.

Aşağıdaki tabloda mevcut paket adınızı tutma ile yeni paket adı kullanma arasındaki diğer bazı önemli farklar özetlenmiştir:

Özellik Aynı paket adı Yeni paket adı
Mağaza girişi Tek Birden fazla
Yansıtılmış yükleme Evet: Kurulum sihirbazı sırasında "uygulamayı hızlı yeniden yükleme" Hayır
Play Store İnceleme süreci Yorumları engelleme: İnceleme bir APK için başarısız olursa aynı sürümde gönderilen diğer APK'lar engellenir Bireysel incelemeler
İstatistikler, metrikler ve önemli veriler Birleşik: Otomotiv sektörüne özel verileri filtreleyebilirsiniz. Ayır
Dizine ekleme ve arama sıralaması Mevcut durumunuzu geliştirin Devir yok
Diğer uygulamalarla entegrasyon Medya kodunun her iki APK arasında paylaşıldığı varsayıldığında, büyük olasılıkla hiçbir değişiklik gerekmez Bunun için ilgili uygulamanın güncellenmesi gerekebilir. Örneğin, Google Asistan'la URI çalması için güncelleyebilirsiniz.

Sık sorulan sorular

Android Automotive OS hakkında sık sorulan bazı soruların yanıtları için aşağıdaki bölümlere bakın.

Donanım

Uygulamam mikrofona erişebilir mi

Android 10 (API düzeyi 29) veya sonraki sürümleri hedefleyen uygulamalar için ses girişi paylaşma dokümanlarına bakın. Bu, API düzeyi 29'dan önce mümkün değildir.

Hangi araba API'lerine, nasıl erişebiliriz?

Yalnızca OEM tarafından sunulan API'lerle sınırlısınızdır. Bu API'lere erişme şeklinizi standartlaştırmak için işlemler geliştirilmektedir.

Uygulamalar, SetProperty() ve GetProperty() kullanarak CarPropertyManager üzerinden araba API'lerine erişebilir. Kullanılabilir tüm özelliklerin listesini görmek için kaynak koda veya referans belgelerine bakın. Mülke @SystemApi ek açıklaması verilmişse önceden yüklenmiş sistem uygulamalarıyla sınırlıdır.

Ne tür ses codec'leri desteklenir?

Android CDD'deki ses codec ayrıntılarına bakın.

Widevine DRM destekleniyor mu?

Evet. Widevine DRM desteklenir.

Geliştirme ve test

Üçüncü taraf SDK'larının ve kitaplıklarının kullanımına ilişkin herhangi bir kısıtlama veya öneri var mı?

Üçüncü taraf SDK'larının ve kitaplıklarının kullanımıyla ilgili belirli bir yönergemiz yoktur. Üçüncü taraf SDK'ları ve kitaplıkları kullanmayı tercih ederseniz araba uygulaması kalitesiyle ilgili tüm şartlara uymaktan yine siz sorumlu olursunuz.

Ön plan hizmeti kullanabilir miyim?

Bir ön plan hizmetinin izin verilen tek kullanım alanı çevrimdışı kullanım için içerik indirmesidir. Bir ön plan hizmeti için destek almak istediğiniz başka bir kullanım alanınız 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?

Uygulama yayınlama işlemi, telefon uygulaması yayınlamaya benzer, ancak farklı bir form faktörü kullanırsınız. Uygulamanızda Android Automotive OS form faktörünü kullanmayı etkinleştirmek için şu adımları izleyin:

  1. Play Console'u açın.
  2. Uygulamanızı seçin.
  3. Sol menüden Sürüm > Kurulum > Gelişmiş ayarlar > Form faktörleri'ni tıklayın.
  4. Form faktörü ekle > Android Automotive OS'u tıklayın, ardından Play Console'daki talimatları uygulayın.

Ek kaynaklar

Android Automotive OS hakkında daha fazla bilgi için aşağıdaki ek kaynaklara bakın.

Numuneler

Kılavuzlar

Bloglar

Videolar

Android Automotive OS Media sorunu bildir

Android Automotive OS için medya uygulamanızı geliştirirken bir sorunla karşılaşırsanız Google Issue Tracker'ı kullanarak bu sorunu bildirebilirsiniz. Sorun şablonunda istenen tüm bilgileri doldurduğunuzdan emin olun.

Yeni sayı oluşturma

Yeni bir sorun bildirmeden önce, sorunun zaten sorunlar listesinde bildirilip bildirilmediğini kontrol edin. İzleyicideki bir sorunla ilgili yıldızı tıklayarak abone olabilir ve sorunlar için oy verebilirsiniz. Daha fazla bilgi için Bir soruna abone olma bölümüne bakın.