Để bật tính năng phát nội dung đa phương tiện trong Android Auto và Android Automotive OS (AAOS), hãy triển khai bộ điều khiển chế độ phát bằng cách đăng ký một phiên phát nội dung đa phương tiện và xử lý các phương thức gọi lại của phiên phát đó. Trang này giải thích cách:
Đăng ký đối tượng
MediaSessionCompattrong 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 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 phát nội dung đ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ã sau đâ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 MediaSessionCompat.Callback
lớp từ đối tượng MediaSessionCompat của ứng dụng mà hệ thống
nhận được từ dịch vụ trình duyệt nội dung đa phương tiện của bạn. Khi người dùng muốn điều khiển chế độ phát, 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 MediaSessionCompat.Callback trừu tượng và triển khai các phương thức mà ứng dụng của bạn 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, thì ứ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 được 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 đã được truyề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 sang mục trước đó.
onStopĐược gọi khi người dùng chọn dừng phát. 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ư khi 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 Tổng quan về Media Player, 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 PlaybackStateCompat
đối tượng. 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:
Bạn cũng có thể tạo một hàng đợi phát để cho người dùng xem.
Để làm vậy, hãy gọi các phương thức setQueue và setQueueTitle, bật
thao tác ACTION_SKIP_TO_QUEUE_ITEM và xác định lệnh gọi lại
onSkipToQueueItem.
Ngoài ra, hãy hỗ trợ thêm cho biểu tượng Đang phát. Đây là chỉ báo cho nội dung đang phát. Để làm vậy, hãy gọi phương thức setActiveQueueItemId và truyền
mã nhận dạng của mục đang phát trong 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à dùng giá trị 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, 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 không được 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. Trạng thái này bao gồm mục nội dung đa phương tiện phát gần đây nhất, đối tượng PlaybackStateCompat và hàng đợi.
Thêm 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 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 cho thấy các thao tác tuỳ chỉnh theo thứ tự bạn thêm 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 dùng các thao tác này để thay thế hoặc sao chép thao tác chuẩn.
Để thêm thao tác tuỳ chỉnh, hãy sử dụng addCustomAction phương thức trong
PlaybackStateCompat.Builder lớp. Đoạn mã sau đây cho biết cách thêm một thao tác tuỳ chỉnh vào "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 setCustomAction
phương thức trong ứng dụng mẫu Universal Android Music Player trên GitHub. Sau khi
tạo thao tác tuỳ chỉnh, phiên phát nội dung đa phương tiện của bạ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ã sau đâ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 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 CommandButton.ICON_
hằng số, hãy đặt giá trị số nguyên cho
EXTRAS_KEY_COMMAND_BUTTON_ICON_COMPAT khoá của các phần bổ sung của thao tác tuỳ chỉnh. Trên các hệ thống được hỗ trợ, việ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. Hãy dùng drawable vector để điều chỉnh theo tỷ lệ thành phần mà không làm mất chi tiết. Drawable vector có thể căn chỉnh viền 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/tắ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 một thao tác tuỳ chỉnh không dùng được cho bối 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 thấy thao tác đó bị vô hiệu hoá.
Cho biết định dạng âm thanh
Để cho biết rằng nội dung đa phương tiệ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 đa phương tiện đang phát (đã truyền đến MediaSession.setMetadata).
Hãy đặt cả hai phần 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 từ mục đang phát
Bạn có thể định cấu hình mục nội dung đa phương tiệ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 đa phương tiệ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 cùng một podcast. Nếu ô tô hỗ trợ tính năng này thì 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 đó.