เนื่องจากโทรศัพท์ของผู้ใช้เชื่อมต่อกับลำโพงของรถเมื่อใช้ 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_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());
}