تنفيذ إجراءات الوقاية من التشتيت

بما أنّ هاتف المستخدم يكون متصلاً بمكبّرات صوت السيارة عند استخدام Android Auto، عليك اتّخاذ احتياطات إضافية لمنع تشتيت انتباه السائق.

عند تطوير تطبيقات وسائط متوافقة مع Android Auto، عليك تنفيذ إجراءات وقائية محدّدة للحدّ من تشتيت انتباه السائق. تشمل هذه الضمانات ما يلي:

  • منع تطبيقك من تشغيل الصوت تلقائيًا من خلال مكبّرات الصوت في السيارة، حتى بالنسبة إلى المنبّهات التي يضبطها المستخدم

  • إدارة طريقة عرض Android Auto للإشعارات عند تبديل تطبيقك بين الموسيقى والإعلانات

لتحقيق ذلك، استخدِم واجهة برمجة التطبيقات CarConnection لرصد ما إذا كان الهاتف يعرض المحتوى على شاشة السيارة. وفي حال حدوث ذلك، عليك إيقاف التنبيهات أو توفير واجهة مستخدم على الهاتف لإدارتها. بالنسبة إلى الإعلانات، اضبط مفتاح البيانات الوصفية METADATA_KEY_IS_ADVERTISEMENT لإيقاف الإشعارات المشتّتة.

إيقاف أجهزة الإنذار في السيارة

يجب ألا تبدأ تطبيقات الوسائط في Android Auto تشغيل الصوت من خلال مكبّرات صوت السيارة إلا إذا بدأ المستخدم التشغيل، مثلاً من خلال الضغط على زر تشغيل. حتى المنبّه الذي يضبطه المستخدم من تطبيق الوسائط يجب ألا يبدأ تشغيل الموسيقى من خلال مكبّرات صوت السيارة.

ولاستيفاء هذا الشرط، يمكن لتطبيقك استخدام CarConnection كإشارة قبل تشغيل أي صوت. يمكن لتطبيقك التحقّق مما إذا كان الهاتف يعرض المحتوى على شاشة السيارة. لاحظ LiveData نوع الاتصال. تأكَّد من أنّ القيمة تساوي CONNECTION_TYPE_PROJECTION.

إذا كان هاتف المستخدم يعرض المحتوى على شاشة خارجية، يجب أن تنفّذ تطبيقات الوسائط التي تتيح ضبط المنبّهات أحد الإجراءات التالية:

  • أوقِف المنبّه.

  • إعادة تشغيل المنبّه STREAM_ALARM وتقديم واجهة مستخدم على شاشة الهاتف لإيقاف المنبّه

التعامل مع الإعلانات على الوسائط

تعرض Android Auto تلقائيًا إشعارًا عند تغيير بيانات الوسائط الوصفية أثناء جلسة تشغيل الصوت. عندما ينتقل تطبيق وسائط من تشغيل الموسيقى إلى عرض إعلان، يؤدي عرض إشعار إلى تشتيت انتباه المستخدم. لمنع Android Auto من عرض إشعار، اضبط مفتاح البيانات الوصفية للوسائط METADATA_KEY_IS_ADVERTISEMENT على METADATA_VALUE_ATTRIBUTE_PRESENT:

Kotlin

import androidx.media.utils.MediaConstants

override fun onPlayFromMediaId(mediaId: String, extras: Bundle?) {
    MediaMetadataCompat.Builder().apply {
        if (isAd(mediaId)) {
            putLong(
                MediaConstants.METADATA_KEY_IS_ADVERTISEMENT,
                MediaConstants.METADATA_VALUE_ATTRIBUTE_PRESENT)
        }
        // ...add any other properties you normally would.
        mediaSession.setMetadata(build())
    }
}

Java

import androidx.media.utils.MediaConstants;

@Override
public void onPlayFromMediaId(String mediaId, Bundle extras) {
    MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder();
    if (isAd(mediaId)) {
        builder.putLong(
            MediaConstants.METADATA_KEY_IS_ADVERTISEMENT,
            MediaConstants.METADATA_VALUE_ATTRIBUTE_PRESENT);
    }
    // ...add any other properties you normally would.
    mediaSession.setMetadata(builder.build());
}