Để bật chế độ phát nội dung nghe nhìn trong Android Auto và Android Automotive OS (AAOS), hãy triển khai các chế độ phát bằng cách đăng ký một phiên phát nội dung nghe nhìn và xử lý các phương thức gọi lại của phiên đó. Trang này giải thích cách:
Đăng ký một đối tượng
MediaSessionCompat
trong dịch vụ trình duyệt nội dung đa phương tiện.Triển khai các phương thức
MediaSessionCompat.Callback
để phản hồi các yêu cầu phát của người dùng.Định cấu hình các thao tác phát tiêu chuẩn và tuỳ chỉnh.
Đặt trạng thái phát ban đầu cho phiên đa phương tiện.
Thêm biểu tượng để cho biết định dạng âm thanh.
Tạo đường liên kết từ các mục nội dung đa phương tiện đang phát.
Android Auto và AAOS sẽ gửi các lệnh điều khiển chế độ phát thông qua MediaSessionCompat
cho dịch vụ của bạn. Bạn phải đăng ký một phiên phát và triển khai các phương thức gọi lại liên quan.
Đăng ký một phiên phát nội dung đa phương tiện
Trong phương thức onCreate
của dịch vụ trình duyệt nội dung đa phương tiện, hãy tạo một thực thể của MediaSessionCompat
, sau đó gọi setSessionToken
để đăng ký phiên phát nội dung đa phương tiện. Đoạn mã này cho biết cách tạo và đăng ký một phiên phát nội dung đa phương tiện:
Kotlin
override fun onCreate() {
super.onCreate()
...
// Start a new MediaSession.
val session = MediaSessionCompat(this, "session tag").apply {
// Set a callback object that implements MediaSession.Callback
// to handle play control requests.
setCallback(MyMediaSessionCallback())
}
sessionToken = session.sessionToken
...
}
Java
public void onCreate() {
super.onCreate();
...
// Start a new MediaSession.
MediaSessionCompat session = new MediaSessionCompat(this, "session tag");
setSessionToken(session.getSessionToken());
// Set a callback object that implements MediaSession.Callback
// to handle play control requests.
session.setCallback(new MyMediaSessionCallback());
...
}
Khi tạo đối tượng phiên phát nội dung đa phương tiện, bạn sẽ đặt đối tượng gọi lại được dùng để xử lý các yêu cầu điều khiển chế độ phát. Bạn tạo đối tượng gọi lại này bằng cách cung cấp cách triển khai lớp MediaSessionCompat.Callback
cho ứng dụng của mình. Phần tiếp theo sẽ thảo luận về cách triển khai đối tượng này.
Triển khai lệnh phát
Khi người dùng yêu cầu phát một mục nội dung đa phương tiện trên ứng dụng của bạn, Android Automotive OS và Android Auto sẽ dùng lớp MediaSessionCompat.Callback
từ đối tượng MediaSessionCompat
của ứng dụng mà họ đã nhận được từ dịch vụ trình duyệt nội dung đa phương tiện của ứng dụng. Khi người dùng muốn điều khiển chế độ phát nội dung, chẳng hạn như tạm dừng phát hoặc chuyển sang bản nhạc tiếp theo, Android Auto và Android Automotive OS sẽ gọi một trong các phương thức của đối tượng gọi lại.
Để xử lý chế độ phát nội dung, ứng dụng của bạn phải mở rộng lớp trừu tượng MediaSessionCompat.Callback
và triển khai các phương thức mà ứng dụng đó hỗ trợ.
Triển khai từng phương thức gọi lại sau đây nếu phù hợp với loại nội dung mà ứng dụng của bạn cung cấp:
onPrepare
- AAOS gọi phương thức này khi nguồn nội dung đa phương tiện thay đổi.
onPlay
Được gọi khi người dùng chọn phát mà không chọn một mục cụ thể. Ứng dụng của bạn phải phát nội dung mặc định hoặc nếu chế độ phát đã bị tạm dừng bằng
onPause
, ứng dụng của bạn sẽ tiếp tục phát.onPlayFromMediaId
Được gọi khi người dùng chọn phát một mục cụ thể. Phương thức này nhận mã nhận dạng mà dịch vụ trình duyệt nội dung đa phương tiện đã chỉ định cho mục nội dung đa phương tiện trong hệ thống phân cấp nội dung.
onPlayFromSearch
Được gọi khi người dùng chọn phát từ một truy vấn tìm kiếm. Ứng dụng phải đưa ra lựa chọn phù hợp dựa trên chuỗi tìm kiếm đã chuyển vào.
onPause
Được gọi khi người dùng chọn tạm dừng phát.
onSkipToNext
Được gọi khi người dùng chọn chuyển sang mục tiếp theo.
onSkipToPrevious
Được gọi khi người dùng chọn chuyển về mục trước đó.
onStop
Được gọi khi người dùng chọn ngừng phát. Hãy ghi đè các phương thức này trong ứng dụng của bạn để cung cấp kết quả đã chọn. Bạn không cần triển khai một phương thức nếu ứng dụng của bạn không hỗ trợ mục đích của phương thức đó. Ví dụ: nếu ứng dụng của bạn phát một sự kiện phát trực tiếp, chẳng hạn như phát sóng chương trình thể thao, thì bạn không cần triển khai
onSkipToNext
. Thay vào đó, hãy sử dụng phương thức triển khai mặc định củaonSkipToNext
.
Ứng dụng của bạn không cần logic đặc biệt nào để phát nội dung qua loa trên ô tô. Khi nhận được một yêu cầu phát nội dung, ứng dụng của bạn sẽ phát âm thanh giống như cách phát nội dung qua loa hoặc tai nghe của người dùng. Android Auto và AAOS sẽ tự động gửi nội dung âm thanh đến hệ thống của ô tô để phát qua loa của ô tô.
Để tìm hiểu thêm về cách phát nội dung âm thanh, hãy xem bài viết Tổng quan về Trình phát nội dung nghe nhìn, Tổng quan về ứng dụng âm thanh và tổng quan về ExoPlayer.
Đặt thao tác phát tiêu chuẩn
Android Auto và AAOS cho thấy bộ điều khiển chế độ phát dựa trên các thao tác được bật trong đối tượng PlaybackStateCompat
. Theo mặc định, ứng dụng của bạn phải hỗ trợ những thao tác sau:
Ứng dụng của bạn có thể hỗ trợ thêm các thao tác sau đây nếu phù hợp với nội dung của ứng dụng:
Ngoài ra, bạn có thể tạo một hàng đợi phát (không bắt buộc) để hiển thị cho người dùng.
Để thực hiện việc này, hãy gọi phương thức setQueue
và setQueueTitle
, bật thao tác ACTION_SKIP_TO_QUEUE_ITEM
rồi xác định lệnh gọi lại onSkipToQueueItem
.
Ngoài ra, hãy hỗ trợ thêm cho biểu tượng Phát hiện nhạc. Đây là chỉ báo cho nội dung đang phát. Để thực hiện việc này, hãy gọi phương thức setActiveQueueItemId
rồi truyền mã của nội dung đang phát vào hàng đợi. Bạn cần cập nhật setActiveQueueItemId
bất cứ khi nào có thay đổi trong hàng đợi.
Android Auto và AAOS hiển thị các nút cho mỗi thao tác đã bật cũng như hàng đợi phát. Khi người dùng nhấp vào các nút này, hệ thống sẽ gọi lệnh gọi lại tương ứng từ MediaSessionCompat.Callback
.
Đặt trước không gian không sử dụng
Android Auto và AAOS sẽ đặt trước không gian trong giao diện người dùng cho các thao tác ACTION_SKIP_TO_PREVIOUS
và ACTION_SKIP_TO_NEXT
. Nếu ứng dụng của bạn không hỗ trợ một trong các chức năng này, thì Android Auto và AAOS sẽ sử dụng không gian để cho thấy mọi thao tác tuỳ chỉnh mà bạn tạo.
Nếu không muốn các thao tác tuỳ chỉnh lấp đầy không gian đó, thì bạn có thể đặt trước không gian. Bằng cách này, Android Auto và AAOS sẽ để trống không gian bất cứ khi nào ứng dụng của bạn không hỗ trợ chức năng tương ứng.
Để làm vậy, hãy gọi phương thức setExtras
bằng một gói dữ liệu bổ sung chứa hằng số tương ứng với các chức năng đã đặt trước.
SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_NEXT
tương ứng với ACTION_SKIP_TO_NEXT
và SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_PREV
tương ứng với ACTION_SKIP_TO_PREVIOUS
. Hãy dùng các hằng số này làm khoá trong gói và sử dụng boolean true
làm giá trị.
Đặt PlaybackState ban đầu
Khi Android Auto và AAOS kết nối với dịch vụ trình duyệt nội dung đa phương tiện của bạn, phiên phát nội dung đa phương tiện sẽ thông báo trạng thái phát nội dung bằng PlaybackStateCompat
.
Ứng dụng của bạn sẽ không tự động bắt đầu phát nhạc khi AAOS hoặc Android Auto kết nối với dịch vụ trình duyệt nội dung đa phương tiện. Thay vào đó, hãy để Android Auto và AAOS tiếp tục hoặc bắt đầu phát dựa trên trạng thái của ô tô hoặc các thao tác của người dùng.
Để thực hiện việc này, hãy đặt PlaybackStateCompat
ban đầu của phiên phát nội dung đa phương tiện thành STATE_STOPPED
, STATE_PAUSED
, STATE_NONE
hoặc STATE_ERROR
.
Các phiên phát nội dung đa phương tiện trong Android Auto và AAOS chỉ kéo dài trong thời hạn của ổ đĩa. Vì vậy, người dùng sẽ thường xuyên bắt đầu và dừng các phiên phát này. Để tạo ra trải nghiệm liền mạch giữa các ổ đĩa, hãy theo dõi trạng thái phiên phát trước đó của người dùng để khi ứng dụng đa phương tiện nhận được yêu cầu tiếp tục, người dùng có thể tự động tiếp tục từ nơi họ đã dừng lại, chẳng hạn mục nội dung đa phương tiện phát gần đây nhất, PlaybackStateCompat
và hàng đợi.
Thêm các thao tác phát tuỳ chỉnh
Bạn có thể thêm thao tác phát tuỳ chỉnh để cho thấy thao tác bổ sung mà ứng dụng đa phương tiện của bạn hỗ trợ. Nếu không gian cho phép (và bạn không đặt trước không gian), thì Android sẽ thêm các thao tác tuỳ chỉnh vào bộ điều khiển truyền tải. Nếu không, các thao tác tuỳ chỉnh sẽ xuất hiện trong trình đơn Mục bổ sung. Android hiển thị các thao tác tuỳ chỉnh theo thứ tự bạn thêm chúng vào PlaybackStateCompat
.
Sử dụng thao tác tuỳ chỉnh để cung cấp hành vi khác với thao tác chuẩn. Không được dùng các thao tác này để thay thế hoặc sao chép các thao tác chuẩn.
Để thêm các thao tác tuỳ chỉnh, hãy sử dụng phương thức addCustomAction
trong lớp PlaybackStateCompat.Builder
. Đoạn mã này cho biết cách thêm một thao tác tuỳ chỉnh vào thao tác "Bắt đầu kênh radio":
Kotlin
val customActionExtras = Bundle()
customActionExtras.putInt(
androidx.media3.session.MediaConstants.EXTRAS_KEY_COMMAND_BUTTON_ICON_COMPAT,
androidx.media3.session.CommandButton.ICON_RADIO)
stateBuilder.addCustomAction(
PlaybackStateCompat.CustomAction.Builder(
CUSTOM_ACTION_START_RADIO_FROM_MEDIA,
resources.getString(R.string.start_radio_from_media),
startRadioFromMediaIcon // or R.drawable.media3_icon_radio
).run {
setExtras(customActionExtras)
build()
}
)
Java
Bundle customActionExtras = new Bundle();
customActionExtras.putInt(
androidx.media3.session.MediaConstants.EXTRAS_KEY_COMMAND_BUTTON_ICON_COMPAT,
androidx.media3.session.CommandButton.ICON_RADIO);
stateBuilder.addCustomAction(
new PlaybackStateCompat.CustomAction.Builder(
CUSTOM_ACTION_START_RADIO_FROM_MEDIA,
resources.getString(R.string.start_radio_from_media),
startRadioFromMediaIcon) // or R.drawable.media3_icon_radio
.setExtras(customActionExtras)
.build());
Để biết ví dụ chi tiết hơn về phương thức này, hãy xem phương thức setCustomAction
trong ứng dụng mẫu Universal Android Music Player trên GitHub. Sau khi bạn tạo thao tác tuỳ chỉnh, phiên phát nội dung đa phương tiện có thể phản hồi các thao tác bằng cách ghi đè phương thức onCustomAction
.
Đoạn mã này cho biết cách ứng dụng của bạn có thể phản hồi một thao tác "Bắt đầu kênh radio":
Kotlin
override fun onCustomAction(action: String, extras: Bundle?) {
when(action) {
CUSTOM_ACTION_START_RADIO_FROM_MEDIA -> {
...
}
}
}
Java
@Override
public void onCustomAction(@NonNull String action, Bundle extras) {
if (CUSTOM_ACTION_START_RADIO_FROM_MEDIA.equals(action)) {
...
}
}
Để tìm hiểu thêm, hãy xem phương thức onCustomAction
trong ứng dụng mẫu Universal Android Music Player trên GitHub.
Tạo biểu tượng cho các thao tác tuỳ chỉnh
Mỗi thao tác tuỳ chỉnh mà bạn tạo cần có một biểu tượng.
Nếu nội dung mô tả của biểu tượng đó khớp với một trong các hằng số CommandButton.ICON_
, hãy đặt giá trị số nguyên cho khoá EXTRAS_KEY_COMMAND_BUTTON_ICON_COMPAT
của các phần bổ sung trong thao tác tuỳ chỉnh. Trên các hệ thống được hỗ trợ, thao tác này sẽ ghi đè tài nguyên biểu tượng được truyền đến CustomAction.Builder
, cho phép các thành phần hệ thống hiển thị nhất quán thao tác của bạn và các thao tác phát khác.
Bạn cũng phải chỉ định một tài nguyên biểu tượng. Các ứng dụng trên ô tô có thể chạy trên nhiều kích thước và mật độ màn hình. Vì vậy, các biểu tượng bạn cung cấp phải là vectơ vẽ được. Dùng một vectơ vẽ được để điều chỉnh tỷ lệ thành phần mà không làm mất chi tiết. Vectơ vẽ được có thể căn chỉnh các cạnh và góc theo ranh giới pixel ở độ phân giải nhỏ hơn.
Nếu một thao tác tuỳ chỉnh có trạng thái (nếu thao tác đó bật hoặc tắt một chế độ phát), hãy cung cấp biểu tượng cho từng trạng thái để giúp người dùng nhận thấy rõ sự thay đổi khi chọn thao tác đó.
Cung cấp các kiểu biểu tượng thay thế cho thao tác bị vô hiệu hoá
Khi không dùng được một thao tác tuỳ chỉnh cho ngữ cảnh hiện tại, hãy hoán đổi biểu tượng thao tác tuỳ chỉnh bằng một biểu tượng thay thế cho biết rằng thao tác đó bị vô hiệu hoá.

Cho biết định dạng âm thanh
Để cho biết rằng nội dung nghe nhìn đang phát sẽ sử dụng một định dạng âm thanh đặc biệt, bạn có thể chỉ định các biểu tượng hiển thị trên những ô tô hỗ trợ tính năng này. Bạn có thể đặt KEY_CONTENT_FORMAT_TINTABLE_LARGE_ICON_URI
và KEY_CONTENT_FORMAT_TINTABLE_SMALL_ICON_URI
trong gói bổ sung của mục nội dung nghe nhìn đang phát (được truyền đến MediaSession.setMetadata
). Hãy đặt cả hai gói bổ sung để phù hợp với nhiều bố cục.
Ngoài ra, bạn có thể đặt thêm KEY_IMMERSIVE_AUDIO
để cho nhà sản xuất thiết bị gốc (OEM) về ô tô biết rằng đây là âm thanh sống động và họ sẽ phải thật cẩn thận khi quyết định có nên áp dụng hiệu ứng âm thanh làm ảnh hưởng đến nội dung sống động hay không.
Thêm đường liên kết của mục đang phát
Bạn có thể định cấu hình mục nội dung nghe nhìn đang phát để phụ đề, nội dung mô tả hoặc cả hai đều là đường liên kết đến các mục nội dung nghe nhìn khác. Việc này cho phép người dùng chuyển nhanh đến các mục liên quan. Ví dụ: họ có thể chuyển sang các bài hát khác của cùng một nghệ sĩ hoặc các tập khác của một podcast. Nếu ô tô hỗ trợ tính năng này, người dùng có thể nhấn vào đường liên kết để duyệt đến nội dung đó.
Để thêm đường liên kết, hãy định cấu hình siêu dữ liệu KEY_SUBTITLE_LINK_MEDIA_ID
(để liên kết từ phụ đề) hoặc KEY_DESCRIPTION_LINK_MEDIA_ID
(để liên kết từ nội dung mô tả). Để biết thông tin chi tiết, hãy xem tài liệu tham khảo về các trường siêu dữ liệu đó.