注意散漫に対する安全保護対策を実装する

Android Auto の使用中、ユーザーのスマートフォンは車載スピーカーに接続されているため、ドライバーの注意散漫を防止するために追加の予防措置を講じる必要があります。

Android Auto メディアアプリを開発する際は、ドライバーの注意散漫を最小限に抑えるための特定の安全対策を実装してください。これらの安全対策には、次のものがあります。

  • ユーザーがスケジュールしたアラームであっても、アプリが車載スピーカーで音声を自動再生しないようにします。

  • アプリが音楽と広告を切り替えるときに Android Auto が通知を表示する方法を管理します。

これを実現するには、CarConnection API を使用して、スマートフォンが車の画面に投影されているかどうかを検出します。アラームが鳴る場合は、アラームを無効にするか、アラームを管理するためのスマートフォン上の UI を提供します。広告の場合は、METADATA_KEY_IS_ADVERTISEMENT メタデータキーを設定して、邪魔な通知を抑制します。

車内でのアラームを抑制する

Android Auto メディアアプリは、ユーザーが再生を開始した場合(再生ボタンを押した場合など)を除き、車載スピーカーで音声の再生を開始してはなりません。メディアアプリでユーザーがアラームをスケジュールした場合であっても、それによって車載スピーカーで音楽を再生してはいけません。

この要件を満たすために、アプリは音声を再生する前に、シグナルとして CarConnection を使用できます。アプリは、スマートフォンが車載ディスプレイに投影されているかどうかを確認できます。接続タイプLiveData を確認します。値が CONNECTION_TYPE_PROJECTION と等しいことを確認します。

ユーザーのスマートフォンが投影されている場合、アラームをサポートするメディアアプリは次のいずれかを行う必要があります。

  • アラームを無効にする。

  • アラーム STREAM_ALARM を再度再生し、アラームを無効にする UI をスマートフォン画面に表示する。

メディア広告を処理する

デフォルトでは、Android Auto は、音声再生セッション中にメディア メタデータが変更されると、通知を表示します。メディアアプリが音楽の再生から広告の掲載に切り替えたときに通知を表示すると、ユーザーの注意が散漫になります。Android Auto が通知を表示しないようにするには、メディア メタデータのキー METADATA_KEY_IS_ADVERTISEMENTMETADATA_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());
}