实现注意力分散预防措施

由于使用 Android Auto 时用户的手机会连接到汽车的扬声器,因此您必须采取额外的预防措施,防止驾驶员分心。

开发 Android Auto 媒体应用时,请实现特定的安全措施,以最大限度地减少驾驶员分心。这些保障措施包括:

  • 防止应用通过汽车扬声器自动播放音频,即使是用户设定的闹钟也不例外。

  • 管理当应用在音乐和广告之间切换时,Android Auto 如何显示通知。

为此,请使用 CarConnection API 检测手机是否投屏到汽车屏幕。如果支持,则停用闹钟或提供用于管理闹钟的手机界面。 对于广告,请设置 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());
}