주의 분산 방지 수단 구현

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());
}