Các ứng dụng đa phương tiện sử dụng mẫu trong Thư viện ứng dụng dành cho ô tô có thể tuỳ chỉnh trải nghiệm duyệt xem và phát nội dung đa phương tiện, đồng thời đảm bảo trải nghiệm này được tối ưu hoá cho màn hình ô tô và giảm thiểu sự xao nhãng khi lái xe.
Hướng dẫn này giả định rằng bạn đã có một ứng dụng đa phương tiện phát âm thanh trên điện thoại và ứng dụng đa phương tiện đó phù hợp với cấu trúc ứng dụng đa phương tiện của Android. Car App Library cho phép bạn thay thế trải nghiệm trong ứng dụng bằng các mẫu thay vì những mẫu được tạo bằng cấu trúc dữ liệu MediaBrowser Tạo ứng dụng đa phương tiện cho ô tô. Bạn vẫn phải cung cấp MediaSession cho các chế độ phát và MediaBrowserService dùng cho các đề xuất và trải nghiệm thông minh khác.
Định cấu hình tệp kê khai của ứng dụng
Ngoài các bước được mô tả trong bài viết Sử dụng Thư viện ứng dụng Android cho Ô tô, các ứng dụng đa phương tiện dựa trên mẫu phải đáp ứng những yêu cầu sau:
Khai báo tính năng hỗ trợ danh mục trong tệp kê khai của bạn
Ứng dụng của bạn cần khai báo androidx.car.app.category.MEDIA danh mục ứng dụng cho ô tô trong bộ lọc ý định của CarAppService:
<application>
...
<service
...
android:name=".MyCarAppService"
android:exported="true">
<intent-filter>
<action android:name="androidx.car.app.CarAppService" />
<category android:name="androidx.car.app.category.MEDIA"/>
</intent-filter>
</service>
...
<application>
Để có quyền truy cập vào MediaPlaybackTemplate, ứng dụng của bạn cũng cần khai báo quyền androidx.car.app.MEDIA_TEMPLATES trong tệp kê khai:
<manifest ...>
...
<uses-permission android:name="androidx.car.app.MEDIA_TEMPLATES"/>
...
</manifest>
Đặt cấp độ API của ứng dụng trên ô tô tối thiểu
Các ứng dụng đa phương tiện sử dụng MediaPlaybackTemplate chỉ được hỗ trợ trong CAL API 8, hãy đảm bảo rằng Car App API level tối thiểu được đặt thành 8.
<application ...>
...
<meta-data
android:name="androidx.car.app.minCarApiLevel"
android:value="8"/>
...
</application>
Khai báo chức năng hỗ trợ Android Auto
Đảm bảo rằng tệp kê khai của ứng dụng có chứa những nội dung sau:
<application>
...
<meta-data android:name="com.google.android.gms.car.application"
android:resource="@xml/automotive_app_desc"/>
...
</application>
Sau đó, hãy thêm khai báo template vào automotive_app_desc.xml trong tài nguyên xml của bạn. Nội dung sẽ có dạng như sau:
<automotiveApp xmlns:android="http://schemas.android.com/apk/res/android">
<uses name="media"/>
<uses name="template"/>
</automotiveApp>
Cung cấp biểu tượng ghi công
Hãy nhớ thêm một biểu tượng ghi nhận quyền tác giả cho các ứng dụng đa phương tiện được tạo bằng Thư viện ứng dụng cho ô tô.
Hỗ trợ thao tác bằng giọng nói
Bật tính năng giọng nói cho ứng dụng để người dùng có thể hoàn thành các thao tác thông thường mà không cần dùng tay.
Hãy xem phần hỗ trợ thao tác bằng giọng nói cho nội dung nghe nhìn để biết hướng dẫn chi tiết hơn về cách triển khai. Với một ứng dụng đa phương tiện dựa trên mẫu, nếu nhận được lệnh thoại, bạn không cần cập nhật MediaBrowserService bằng kết quả tìm kiếm. Thay vào đó, hãy cân nhắc việc thêm một thao tác vào mẫu phát nội dung nghe nhìn để cho phép người dùng tìm thêm nội dung dựa trên truy vấn phát hoặc tìm kiếm đó. Bạn phải hỗ trợ khẩu lệnh để đáp ứng nguyên tắc về chất lượng VC-1.
Tạo Mẫu phát
MediaPlaybackTemplate hiển thị thông tin phát nội dung nghe nhìn trong ứng dụng đa phương tiện của Thư viện ứng dụng cho ô tô. Mẫu này cho phép bạn đặt tiêu đề và các thao tác có thể tuỳ chỉnh, trong khi thông tin nội dung nghe nhìn và các nút điều khiển phát được máy chủ lưu trữ điền sẵn dựa trên trạng thái của MediaSession trong ứng dụng.
Hình 1:
MediaPlaybackTemplate có thao tác trên tiêu đề để mở hàng đợi ở trên cùng.
Ví dụ về mã này cho thấy cách tạo một mẫu phát ví dụ đặt một thao tác tiêu đề cho phép người dùng chuyển đến màn hình có hàng đợi các bài hát.
val playbackTemplate = MediaPlaybackTemplate.Builder()
.setHeader(
Header.Builder()
.setStartHeaderAction(Action.BACK)
.addEndHeaderAction(
Action.Builder()
.setTitle(model.context.getString(R.string.queue_button_title))
.setIcon(
CarIcon.Builder(
IconCompat.createWithResource(
model.context,
R.drawable.gs_queue_music_vd_theme_24,
))
.build())
.setOnClickListener(showQueueScreen())
.build())
.setTitle(model.context.getString(R.string.media_playback_view_title))
.build())
.build()
Khi bạn sử dụng MediaPlaybackTemplate, hãy đăng ký mã thông báo MediaSession bằng MediaPlaybackManager trong CarAppService. Nếu không làm như vậy, lỗi sẽ xuất hiện khi MediaPlaybackTemplate được gửi đến máy chủ lưu trữ.
import androidx.car.app.media.MediaPlaybackManager
…
override fun onCreateSession(sessionInfo: SessionInfo): Session {
return object : Session() {
…
init {
lifecycle.addObserver(
LifecycleEventObserver { _, event ->
if (event == ON_CREATE) {
val token = ... // MediaSessionCompat.Token
(carContext.getCarService(CarContext.MEDIA_PLAYBACK_SERVICE) as MediaPlaybackManager)
.registerMediaPlaybackToken(token)
}
...
}
)
}
}
}
.registerMediaPlaybackToken là cần thiết để hiển thị thông tin và các chế độ kiểm soát chế độ phát nội dung nghe nhìn cho Android Auto. Điều này cũng quan trọng để máy chủ tạo thông báo dành riêng cho nội dung nghe nhìn.
Sắp xếp nội dung nghe nhìn bằng mẫu
Để sắp xếp nội dung nghe nhìn để duyệt xem, chẳng hạn như bài hát hoặc album, bạn nên dùng SectionedItemTemplate. Thành phần này cho phép bạn dùng GridSection và RowSection cùng nhau để tạo bố cục kết hợp danh sách hình ảnh và mục văn bản.
Hình 2: SectionedItemTemplate chứa RowSection, sau đó là GridSection
Sử dụng SectionedItemTemplate bên trong TabTemplate
Một cách thuận tiện để phân loại nội dung nghe nhìn trong ứng dụng là sử dụng SectionedItemTemplate bên trong TabTemplate.
val template =
SectionedItemTemplate.Builder()...build();
val tabTemplate =
TabTemplate.Builder(tabCallback)
.setTabContents(TabContents.Builder(template).build)
.setHeaderAction(Action.APP_ICON)
…
.build();
Để biết thêm thông tin chi tiết về cách thiết kế giao diện người dùng của ứng dụng đa phương tiện bằng các mẫu này, hãy xem phần Ứng dụng đa phương tiện.
Chuyển đến các chế độ phát
Khi duyệt qua nội dung nghe nhìn, người dùng cần có thể nhanh chóng chuyển đến MediaPlaybackTemplate mà không bị phân tâm. Để đáp ứng yêu cầu về chất lượng MFT-1, ứng dụng của bạn phải có cách truy cập vào MediaPlaybackTemplate từ tất cả các màn hình duyệt xem nội dung nghe nhìn.
Nếu đang dùng SectionedItemTemplate, bạn có thể thực hiện việc này bằng cách thêm một nút hành động nổi chuyển bạn đến màn hình phát nội dung nghe nhìn. Đối với các mẫu khác, thao tác tiêu đề là một cách khác để đạt được điều này.