يتيح نظام التشغيل Android Automotive للمستخدمين تثبيت التطبيقات في السيارة. للوصول إلى لمستخدمي هذا النظام الأساسي، يجب توزيع تطبيق محسّن للسائق متوافق مع نظام التشغيل Android Automotive. يمكنك إعادة استخدام كل التعليمات البرمجية تقريبًا الموارد في تطبيق Android Auto، ولكن عليك إنشاء إصدار منفصل يستوفي المتطلبات الواردة في هذه الصفحة.
نظرة عامة على التطوير
لا تتطلّب إضافة التطبيق المتوافق مع نظام التشغيل Android Automotive سوى بضع خطوات على النحو الموضَّح. في الأقسام التالية:
- تفعيل ميزات السيارات في "استوديو Android"
- أنشئ وحدة للسيارات.
- تعديل تبعيات Gradle
- يمكنك اختياريًا تنفيذ الإعدادات وأنشطة تسجيل الدخول.
- يمكنك اختياريًا قراءة تلميحات مضيف الوسائط.
اعتبارات التصميم
يعتني نظام التشغيل Android Automotive بوضع محتوى الوسائط الذي التي يتلقاها من خدمة متصفِّح الوسائط في تطبيقك. يعني ذلك أنّ تطبيقك لا يرسم واجهة المستخدم ولا يبدأ أيًا من أنشطتك عندما يشغّل المستخدم تشغيل الوسائط.
في حال تنفيذ الإعدادات أو أنشطة تسجيل الدخول، يجب أن تكون هذه الأنشطة محسّنة للمركبات. راجِع إرشادات التصميم. لنظام التشغيل Android Automotive أثناء تصميم تلك الأجزاء من التطبيق.
إعداد مشروعك
يجب إعداد عدّة أجزاء من مشروع تطبيقك لتفعيل support لنظام التشغيل Android Automotive.
تفعيل ميزات السيارات في "استوديو Android"
يجب استخدام الإصدار 4.0 من "استوديو Android" أو الإصدارات الأحدث للتأكّد من أنّ جميع ميزات نظام التشغيل Automotive. مفعّلة.
إنشاء وحدة للسيارات
وتتضمَّن بعض مكونات نظام التشغيل Android Automotive، مثل ملف البيان، ما يلي: والمتطلبات الخاصة بنظام التشغيل. إنشاء وحدة يمكنها الحفاظ على التعليمات البرمجية لهذه المكونات بشكل منفصل عن التعليمات البرمجية الأخرى في مشروعك، مثل الرمز المستخدَم لتطبيق الهاتف.
اتبع الخطوات التالية لإضافة وحدة سيارة إلى مشروعك:
- في "استوديو Android"، انقر على ملف > جديد > وحدة جديدة:
- اختَر وحدة سيارات، ثم انقر على التالي.
- أدخِل اسم التطبيق/المكتبة. هذا هو الاسم الذي يراه المستخدمون تطبيقك على نظام التشغيل Android Automotive.
- أدخِل اسم الوحدة.
- اضبط اسم الحزمة ليتطابق مع تطبيقك.
اختَر API 28: Android 9.0 (Pie) لاختيار الحدّ الأدنى لحزمة تطوير البرامج (SDK)، ثم انقر على التالي.
تعمل جميع السيارات التي تعمل بنظام التشغيل Android Automotive على الإصدار 9 من Android (المستوى 28 من واجهة برمجة التطبيقات). أعلى، لذا فإن تحديد هذه القيمة يستهدف الكل للسيارات المتوافقة.
اختَر بدون نشاط، ثم انقر على إنهاء.
بعد إنشاء الوحدة في "استوديو Android"، افتح AndroidManifest.xml
في
وحدة السيارة الجديدة وهي:
<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
على بعض المعلومات القياسية عن التطبيق بالإضافة إلى
uses-feature
الذي يشير إلى توافقه مع نظام التشغيل Android Automotive. لاحظ أنه
ليست أنشطة تم تعريفها في البيان.
إذا نفذت الإعدادات أو أنشطة تسجيل الدخول، أضف هنا. يشغّل النظام هذه الأنشطة باستخدام نوايا صريحة. هي الأنشطة الوحيدة التي يتم الإفصاح عنها في بيان تطبيق نظام التشغيل Android Automotive.
بعد إضافة أي إعدادات أو أنشطة تسجيل الدخول، أكمِل ملف البيان من خلال
ضبط السمة android:appCategory="audio"
في العنصر application
وإضافة عناصر uses-feature
التالية:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.media"> <application android:allowBackup="true" android:appCategory="audio" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" /> <uses-feature android:name="android.hardware.type.automotive" android:required="true" /> <uses-feature android:name="android.hardware.wifi" android:required="false" /> <uses-feature android:name="android.hardware.screen.portrait" android:required="false" /> <uses-feature android:name="android.hardware.screen.landscape" android:required="false" /> </manifest>
ويؤدي ضبط هذه الميزات بوضوح على required="false"
إلى ضمان
لا يتعارض تطبيقك مع ميزات الأجهزة المتوفّرة في نظام التشغيل Automotive.
الأجهزة.
إعلان إتاحة الوسائط لنظام التشغيل Android Automotive
يُرجى استخدام الإدخال التالي في البيان للإقرار بأنّ تطبيقك متوافق مع التطبيق. نظام التشغيل Android Automotive:
<application>
...
<meta-data android:name="com.android.automotive"
android:resource="@xml/automotive_app_desc"/>
...
</application>
يشير إدخال البيان هذا إلى ملف XML الذي يعرّف عن السيارة والإمكانيات التي يدعمها تطبيقك.
للإشارة إلى أنّ لديك تطبيق وسائط، أضِف
ملف XML بالاسم automotive_app_desc.xml
إلى دليل res/xml/
في
مشروعك. ضمِّن المحتوى التالي في هذا الملف:
<automotiveApp>
<uses name="media"/>
</automotiveApp>
فلاتر الأهداف
يستخدم نظام التشغيل Android Automotive نوايا صريحة لتفعيل الأنشطة في الوسائط الخاصة بك.
التطبيق. لا تُدرج أي أنشطة لها
CATEGORY_LAUNCHER
أو ACTION_MAIN
intent
والفلاتر في ملف البيان.
عادةً ما تستهدف الأنشطة المشابهة في المثال التالي هاتفًا أو بعضًا على جهاز محمول آخر. أعلن عن هذه الأنشطة في الوحدة التي في إنشاء تطبيق الهاتف، وليس في الوحدة التي تشكل نظام التشغيل Android Automotive. التطبيق.
<activity android:name=".MyActivity">
<intent-filter>
<!-- You can't use either of these intents for Android Automotive OS -->
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<!--
In their place, you can include other intent filters for any activities
that your app needs for Android Automotive OS, such as settings or
sign-in activities.
-->
</intent-filter>
</activity>
تعديل تبعيات Gradle
ننصحك بإبقاء خدمة متصفِّح الوسائط. في وحدة منفصلة تشاركها بين تطبيق الهاتف ومركبتك واحدة. وإذا كنت تستخدم هذه الطريقة، ستحتاج إلى تحديث نظام سيارتك لتضمين الوحدة المشتركة، كما هو موضح في المقتطف التالي:
my-auto-module/build.gradle
Groovy
buildscript { ... dependencies { ... implementation project(':shared_module_name') } }
Kotlin
buildscript { ... dependencies { ... implementation(project(":shared_module_name")) } }
تنفيذ الإعدادات وأنشطة تسجيل الدخول
بالإضافة إلى خدمة متصفح الوسائط التي تستخدمها، يمكنك أيضًا تقديم محسّنة للمركبات أنشطة تسجيل الدخول وإعداداتك في نظام التشغيل Android Automotive. تتيح لك هذه الأنشطة توفير وظائف تطبيق غير مضمّنة في واجهات برمجة التطبيقات لـ Android Media API.
يجب تنفيذ هذه الأنشطة فقط إذا كان تطبيق نظام التشغيل Android Automotive. إلى السماح للمستخدمين بتسجيل الدخول أو تحديد إعدادات التطبيق. هذه الأنشطة ليست التي تستخدمها ميزة Android Auto.
مهام سير عمل الأنشطة
يوضح الرسم التخطيطي التالي كيفية تفاعل المستخدم مع إعداداتك أنشطة تسجيل الدخول باستخدام نظام التشغيل Android Automotive:
الشكل 1. الإعدادات وسير عمل نشاط تسجيل الدخول
منع مصادر تشتيت الانتباه في الإعدادات وأنشطة تسجيل الدخول
للتأكّد من أنّ الإعدادات و/أو أنشطة تسجيل الدخول متاحة للاستخدام فقط
أثناء ركن مركبة المستخدم، تحقَّق من أنّ عناصر <activity>
لا تتضمّن العنصر <meta-data>
التالي. سيتم رفض تطبيقك
أثناء المراجعة في حال توفّر هذا العنصر
<!-- NOT ALLOWED -->
<meta-data
android:name="distractionOptimized"
android:value="true"/>
إضافة نشاط إعدادات
يمكنك إضافة نشاط إعدادات محسَّن للمركبة كي يمكن للمستخدمين من خلالها ضبط إعدادات تطبيقك في سياراتهم. إعداداتك نشاطك الذي يمكن أن يوفر أيضًا مهام سير عمل أخرى، مثل تسجيل الدخول إلى حساب المستخدم أو الخروج منه الحساب أو تبديل حسابات المستخدمين. تذكر أن هذا النشاط تم تشغيله بواسطة تطبيق يعمل على نظام التشغيل Android Automotive. تطبيقات الهاتف المرتبطة بـ ولا تستخدمه في Android Auto.
الإفصاح عن نشاط الإعدادات
يجب الإفصاح عن نشاط الإعدادات في ملف بيان تطبيقك، كما هو موضّح في مقتطف الرمز التالي:
<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>
تنفيذ نشاط الإعدادات
عندما يشغِّل المستخدم تطبيقك، يرصد نظام التشغيل Android Automotive
نشاط الإعدادات الذي أعلنت عنه ويعرض عناصر وظيفية، مثل رمز.
يمكن للمستخدم النقر على هذه الوظيفة أو اختيارها باستخدام شاشة سيارته للتنقل
للنشاط. يرسل نظام التشغيل Android AutomotiveACTION_APPLICATION_PREFERENCES
.
الغرض من ذلك أن يخبر التطبيق ببدء نشاط الإعدادات.
يوضح الجزء المتبقي من هذا القسم كيف يمكنك تعديل الرمز من علامة التبويب Universal نموذج تطبيق Android Music Player (UAMP) لتنفيذ نشاط إعدادات لتطبيقك.
للبدء، نزِّل نموذج الرمز:
# 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
لتنفيذ نشاطك، يُرجى اتّباع الخطوات التالية:
- انسخ المجلد
automotive/automotive-lib
إلى وحدة السيارة. - قم بتعريف شجرة التفضيلات كما في
automotive/src/main/res/xml/preferences.xml
تنفيذ
PreferenceFragmentCompat
التي يعرضها نشاط الإعدادات. يمكنك الاطّلاع علىSettingsFragment.kt
ملفان (SettingsActivity.kt
) في UAMP وإعدادات Android لمزيد من المعلومات.
أثناء تنفيذ نشاط الإعدادات، ضع في اعتبارك أفضل الممارسات التالية لاستخدام بعض مكونات مكتبة التفضيلات:
- لا يوجد أكثر من مستويين من العمق تحت العرض الرئيسي في نشاط الإعدادات.
- لا تستخدِم
DropDownPreference
. يمكنك استخدامListPreference
بدلاً من ذلك. - المكونات التنظيمية:
PreferenceScreen
- يجب أن يكون هذا في أعلى شجرة إعداداتك المفضّلة.
PreferenceCategory
- يتم استخدام البيانات لتجميع عناصر
Preference
معًا. - تضمين
title
.
- يتم استخدام البيانات لتجميع عناصر
- أدرِج
key
وtitle
في كل المكوّنات التالية. يمكنك أيضًا تضمينsummary
أوicon
أو كليهما:Preference
- خصِّص المنطق في معاودة الاتصال "
onPreferenceTreeClick()
" الخاصة بك تنفيذPreferenceFragmentCompat
.
- خصِّص المنطق في معاودة الاتصال "
CheckBoxPreference
- يمكن أن يحتوي على
summaryOn
أوsummaryOff
بدلاً منsummary
للنص الشرطي.
- يمكن أن يحتوي على
SwitchPreference
- يمكن أن يحتوي على
summaryOn
أوsummaryOff
بدلاً منsummary
للنص الشرطي. - يمكن أن يحتوي على
switchTextOn
أوswitchTextOff
.
- يمكن أن يحتوي على
SeekBarPreference
- يمكنك تضمين
min
وmax
وdefaultValue
.
- يمكنك تضمين
EditTextPreference
- تضمين
dialogTitle
وpositiveButtonText
وnegativeButtonText
- يمكن أن يحتوي على
dialogMessage
و/أوdialogLayoutResource
.
- تضمين
com.example.android.uamp.automotive.lib.ListPreference
- مشتق في الغالب من
ListPreference
. - يُستخدَم لعرض قائمة ذات اختيار واحد تتضمّن عناصر
Preference
. - يجب أن يحتوي على مصفوفة
entries
وentryValues
مطابق.
- مشتق في الغالب من
com.example.android.uamp.automotive.lib.MultiSelectListPreference
- مشتق في الغالب من
MultiSelectListPreference
- يُستخدَم لعرض قائمة خيارات متعدّدة لعناصر
Preference
. - يجب أن يحتوي على مصفوفة
entries
وentryValues
مطابق.
- مشتق في الغالب من
إضافة نشاط تسجيل الدخول
إذا كان تطبيقك يتطلّب من المستخدم تسجيل الدخول ليتمكّن من استخدام التطبيق، يمكنك إضافة نشاط تسجيل دخول محسّن للمركبة لمعالجة تسجيل الدخول والخروج من التطبيق. يمكنك أيضًا إضافة بيانات تسجيل الدخول وتسجيل الخروج إلى نشاط الإعدادات، ولكن يمكنك استخدام نشاط تسجيل الدخول المخصّص إذا تعذّر استخدام تطبيقك إلا بعد أن يختار المستخدم لتسجيل الدخول. تذكر أن هذا النشاط لا يتم تشغيله إلا بواسطة تطبيق يعمل على نظام التشغيل Android Automotive. ولا تستخدمه تطبيقات الهاتف المرتبطة بتطبيق Android Auto.
يجب تسجيل الدخول عند بدء تشغيل التطبيق
لإلزام المستخدم بتسجيل الدخول ليتمكّن من استخدام تطبيقك، يجب استخدام متصفّح الوسائط القيام بما يلي:
- في طريقة
onLoadChildren()
الخاصة بخدمتك، أرسِل نتيجة واحدة (null
) باستخدامsendResult()
. - ضبط
PlaybackStateCompat
لجلسة الوسائط إلىSTATE_ERROR
باستخدامsetState()
. يؤدي هذا الإجراء إلى إعلام نظام التشغيل Android Automotive بأنّه لا يمكن إجراء أي عمليات أخرى حتى تم حل الخطأ. - ضبط
PlaybackStateCompat
لجلسة الوسائط إلىERROR_CODE_AUTHENTICATION_EXPIRED
. يؤدي ذلك إلى إعلام نظام التشغيل Android Automotive بأنّ المستخدم يحتاج إلى المصادقة. - ضبط
PlaybackStateCompat
لجلسة الوسائط رسالة خطأ تستخدمsetErrorMessage()
. بما أنّ رسالة الخطأ هذه موجَّهة للمستخدمين، ننصحك بترجمتها. للغة المستخدم الحالية. ضبط
PlaybackStateCompat
لجلسة الوسائط الإضافية باستخدامsetExtras()
. قم بتضمين المفتاحين التاليين:PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL
: سلسلة يتم عرضها على الزر الذي يؤدي إلى بدء عملية تسجيل الدخول. بما أنّ هذه السلسلة موجّهة للمستخدم، يُرجى أقلمتها بما يتناسب مع احتياجات المستخدم اللغة الحالية.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT
:PendingIntent
توجه إلى نشاط تسجيل الدخول عندما ينقر المستخدم على الزر المشار إليه بواسطةPLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL
يوضح مقتطف الرمز التالي كيف يمكن أن يطلب تطبيقك من المستخدم تسجيل الدخول. قبل استخدام التطبيق:
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);
بعد مصادقة المستخدم بنجاح، اضبط PlaybackStateCompat
إلى حالة أخرى غير STATE_ERROR
،
ثم إعادة المستخدم إلى نظام التشغيل Android Automotive من خلال استدعاء عنوان
finish()
.
تنفيذ نشاط تسجيل الدخول
تقدِّم Google مجموعة متنوعة من أدوات تحديد الهوية. التي يمكنك استخدامها لمساعدة المستخدمين في تسجيل الدخول إلى تطبيقك في سياراتهم. بعض الإشعارات مثل مصادقة Firebase، توفر مجموعات أدوات كاملة يمكنها في إنشاء تجارب مصادقة مخصَّصة الاستفادة من الأدوات الأخرى بيانات الاعتماد الحالية للمستخدم أو التقنيات الأخرى لمساعدتك في إنشاء تصميم تسجيل الدخول للمستخدمين.
يمكن أن تساعدك الأدوات التالية في تسهيل عملية تسجيل الدخول. للمستخدمين الذين سجّلوا الدخول سابقًا على جهاز آخر:
- تسجيل الدخول بنقرة واحدة والاشتراك: إذا سبق لك تنفيذ نقرة واحدة على الأجهزة الأخرى، مثل تطبيق الهاتف، عليك تطبيقها تطبيق نظام التشغيل Android Automotive لدعم مستخدمي ميزة "نقرة واحدة" الحاليين.
- تسجيل الدخول باستخدام حساب Google: إذا سبق لك استخدام تسجيل الدخول باستخدام حساب Google على الأجهزة الأخرى، مثل تطبيق الهاتف، استخدِم سجِّل الدخول إلى تطبيق نظام التشغيل Android Automotive لإتاحة إمكانية تسجيل الدخول باستخدام حساب Google الحالي. المستخدمين.
- الملء التلقائي من Google: في حال تفعيل المستخدمين لميزة "الملء التلقائي من Google" على أجهزة Android الأخرى، يتم حفظ بيانات اعتمادها في مدير كلمات المرور في Google. عندما يسجّل هؤلاء المستخدمون الدخول إلى تطبيق نظام التشغيل Android Automotive، يمكنك استخدام ميزة "الملء التلقائي" تقترح Google بيانات الاعتماد المحفوظة ذات الصلة. يتطلب استخدام ميزة "الملء التلقائي من Google" بدون أي جهد في تطوير التطبيقات. ومع ذلك، يمكن لمطوّري التطبيقات تحسين تطبيقاتهم للحصول على نتائج ذات جودة أفضل. تتوفّر ميزة "الملء التلقائي من Google" على جميع الأجهزة التي تعمل بنظام التشغيل Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث، بما في ذلك نظام التشغيل Android Automotive.
استخدام مدير الحساب
في التطبيقات التي تعمل بنظام التشغيل Android Automotive وتتضمّن عملية المصادقة، يجب استخدام المصادقة. AccountManager، للأسباب التالية:
- تجربة مستخدم أفضل وسهولة في إدارة الحسابات: يمكن للمستخدمين إدارة جميع الحسابات بسهولة حساباتهم من قائمة الحسابات في إعدادات النظام، بما في ذلك تسجيل الدخول وتسجيل الخروج منه.
- "الضيف" التجارب: السيارات هي أجهزة مشتركة، ما يعني أنه بإمكان المصنّعين الأصليين للأجهزة تفعيل
"ضيف" التجارب في المركبة، حيث لا يمكن إضافة حسابات. هذا النمط
يتم تطبيق القيود باستخدام
DISALLOW_MODIFY_ACCOUNTS
مقابلAccountManager
.
الأذونات
إذا كنت بحاجة إلى طلب أذونات من المستخدم، فاستخدم نفس تدفق نشاط المصادقة أو نشاط الإعدادات ضمن سير عمل الأنشطة الرسم التخطيطي المعروض في قسم سابق.
قراءة تلميحات مضيف الوسائط
وفقًا لتطبيق النظام (بما في ذلك الإصدار) الذي يتصل خدمة متصفح الوسائط لديك، فقد يتلقى تطبيقك الميزات الإضافية التالية:
خطأ أثناء المعالجة
يتم الإبلاغ عن الأخطاء في تطبيقات الوسائط على نظام التشغيل Android Automotive عبر الوسائط.
PlaybackStateCompat
الخاصة بالجلسة. تحديد الخطأ المناسب لجميع الأخطاء
ورسالة الخطأ في PlaybackStateCompat
. يؤدي ذلك إلى ظهور Toast
في واجهة المستخدم.
عند حدوث خطأ مع استمرار التشغيل، فقم بإصدار غير فادح الخطأ. على سبيل المثال، قد يتمكّن المستخدم من تشغيل الموسيقى في أحد التطبيقات قبل تسجيل الدخول، ولكن يجب عليهم تسجيل الدخول قبل أن يتمكنوا من تخطي أغنية. عندما تستخدم خطأ غير فادح، أن يقترح النظام تسجيل دخول المستخدم دون مقاطعة التشغيل عنصر الوسائط الحالي.
عند إصدار خطأ غير فادح، احتفظ بباقي
PlaybackStateCompat
كما هي، باستثناء رمز الخطأ ورسالة الخطأ. استخدام هذا
يتيح تشغيل محتوى الوسائط الحالي لمواصلة تشغيل محتوى الوسائط
تسجيل الدخول إلى حسابك أو لا.
عندما لا يكون التشغيل ممكنًا، مثلاً عند عدم وجود اتصال بالإنترنت
لا يتوفّر محتوى بلا إنترنت، اضبط الحالة PlaybackStateCompat
على STATE_ERROR
.
امسح أي رموز خطأ عند إجراء تعديلات لاحقة على PlaybackStateCompat
.
ورسائل الخطأ لتجنب عرض تحذيرات متعددة للخطأ نفسه.
إذا تعذّر عليك في أي وقت تحميل شجرة تصفح — على سبيل المثال، إذا لم
طلب المصادقة وعدم تسجيل المستخدم الدخول، أرسل
شجرة التصفح. للدلالة على ذلك، يمكنك عرض نتيجة فارغة من onLoadChildren()
لطلب البحث
عقدة الوسائط الجذر. عند حدوث ذلك، يعرض النظام ملء الشاشة.
في رسالة الخطأ التي تم ضبطها في PlaybackStateCompat
.
الأخطاء القابلة للتنفيذ
إذا كان الخطأ قابلاً للتنفيذ، يمكنك أيضًا تعيين الشرطين الإضافيين التاليين في
PlaybackStateCompat
:
PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL
: تسمية للزر الذي سينقر فوقه لحل الخطأ. لأن هذه السلسلة موجه للمستخدم، ثم قم بأقلمتها لللغة الحالية للمستخدم.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT
:PendingIntent
الذي يشغّله الزر لحل الخطأ، من خلال تفعيل نشاط تسجيل الدخول مثلاً
تظهر الأخطاء القابلة للتنفيذ على شكل Dialog
ولا يمكن للمستخدمين حلّها إلا عندما
السيارة متوقفة.
اختبار حالات الخطأ
تأكَّد من أنّ تطبيقك يتعامل مع الأخطاء في جميع السيناريوهات بسلاسة، بما في ذلك:
- مستويات مختلفة من منتجك: مثل "مجاني" مقابل "Premium" أو "تسجيل الدخول" مقابل تسجيل الخروج
- حالات القيادة المختلفة: على سبيل المثال، ركن السيارة مقابل القيادة
- حالات الاتصال المختلفة: على سبيل المثال، الاتصال بالإنترنت مقارنةً بالإنترنت
اعتبارات أخرى
يجب أخذ هذه الاعتبارات الأخرى في الاعتبار عند تطوير نظام Android Automotive. تطبيق نظام التشغيل:
محتوى بلا إنترنت
تنفيذ ميزة التشغيل بلا إنترنت، إن أمكن سيارات مزوّدة بنظام التشغيل Android Automotive من المتوقع أن يكون لنظام التشغيل اتصال البيانات الخاص به، مما يعني يتم تضمين خطة البيانات في تكلفة المركبة أو يدفع المستخدم ثمنها. ومع ذلك، من المتوقع أيضًا أن يكون لدى السيارات إمكانية اتصال أكثر متغيرًا من الأجهزة المحمولة الأجهزة.
في ما يلي بعض النقاط التي يجب وضعها في الاعتبار عند محاولة الحصول على الدعم في وضع عدم الاتصال الإستراتيجية:
- أفضل وقت لتنزيل المحتوى هو عندما يكون التطبيق قيد الاستخدام.
- فلا تفترض أن شبكة WiFi متاحة. قد لا تصل السيارة أبدًا إلى نطاق WiFi، أو ربما أوقف المصنّع الأصلي للجهاز شبكة WiFi لصالح الشبكة الخلوية.
- وفي حين أنه ليس هناك مشكلة في التخزين المؤقت الذكي للمحتوى الذي يتوقع المستخدمون استخدامه، فإننا نوصي بالسماح للمستخدم بتغيير هذا السلوك من خلال نشاط الإعدادات.
- تختلف مساحة القرص في السيارات، لذا امنح المستخدمين طريقة لحذف لمحتوى غير متصل، مثل من خلال خيار في نشاط الإعدادات.
التوافق مع WebView
تكون مكوّنات WebView متوافقة مع نظام التشغيل Android Automotive، ولكن يُسمح بها فقط. إعداداتك وأنشطة تسجيل الدخول يجب أن تحتوي الأنشطة التي تستخدم WebView على "إغلاق" أو "رجوع" والمزايا خارج WebView.
في ما يلي بعض الأمثلة على حالات الاستخدام المقبولة لمكوّنات WebView:
- عرض سياسة الخصوصية أو بنود الخدمة أو روابط أخرى ذات صلة بالقانون في نشاط الإعدادات.
- تدفق مستند إلى الويب في نشاط تسجيل الدخول
عند استخدام مكوّن WebView، يمكنك تفعيل JavaScript
تأمين WebView
اتخذ جميع الاحتياطات اللازمة للمساعدة في التأكد من أن WebView ليس
نقطة دخول إلى شبكة الإنترنت الأكبر. انظر مقتطف الرمز التالي
مثال حول كيفية تثبيت WebView على عنوان URL المستخدَم في
loadUrl()
الاتصال ومنع عمليات إعادة التوجيه. ننصحك بشدة بتنفيذ تدابير الوقاية
مثل ذلك عندما يكون ذلك ممكنًا، مثل عند عرض
أو روابط ذات صلة بالقانون.
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; }
أسماء الحِزم
بما أنّك توزِّع حزمة APK منفصلة لنظام التشغيل Android Automotive، يمكنك تنفيذ ما يلي: إعادة استخدام اسم الحزمة من تطبيقك على الأجهزة الجوّالة أو إنشاء حزمة جديدة الاسم. إذا كنت تستخدم اسم حزمة مختلفًا، سيكون لتطبيقك إصداران منفصلان من "متجر Play". البيانات. إذا أعدت استخدام اسم الحزمة الحالي، سيتضمّن تطبيقك بطاقة بيانات واحدة عبر كلا المنصتين.
ويرجع ذلك في الغالب إلى قرار متعلق بالعمل. على سبيل المثال، إذا كان لديك فريق واحد يعمل على وتطبيق الأجهزة الجوّالة وفريق منفصل يعمل على نظام Android Automotive لنظام التشغيل، فقد يكون من المنطقي استخدام أسماء حزم منفصلة والسماح لكل منها إدارة بطاقة بيانات المتجر الخاصة به على Play. لا يوجد اختلاف كبير في والجهد الفني المطلوب لاستخدام أي من النهجين.
يلخص الجدول التالي بعض الاختلافات الرئيسية الأخرى بين الحفاظ على اسم الحزمة الحالية واستخدام اسم حزمة جديد:
الميزة | اسم الحزمة نفسه | اسم الحزمة الجديدة |
---|---|---|
بطاقة بيانات المتجر | فردية | عدة تعليقات |
تثبيت على الجهاز وفي السحابة الإلكترونية | نعم: "إعادة تثبيت التطبيق بسرعة" أثناء معالج الإعداد | لا |
عملية مراجعة متجر Play | حظر المراجعات: في حال تعذّر إكمال المراجعة لحِزمة APK واحدة أو حِزم APK أخرى يتم حظر إرسالها في الإصدار نفسه | مراجعات فردية |
الإحصاءات والمقاييس والمؤشرات الحيوية | مجتمعة: يمكنك الفلترة بحثًا عن البيانات الخاصة بالسيارات. | فصل |
الفهرسة وترتيب نتائج البحث | طوِّر مستواك الحالي | لا يتم نقل الاشتراكات |
الدمج مع التطبيقات الأخرى | ليس مطلوبًا على الأرجح إجراء أي تغييرات، وذلك بافتراض مشاركة رمز الوسائط بين حِزمتَي APK | قد تحتاج إلى تحديث التطبيق المعني، مثلاً لتشغيل معرّف الموارد المنتظم (URI) باستخدام "مساعد Google". |
الأسئلة الشائعة
يمكنك الاطّلاع على الأقسام التالية للحصول على إجابات عن بعض الأسئلة الشائعة حول نظام التشغيل Android Automotive.
الأجهزة
هل يمكن لتطبيقي الوصول إلى الميكروفون
بالنسبة إلى التطبيقات التي تستهدف الإصدار 10 من نظام التشغيل Android (المستوى 29 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث، يمكنك الاطّلاع على مقالة المشاركة مستندات إدخال الصوت. هذا ليس قبل المستوى 29 لواجهة برمجة التطبيقات.
ما هي واجهات برمجة تطبيقات السيارة التي يمكننا الوصول إليها وكيف يمكننا الوصول إليها؟
تقتصر على واجهات برمجة التطبيقات التي يعرضها المصنّع الأصلي للجهاز. تجري العمليات لتوحيد طريقة وصولك إلى واجهات برمجة التطبيقات هذه.
يمكن للتطبيقات الوصول إلى واجهات برمجة تطبيقات السيارة باستخدام SetProperty()
وGetProperty()
في CarPropertyManager
.
يُرجى الرجوع إلى رمز المصدر
أو المستندات المرجعية للاطّلاع على
قائمة بكل المواقع المتاحة. في حال تمت إضافة تعليقات توضيحية إلى الموقع
مع @SystemApi
، ستقتصر على تطبيقات النظام المُحمَّلة مسبقًا.
ما هي أنواع برامج ترميز الصوت المتوافقة؟
راجِع تفاصيل برنامج ترميز الصوت. في Android CDD.
هل برنامج Widevine DRM متوافق؟
نعم. Widevine DRM
التطوير والاختبار
هل هناك أي قيود أو اقتراحات لاستخدام حِزم SDK والمكتبات التابعة لجهات خارجية؟
ليس لدينا أي إرشادات محدّدة حول استخدام حِزم تطوير البرامج (SDK) والمكتبات التابعة لجهات خارجية. إذا اخترت استخدام حِزم تطوير برامج (SDK) ومكتبات تابعة لجهات خارجية، لا تزال مسؤولاً عن صناعة المحتوى. عن الالتزام بجميع متطلبات جودة تطبيقات السيارات
هل يمكنني استخدام خدمة تعمل في المقدّمة؟
إن حالة الاستخدام الوحيدة المسموح بها للخدمة التي تعمل في المقدّمة هي تنزيل محتوى الاستخدام في وضع عدم الاتصال. إذا كانت لديك حالة استخدام أخرى تريدها لخدمة تعمل في المقدّمة. للاطّلاع على الدعم، يُرجى التواصل معنا باستخدام نظام التشغيل Android Automotive. مجموعة المناقشة
نشر تطبيقات نظام التشغيل Android Automotive
كيف يمكنني نشر تطبيقي الذي يعمل بنظام التشغيل Android Automotive باستخدام Google Play Console؟
وعملية نشر التطبيق تشبه عملية نشر تطبيق هاتف، إلا أنك تستخدم عامل شكل مختلف. لتفعيل نظام التشغيل Android Automotive في تطبيقك. يعمل الجهاز على شكل نظام التشغيل، اتّبِع الخطوات التالية:
- فتح Play Console
- اختيار تطبيقك
- في القائمة اليمنى، انقر على الإصدار > الإعداد > الإعدادات المتقدمة > أشكال الأجهزة:
- انقر على إضافة شكل الجهاز >. Android Automotive، ثم اتّبِع التعليمات الواردة في Play Console.
مصادر إضافية
لمزيد من المعلومات عن نظام التشغيل Android Automotive، يُرجى الاطّلاع على المستندات الإضافية التالية الموارد.
نماذج
الأدلّة
- التصميم لقيادة السيارات
- استخدام التطبيق التجريبي الخاص بوحدة التحكّم في الوسائط
- الإشعارات على نظام التشغيل Android Automotive
- جودة تطبيقات Android للسيارات
المدوّنات
الفيديوهات
- كيفية إنشاء تطبيقات وسائط للسيارات (Android Dev Summit '19)
- كيفية إنشاء تطبيقات Android للسيارات (مؤتمر Google I/O'19)
الإبلاغ عن مشكلة في وسائط نظام التشغيل Android Automotive
إذا واجهت مشكلة أثناء تطوير تطبيق الوسائط لنظام التشغيل Android Automotive نظام التشغيل، يمكنك الإبلاغ عن ذلك باستخدام أداة تتبُّع المشاكل من Google تأكَّد من ملء جميع المعلومات المطلوبة في نموذج المشكلة.
قبل تقديم مشكلة جديدة، تأكَّد مما إذا كان قد سبق الإبلاغ عنها ضمن المشاكل. الحالية. يمكنك الاشتراك والتصويت للمشكلات من خلال النقر على النجمة لمشكلة في لجهاز التتبع. لمزيد من المعلومات، يُرجى مراجعة الاشتراك في مشكلة: