از آنجا که هنگام استفاده از اندروید اتو، تلفن کاربر به بلندگوهای خودرو متصل است، باید اقدامات احتیاطی بیشتری را برای جلوگیری از حواسپرتی راننده انجام دهید.
هنگام توسعه برنامههای رسانهای اندروید اتو، اقدامات حفاظتی خاصی را برای به حداقل رساندن حواسپرتی راننده اجرا کنید. این اقدامات حفاظتی عبارتند از:
جلوگیری از پخش خودکار صدا از بلندگوهای خودرو توسط برنامه شما، حتی برای آلارمهای زمانبندیشده توسط کاربر.
مدیریت نحوه نمایش اعلانها در اندروید اتو هنگام تغییر برنامه بین موسیقی و تبلیغات.
برای دستیابی به این هدف، از CarConnection API برای تشخیص اینکه آیا تصویر تلفن روی صفحه نمایش خودرو نمایش داده میشود یا خیر، استفاده کنید. در این صورت، آلارمها را غیرفعال کنید یا یک رابط کاربری روی تلفن برای مدیریت آنها ارائه دهید. برای تبلیغات، کلید متادیتای METADATA_KEY_IS_ADVERTISEMENT را برای سرکوب اعلانهای مزاحم تنظیم کنید.
خاموش کردن آلارم در خودرو
برنامههای رسانهای اندروید اتو نباید شروع به پخش صدا از طریق بلندگوهای خودرو کنند، مگر اینکه کاربر مثلاً با فشار دادن دکمه پخش، پخش را شروع کند. حتی یک زنگ هشدار برنامهریزیشده توسط کاربر از برنامه رسانهای شما نباید شروع به پخش موسیقی از طریق بلندگوهای خودرو کند.
برای برآورده کردن این نیاز، برنامه شما میتواند قبل از پخش هرگونه صدا، CarConnection به عنوان سیگنال استفاده کند. برنامه شما میتواند بررسی کند که آیا تلفن روی صفحه نمایش ماشین تصویر پخش میکند یا خیر. به LiveData برای نوع اتصال توجه کنید. تأیید کنید که مقدار آن برابر با CONNECTION_TYPE_PROJECTION است.
اگر تلفن کاربر در حال پخش تصویر است، برنامههای رسانهای که از آلارم پشتیبانی میکنند باید یکی از این اقدامات را انجام دهند:
زنگ هشدار را غیرفعال کنید.
زنگ هشدار
STREAM_ALARMرا دوباره پخش کنید و یک رابط کاربری روی صفحه گوشی ارائه دهید تا زنگ هشدار غیرفعال شود.
مدیریت تبلیغات رسانهای
به طور پیشفرض، اندروید اتو هنگام تغییر ابردادههای رسانهای در طول پخش صدا، یک اعلان نمایش میدهد. وقتی یک برنامه رسانهای از پخش موسیقی به اجرای تبلیغات تغییر حالت میدهد، نمایش یک اعلان حواس کاربر را پرت میکند. برای جلوگیری از نمایش اعلان در اندروید اتو، کلید ابرداده رسانهای METADATA_KEY_IS_ADVERTISEMENT روی METADATA_VALUE_ATTRIBUTE_PRESENT تنظیم کنید:
کاتلین
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())
}
}
جاوا
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());
}