Tạo ứng dụng đa phương tiện theo mẫu

Ứng dụng đa phương tiện theo mẫu đang trong giai đoạn thử nghiệm
Hiện tại, mọi người đều có thể phát hành ứng dụng đa phương tiện dựa trên mẫu lên kênh thử nghiệm nội bộ và kênh thử nghiệm khép kín trên Cửa hàng Play. Chúng tôi sẽ cho phép phát hành lên kênh phát hành công khai và kênh phát hành chính thức sau này.

Các ứng dụng đa phương tiện sử dụng mẫu Thư viện ứng dụng 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 được tối ưu hoá cho màn hình ô tô và giảm thiểu sự phân tâm 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 Android. Thư viện ứng dụng ô tô 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 trải nghiệm được tạo bằng cấu trúc dữ liệu MediaBrowser trong bài viết 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ế độ điều khiển phát và MediaBrowserService dùng cho nội dung đề xuất cũng như các 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 phần Sử dụng Thư viện ứng dụng Android cho Ô tô, bạn còn phải đáp ứng các yêu cầu sau đây đối với ứng dụng đa phương tiện có mẫu:

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 tối thiểu của ứng dụng ô tô

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 bạn đặt Car App API level tối thiểu 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ó những thông tin sau:

<application>
  ...
  <meta-data android:name="com.google.android.gms.car.application"
      android:resource="@xml/automotive_app_desc"/>
  ...
</application>

Sau đó, thêm phần khai báo mẫu vào automotive_app_desc.xml trong tài nguyên xml. Mã 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 biểu tượng phân bổ 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 hỗ trợ giọng nói cho ứng dụng để cho phép người dùng 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 triển khai chi tiết hơn. Với ứng dụng đa phương tiện có 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 thêm một hành động trong 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 cụm từ tìm kiếm hoặc phát đó. Bạn phải hỗ trợ lệnh thoại để đá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 đa phương tiệ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 cho tiêu đề, trong khi thông tin đa phương tiện và các chế độ điều khiển phát lại do máy chủ điền dựa trên trạng thái của MediaSession trong ứng dụng.

Một trình phát nhạc hiển thị Sounds of Spring của Summer Fielding với ảnh chân dung vuông của một người phụ nữ đang chơi guitar.

Hình 1: MediaPlaybackTemplate có thao tác tiêu đề để mở hàng đợi ở trên cùng.

Ví dụ về mã này cho biết cách tạo một mẫu phát lại mẫu đặt thao tác tiêu đề cho phép người dùng chuyển đến màn hình có hàng đợi 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ỗ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ế độ điều khiển phát nội dung đa phương tiện cho Android Auto. Điều này cũng quan trọng đối với máy chủ lưu trữ để 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 đĩa nhạc, bạn nên sử dụng SectionedItemTemplate. Thành phần này cho phép bạn sử dụng GridSectionRowSection 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.

Giao diện ứng dụng âm nhạc hiển thị các bài hát và đĩa nhạc đã phát gần đây, bao gồm hai hàng dọc và ba ảnh bìa đĩa nhạc theo chiều ngang.

Hình 2: Một SectionedItemTemplate chứa RowSection, theo 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.

Khi duyệt qua nội dung nghe nhìn, điều quan trọng là người dùng 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ả màn hình duyệt nội dung nghe nhìn.

Nếu đang sử 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 trong tiêu đề là một cách khác để thực hiện việc này.