Nền tảng ứng dụng

Ô tô là bức vẽ của bạn: Khai phá tiềm năng phát triển Android cho ô tô

Loa

Giới thiệu

Giới thiệu về bài thuyết trình

Khi màn hình trên ô tô ngày càng phổ biến trên các xe chạy Android Auto và Android Automotive OS, nhà phát triển phải đối mặt với một thách thức kép: mang đến trải nghiệm phong phú, thích ứng khi đỗ xe và trải nghiệm an toàn cho người lái xe, dựa trên mẫu khi lái xe. Trong phiên kỹ thuật toàn diện kéo dài 30 phút này, chúng ta sẽ tìm hiểu về cấu trúc toàn diện và các phương pháp phát triển để điều chỉnh ứng dụng Android cho ô tô.

Từ các nguyên tắc cơ bản về thiết kế ứng dụng để sử dụng trên ô tô cho đến những phương pháp mới nhất để xây dựng trải nghiệm đa phương tiện chuyển từ âm thanh sang video khi ô tô chuyển từ chế độ lái sang chế độ đỗ, bạn sẽ nắm được mọi thông tin cần thiết để đưa ứng dụng của mình lên ô tô.

Tóm tắt

  • Android cho Ô tô nhắm đến hai nền tảng: Android Auto và Android Automotive OS. Một phiên bản chiếu từ điện thoại, còn phiên bản kia chạy trực tiếp trên xe.
  • Thư viện ứng dụng cho ô tô cung cấp các mẫu cho giao diện được tối ưu hoá cho việc lái xe, thích ứng với nhiều cấu hình phần cứng của ô tô.
  • Ứng dụng khi đỗ xe dựa vào các hoạt động tiêu chuẩn của Android để mang lại trải nghiệm phong phú như phát trực tuyến video, trò chơi và trình duyệt web.
  • Thư viện ứng dụng cho ô tô phiên bản 1.9 mang đến các thành phần giao diện người dùng mới và mã thông báo tuỳ chỉnh thương hiệu. Thư viện này cũng mở rộng khả năng hỗ trợ mẫu nội dung nghe nhìn cho Android Automotive OS.
  • Tính năng chuyển từ trạng thái đỗ xe sang lái xe sẽ tự động khởi chạy các hoạt động video gốc khi đỗ xe, sau đó chuyển về mẫu nội dung nghe nhìn để duy trì âm thanh không bị gián đoạn khi lái xe.

Tài nguyên

Gemini Notebook

Chủ đề

  • android-for-cars
  • android-auto
  • android-automotive-os
  • car-app-library
  • media3
  • parked-apps

Bản chép lời

Giới thiệu về Android cho Ô tô

  • Được rồi.

  • Chào các bạn.

  • Cảm ơn bạn đã tham gia phiên thảo luận này, Chiếc xe là bức vẽ của bạn.

  • Phiên này nói về việc khai phá tiềm năng phát triển Android cho ô tô.

  • Tôi là Paul Lammertsma.

  • Và tôi là Thomas Weathers.

  • Chúng tôi là kỹ sư quan hệ với nhà phát triển trong nhóm Android cho Ô tô.

  • Tôi chắc rằng nhiều người trong số các bạn đã dành nhiều thời gian và công sức để đảm bảo ứng dụng của mình có giao diện đẹp mắt và hoạt động hiệu quả trên nhiều loại màn hình và thiết bị, điện thoại, thiết bị có thể gập lại, máy tính bảng, v.v.

  • Hôm nay, chúng ta sẽ tập trung vào một màn hình mà có thể bạn chưa từng nghĩ đến.

  • Điều này có thể giúp bạn tiếp cận người dùng theo cách độc đáo.

  • Đó là màn hình ô tô.

  • Hãy bắt đầu bằng thông tin tổng quan ngắn gọn về Android cho Ô tô.

  • Android cho Ô tô không phải là một hệ thống nguyên khối.

  • Có hai nền tảng mà bạn có thể nhắm đến.

  • Đầu tiên là Android Auto, một hệ thống được chiếu từ điện thoại.

  • Với Android Auto, ứng dụng sẽ thực thi trên điện thoại và chiếu giao diện người dùng lên màn hình trong ô tô bằng kết nối có dây hoặc không dây.

  • Thứ hai là Android Automotive OS, một biến thể của Android chạy trực tiếp trên xe.

  • Android Automotive OS chạy độc lập với điện thoại, có quyền truy cập trực tiếp vào phần cứng của xe, những thứ như điều khiển điều hoà và đài, và quan trọng là nó cũng quản lý kết nối dữ liệu của riêng mình.

  • Một số xe chạy Android Automotive OS là xe được cài sẵn Google.

  • Ô tô được cài sẵn Google cũng đi kèm với các ứng dụng và dịch vụ của Google, chẳng hạn như Cửa hàng Play, Gemini và Google Maps.

  • Mặc dù có hai nền tảng, nhưng mục tiêu của chúng tôi là giúp bạn dễ dàng xây dựng một lần và có thể triển khai các ứng dụng mang lại trải nghiệm tuyệt vời trên cả hai nền tảng.

  • Sau đây là ví dụ về một ứng dụng đa phương tiện được tạo một lần bằng Thư viện ứng dụng cho ô tô, cũng như giao diện của ứng dụng đó trên cả Android Auto và Android Automotive OS, trên nhiều kích thước và hình dạng màn hình.

  • Có nhiều loại thiết bị và nền tảng mà bạn có thể xây dựng.

  • Vậy thì câu hỏi đặt ra là tại sao lại cần có cho ô tô?

  • Trước tiên, quy mô ở đây khá lớn.

  • Hiện có hơn 250 triệu ô tô tương thích với Android Auto đang lưu thông trên đường và hơn 100 mẫu ô tô được cài sẵn Google thuộc 16 thương hiệu khác nhau.

  • Khi ứng dụng của bạn có mặt trên ô tô, bạn sẽ tiếp cận được người dùng trong quá trình di chuyển hằng ngày, đi và về từ các hoạt động gia đình, làm việc vặt và thậm chí là trong các chuyến đi đường dài.

  • Tại Hoa Kỳ, theo Khảo sát lái xe năm 2024 của AAA, người lái xe dành trung bình 60 phút mỗi ngày để lái xe.

  • Tuy nhiên, bạn không chỉ tiếp cận người dùng khi họ đang lái xe.

  • Bạn cũng tiếp cận được họ khi họ đang đỗ xe.

  • Có thể họ đang sạc xe tại trạm sạc xe điện hoặc đang xếp hàng đón con ở trường.

  • Cùng với sự gia tăng của màn hình dành riêng cho hành khách, chúng tôi hy vọng sẽ có thêm nhiều cơ hội trong tương lai để tăng mức độ tương tác với người dùng.

  • Được rồi.

  • Bây giờ, hãy cùng tìm hiểu các loại trải nghiệm mà bạn có thể xây dựng cho ô tô.

  • Để hiểu cách xây dựng ứng dụng cho ô tô, bạn nên nắm được hai tình huống và trạng thái chính của ứng dụng khi chạy trong xe.

  • Đầu tiên là những ứng dụng bạn dùng khi lái xe.

  • Đây là những trải nghiệm được tối ưu hoá cho việc lái xe và có thể dùng khi xe đang di chuyển.

  • Trong đó có các ứng dụng thuộc những danh mục mà bạn thấy trên màn hình, chẳng hạn như ứng dụng âm thanh (thường được gọi là ứng dụng đa phương tiện), ứng dụng nhắn tin và liên lạc, ứng dụng chỉ đường, v.v.

  • Trải nghiệm được tối ưu hoá cho việc lái xe phải tuân thủ các tiêu chí nghiêm ngặt về biện pháp bảo vệ chống phân tâm.

  • Có một số điểm đặc biệt cần lưu ý về cách xây dựng giao diện người dùng cho một ứng dụng để có thể sử dụng ứng dụng đó một cách an toàn khi xe đang di chuyển.

  • Hiện có một vài cách để tạo ứng dụng tối ưu hoá cho việc lái xe.

Tổng quan về thư viện ứng dụng cho ô tô

  • Nhưng trong buổi nói chuyện này, chúng ta sẽ tập trung cụ thể vào việc sử dụng Thư viện ứng dụng cho ô tô.

  • Đây là một nhóm thư viện Jetpack cung cấp khung theo mẫu, mang đến giao diện người dùng được tối ưu hoá cho quá trình lái xe, đồng thời đảm nhiệm việc điều chỉnh để thích ứng với các cấu hình phần cứng trong ô tô.

  • Vì vậy, hãy cân nhắc các yếu tố như phương thức nhập, kích thước màn hình và tỷ lệ khung hình.

  • Mặc dù đây không phải là cách duy nhất để tạo trải nghiệm tối ưu hoá cho hoạt động lái xe, nhưng phương pháp mà tôi muốn tập trung vào trong bài nói chuyện này là tạo bằng Thư viện ứng dụng Android cho Ô tô.

  • Chúng tôi thường gọi tắt là CAL.

  • Như tôi vừa đề cập, Thư viện ứng dụng cho ô tô là một nhóm thư viện giúp bạn xây dựng ứng dụng để dùng trong xe.

  • Đây là một khung theo mẫu cung cấp giao diện người dùng được tối ưu hoá cho quá trình lái xe, đồng thời đảm nhiệm việc điều chỉnh để thích ứng với các cấu hình phần cứng khác nhau.

  • Bạn có thể xây dựng ứng dụng và tự tin rằng ứng dụng đó sẽ hoạt động tốt trên tất cả các cấu hình khác nhau, cho dù đang chạy Android Auto hay Android Automotive OS.

  • Các ứng dụng được xây dựng bằng CAL có thể dựa vào kiến trúc máy chủ lưu trữ-ứng dụng khách này.

  • Ứng dụng lưu trữ (bản thân Android Auto hoặc Google Automotive App Host trong trường hợp ô tô được cài sẵn Google) là trình kết xuất hệ thống.

  • Cuối cùng, lớp này sẽ kiểm soát nội dung cần hiển thị cho người dùng trên màn hình của họ.

  • Vì vậy, với tư cách là nhà phát triển ứng dụng, bạn không phải là người vẽ pixel cuối cùng.

  • Thay vào đó, bạn sẽ cung cấp dữ liệu có cấu trúc và trạng thái của dữ liệu cho các mẫu Thư viện ứng dụng cho ô tô.

  • Sau đó, máy chủ này sẽ lấy dữ liệu này và vẽ dữ liệu một cách an toàn, tuân thủ các quy định về an toàn, với bố cục được tối ưu hoá để chống phân tâm.

  • Bây giờ, hãy cùng xem các lớp trong CAL, những lớp bạn cần mở rộng để tạo ứng dụng, bắt đầu bằng CarAppService.

  • Đây là một lớp con của dịch vụ Android, đóng vai trò là điểm truy cập để các ứng dụng lưu trữ giao tiếp với ứng dụng khách. Mục đích của lớp con này là tạo các thực thể phiên mà sau đó máy chủ lưu trữ sẽ tương tác.

  • Bạn có thể xem phiên là một thực thể của ứng dụng khách chạy trên màn hình của xe.

  • Giống như các thành phần Android khác, thành phần này có vòng đời riêng có thể dùng để khởi tạo và chia nhỏ các tài nguyên được sử dụng trong suốt quá trình tồn tại của thực thể phiên.

  • Đây là mối quan hệ một với nhiều giữa CarAppService và một phiên.

  • Ví dụ: một CarAppService có thể có hai thực thể phiên, một dành cho màn hình chính và một dành cho màn hình phân cụm cho các ứng dụng chỉ đường có hỗ trợ màn hình phân cụm.

  • Sau đây là ví dụ về trường hợp ô tô có màn hình chính và màn hình cụm đồng hồ, mỗi màn hình được liên kết với một phiên chuyên dụng. Đây cũng là cách bạn (với tư cách là nhà phát triển ứng dụng) có thể hỗ trợ các loại xe có nhiều màn hình.

  • Sau đó, trong một phiên, các thực thể màn hình chịu trách nhiệm tạo giao diện người dùng được các ứng dụng lưu trữ kết xuất.

  • Các giao diện người dùng này được thể hiện bằng các lớp mẫu, mỗi lớp mô hình hoá một kiểu bố cục cụ thể, chẳng hạn như lưới hoặc danh sách.

  • Vì vậy, mỗi phiên quản lý một ngăn xếp gồm nhiều thực thể màn hình xử lý luồng người dùng thông qua nhiều phần của ứng dụng. Giống như phiên, màn hình cũng có vòng đời riêng mà bạn có thể kết nối vào đó.

  • Tuy nhiên, việc máy chủ lưu trữ đang kết xuất giao diện người dùng và bạn đang sử dụng các mẫu Thư viện ứng dụng cho ô tô không có nghĩa là bạn bị ràng buộc chặt chẽ hoặc không thể tuỳ chỉnh ứng dụng của mình.

  • Có rất nhiều mẫu và thành phần mà bạn có thể sử dụng, đồng thời bạn cũng có thể kết hợp để có được trải nghiệm như mong muốn.

  • Có các mẫu đa năng mà mọi loại ứng dụng trong Thư viện ứng dụng dành cho ô tô đều có thể sử dụng, và có các mẫu chuyên dụng dành cho những trải nghiệm trong ứng dụng cụ thể, chẳng hạn như chỉ đường hoặc địa điểm yêu thích.

  • Nhưng trước khi đi sâu vào chi tiết về việc xây dựng trải nghiệm tối ưu hoá cho việc lái xe, tôi muốn đề cập đến một tình huống khác mà bạn có thể chạy ứng dụng trên ô tô: khi ô tô đang đỗ.

Phát triển ứng dụng cho ô tô đang đỗ

  • Có một số danh mục ứng dụng chỉ có thể dùng khi xe đang đỗ, bao gồm cả những ứng dụng như ứng dụng video, trò chơi và trình duyệt.

  • Nhưng khi xe không di chuyển, các nguyên tắc về sự phân tâm của người lái xe sẽ được dỡ bỏ và bạn có thể cung cấp trải nghiệm phù hợp hơn với giao diện người dùng thích ứng hiện có.

  • Ứng dụng khi đỗ xe dựa trên hoạt động và tương tự hoặc thậm chí giống với các hoạt động được dùng trên các thiết bị khác, chẳng hạn như điện thoại hoặc máy tính bảng. Chúng tôi sẽ nói chi tiết về ứng dụng khi đỗ xe trong phần tiếp theo.

  • Mặc dù trải nghiệm trong ứng dụng đỗ xe sử dụng lại các Hoạt động thích ứng hiện có, nhưng vẫn có những Nguyên tắc về chất lượng dành riêng cho ô tô mà bạn cần đáp ứng, từ nội dung khai báo tệp kê khai và vết cắt trên màn hình cho đến việc tạm dừng phát khi ô tô bắt đầu di chuyển.

  • Để giúp tự động hoá công việc đó, chúng tôi đã ra mắt một kỹ năng mới trên Android cho các ứng dụng đỗ xe.

  • Vì vậy, trước khi bắt đầu, hãy đảm bảo rằng bạn đã cài đặt Android CLI. Bạn có thể tìm thấy Android CLI qua đường liên kết ngắn này.

  • Sau khi thiết lập xong, hãy chạy lệnh android skills list để khám phá các kỹ năng hiện có.

    android skills list
    android skills add android-for-cars-parked-apps
  • Có rất nhiều kỹ năng khác nhau mà bạn có thể sử dụng để đưa quá trình phát triển Android của mình lên một tầm cao mới.

  • Và cụ thể đối với Android cho ô tô, bạn có thể sử dụng android skills add android-for-cars-parked-apps để thêm kỹ năng vào bối cảnh của nhân viên hỗ trợ.

  • Giờ đây, bất kể tác nhân AI yêu thích của bạn là gì, tác nhân đó đều có thể hướng dẫn bạn từng bước để định cấu hình tệp kê khai cho Android Auto hoặc Android Automotive OS, xử lý phần lồng ghép cửa sổ ô tô và những việc như điều hướng quay lại, thực thi các quy định hạn chế về việc phát nội dung gây mất tập trung cho người lái xe, thậm chí còn có thể kiểm tra ứng dụng video, trò chơi hoặc trình duyệt của bạn trước khi bạn gửi đến Google Play.

Tổng quan về danh mục ứng dụng dành cho ô tô

  • Vì vậy, việc xây dựng ứng dụng cho ô tô cũng có một chút khác biệt do khái niệm về các danh mục ứng dụng này.

  • Như tôi đã đề cập trước đó, có một số danh mục ứng dụng có thể dùng được khi lái xe và có những danh mục ứng dụng khác có thể dùng được khi đỗ xe.

  • Những danh mục được làm nổi bật là những danh mục có thể dùng khi lái xe.

  • Một số ứng dụng trong số này được ký hiệu là CAL, như tôi đã đề cập, đây là Thư viện ứng dụng cho ô tô và các ứng dụng trong danh mục này sử dụng các mẫu như những mẫu chúng ta vừa thấy.

  • Bây giờ, tôi sẽ nhanh chóng điểm qua những điều này, tôi sẽ không đi sâu vào chi tiết.

  • Bắt đầu với các ứng dụng đa phương tiện, đây là những ứng dụng phát âm thanh chứ không phải video.

  • Có hai cách để tạo các thành phần này.

  • Lựa chọn ở trên cùng, được biểu thị bằng MediaBrowserService, là một trong những lựa chọn đơn giản nhất.

  • Bạn chỉ cần cung cấp siêu dữ liệu, còn giao diện màn hình thông tin giải trí sẽ hoàn toàn đảm nhận việc kết xuất giao diện người dùng của trình duyệt nội dung nghe nhìn và trình phát theo cách tối ưu hoá cho ô tô.

  • Lựa chọn còn lại là xây dựng ứng dụng đa phương tiện bằng Thư viện ứng dụng cho ô tô. Lựa chọn này giúp bạn có thêm quyền kiểm soát và lựa chọn để tuỳ chỉnh cách bạn tạo kiểu và trình bày ứng dụng đa phương tiện. Thomas sẽ cho chúng ta biết thêm về điều đó ngay sau đây.

  • Tất nhiên, ứng dụng chỉ đường là một trường hợp sử dụng chính, cung cấp tuyến đường và thông tin đường đi từng chặng.

  • Ứng dụng dành cho tài xế đi chung xe cũng thuộc danh mục này.

  • Ứng dụng địa điểm yêu thích giúp bạn tìm thấy các địa điểm hữu ích ở gần, chẳng hạn như bộ sạc xe điện hoặc bãi đỗ xe.

  • Ứng dụng Internet vạn vật (IoT) cho phép bạn truy cập vào các thiết bị thông minh khi di chuyển, chẳng hạn như quản lý nhà.

  • Ngoài ra, bạn cũng có thể dùng các ứng dụng thời tiết để xem thông tin ra-đa theo thời gian thực, cảnh báo bão và thông tin dự báo theo vị trí cụ thể.

  • Cuối cùng, giao tiếp được chia thành ba danh mục phụ: mở rộng thông báo cơ bản vào ô tô, hoặc ứng dụng nhắn tin và gọi video.

  • Và sau đó là các danh mục tạm dừng: ứng dụng phát trực tuyến, trò chơi và trình duyệt web.

  • Tôi cũng rất vui được thông báo rằng từ vài tuần trước, tất cả nhà phát triển đều có thể phát hành trò chơi trên Android Auto và Android Automotive OS.

  • Bạn sẽ thấy một số danh mục có trạng thái là Mở, một số danh mục có trạng thái là Đang trong giai đoạn thử nghiệm và một số danh mục có trạng thái là Sắp ra mắt.

  • Mở có nghĩa là bất kỳ nhà phát triển nào cũng có thể gửi ứng dụng thuộc danh mục này thẳng đến kênh phát hành công khai.

  • Trạng thái thử nghiệm có nghĩa là mặc dù bạn có thể phát hành lên kênh nội bộ hoặc kênh khép kín, nhưng ứng dụng không thể được phát hành lên kênh phát hành công khai trừ phi bạn được chấp nhận tham gia chương trình tiếp cận sớm.

  • Tài liệu về từng danh mục này có thêm thông tin và đường liên kết đến biểu mẫu bày tỏ sự quan tâm của chúng tôi.

  • Còn Sắp ra mắt là dành cho những danh mục hiện chưa được hỗ trợ, nhưng chúng tôi có kế hoạch hỗ trợ trong tương lai.

  • Mục tiêu cuối cùng của chúng tôi là hợp nhất nền tảng.

  • Chúng tôi muốn bạn có thể xây dựng và tiếp cận nhiều người dùng nhất bằng cách viết một lần và phân phối cho cả Android Auto và Android Automotive OS, bất kể danh mục nào.

  • Bây giờ, hãy cùng Thomas tìm hiểu về nội dung nghe nhìn.

Nội dung cập nhật về nội dung nghe nhìn trong thư viện ứng dụng cho ô tô

  • Trân trọng.

  • Tuyệt vời.

  • Vì vậy, năm ngoái, chúng tôi đã ra mắt Thư viện ứng dụng cho ô tô dành cho các ứng dụng đa phương tiện trong phiên bản 1.8, mang đến giao diện người dùng duyệt xem theo mẫu và các thao tác tuỳ chỉnh cho Android Auto.

  • Trong đó có mẫu phát nội dung nghe nhìn mà bạn thấy ở bên trái.

  • Năm nay, tại I/O, chúng tôi đã giới thiệu thêm nhiều giao diện người dùng có thể duyệt xem thông qua Thư viện ứng dụng cho ô tô phiên bản 1.9.

  • Vì vậy, khi CAL 1.9 đạt đến giai đoạn thử nghiệm, bạn hiện có thể sử dụng các bản cập nhật tính năng chính trên Auto và Automotive OS.

  • Các điểm nổi bật bao gồm khả năng tuỳ chỉnh thương hiệu thông qua biểu thức ứng dụng, cho phép bạn điều chỉnh mã màu và hình dạng bằng bố cục do máy chủ kết xuất trong khi vẫn duy trì các quy tắc an toàn, cùng với các thành phần giao diện người dùng mới như phần nổi bật, mục danh sách thu gọn, khối có thể cuộn và trình phát thu nhỏ cố định.

  • Ngoài ra, CAL 1.9 còn mở rộng khả năng hỗ trợ mẫu nội dung nghe nhìn cho AAOS, giúp hợp nhất nền tảng thực sự trên cả hai hệ sinh thái.

  • Phiên bản tiếp theo của Thư viện ứng dụng cho ô tô sắp ra mắt: CAL phiên bản 10.

  • CAL phiên bản 10 sẽ mang đến nhiều mẫu tuỳ chỉnh hơn cho các ứng dụng liên lạc, giúp trải nghiệm gọi điện trở nên mạnh mẽ và phù hợp hơn trong khi lái xe.

  • Chúng tôi cũng bổ sung một danh mục ứng dụng mới và các mẫu ứng dụng, mang đến trải nghiệm trò chuyện trong khi lái xe.

  • Cuối cùng, chúng tôi đang phát triển thêm nhiều chức năng khác để giúp quá trình chuyển đổi từ chế độ đỗ xe sang chế độ lái xe trở nên liền mạch hơn bằng các mẫu Thư viện ứng dụng cho ô tô.

  • Hãy theo dõi để biết thêm tin mới.

Khả năng chuyển từ chế độ đỗ xe sang chế độ lái xe

  • Khả năng chuyển đổi giữa chế độ đỗ xe và chế độ lái xe bằng Thư viện ứng dụng cho ô tô cho phép ứng dụng của bạn chuyển đổi chế độ một cách linh động và hiển thị nội dung thích ứng khi xe đứng yên, đồng thời chuyển đổi liền mạch về các mẫu Thư viện ứng dụng cho ô tô khi lái xe.

  • Các ứng dụng chính bao gồm việc cung cấp quy trình xác thực phù hợp khi bạn đang đứng yên hoặc mang đến trải nghiệm chuyên biệt khi đỗ xe, chẳng hạn như phát trực tuyến podcast dạng video hoặc đoạn nhạc.

  • Thao tác này tích hợp trực tiếp với mẫu phát nội dung nghe nhìn.

  • Vì vậy, khi xe đứng yên, người lái xe có toàn quyền truy cập vào hoạt động Android gốc của ứng dụng, cho phép nội dung đa phương tiện như truyền phát video.

  • Ngay khi xe vào số, các biện pháp bảo vệ chống mất tập trung sẽ được kích hoạt, vì vậy, ứng dụng của bạn sẽ chuyển về mẫu nội dung nghe nhìn của Thư viện ứng dụng cho ô tô để duy trì trải nghiệm nghe âm thanh tuân thủ và không bị gián đoạn.

  • Chúng ta đang ở thời điểm chuyển đổi cho trải nghiệm trên ô tô.

  • Các ứng dụng đa phương tiện muốn phát triển vượt ra ngoài giao diện duyệt xem và phát truyền thống để mang lại những khoảnh khắc phong phú, sống động và tương tác hơn cho cả người lái xe lẫn hành khách.

  • Bây giờ, chúng ta sẽ tìm hiểu ví dụ về cách thêm hoạt động video gốc bằng thư viện Media3 để bắt đầu phát khi xe chuyển sang trạng thái đỗ.

  • Vì vậy, để bắt đầu, bạn sẽ kết nối trực tiếp một nền tảng kết xuất video với thực thể phát trong nền.

    override fun onStart() {
           super.onStart()
           ...
           controllerFuture = MediaController.Builder(
             this,
             sessionToken
           ).buildAsync()
    
           controllerFuture?.addListener({
               mediaController = controllerFuture?.get()
               playerView.player = mediaController
           }, ContextCompat.getMainExecutor(this))
    }
  • Bạn nên tránh tạo thực thể cho một trình phát nội dung nghe nhìn riêng biệt bên trong hoạt động này, mà thay vào đó, bạn nên duy trì một ExoPlayer hoặc trình phát nội dung nghe nhìn trung tâm trong dịch vụ chính, chẳng hạn như dịch vụ thư viện nội dung nghe nhìn Media3, xử lý kết hợp với cả luồng âm thanh và video.

  • Vì vậy, trong khi di chuyển, khi không có dịch vụ nào đang hoạt động, trình phát chỉ giải mã âm thanh, nhưng sau đó, khi người lái xe mở hoạt động video của bạn khi đỗ xe, bạn nên đính kèm trực tiếp nền tảng kết xuất của hoạt động đó vào trình phát dịch vụ cơ bản.

  • Vì vậy, khi sử dụng Media3, mediaController sẽ triển khai trình phát theo cách gốc, cho phép chỉ định trực tiếp, như bạn thấy ở đây, playerView đặt-- playerView.player đặt trực tiếp thành mediaController.

  • Vì vậy, tiếp theo, bạn nên đăng ký điểm truy cập gốc bằng ParkedOnlyOnClickListener.

    val watchVideoAction = Action.Builder()
      .setTitle("Watch Video")
      .setIcon(videoCarIcon)
      .setOnClickListener(
        ParkedOnlyOnClickListener.create {
          val intent = Intent(
            carContext,
            VideoPlayerActivity::class.java
          )
            .apply {
              addFlags(
                Intent.FLAG_ACTIVITY_NEW_TASK
              )
            }
          carContext.startActivity(intent)
        })
      .build()
  • Trình bao bọc này cung cấp một trình kích hoạt ý định trong thanh tiêu đề của giao diện phát nội dung nghe nhìn.

  • Vì vậy, hãy thêm một hành động để bắt đầu phát video, gói trình nghe lựa chọn của hành động đó trong ParkedOnlyOnClickListener.

  • Vì vậy, ở chế độ lái xe, những lần nhấn này sẽ bị ứng dụng lưu trữ chặn, ứng dụng này sẽ hiển thị thông báo an toàn của hệ thống, vì vậy, bạn sẽ không thể vào màn hình đó khi đang lái xe, nhưng khi bạn đỗ xe, lệnh gọi lại sẽ kích hoạt startActivity trong carContext để khởi chạy hoạt động toàn màn hình được chỉ định.

  • Hãy nhớ rằng trong các ứng dụng Thư viện ứng dụng cho ô tô này, bạn cần gắn cờ mục tiêu video là distractionOptimized=false bên trong tệp kê khai để hệ điều hành nhận ra rằng đây chỉ là quy trình làm việc khi đỗ xe.

    <activity
       android:name=".VideoPlayerActivity"
       android:exported="false"
       android:launchMode="singleTop">
       <meta-data
           android:name="distractionOptimized"
           android:value="false" />
    </activity>

Xử lý quá trình chuyển đổi từ trạng thái đỗ xe sang trạng thái lái xe

  • Cuối cùng, hãy xem điều gì xảy ra khi người lái xe chuyển từ chế độ đỗ xe sang chế độ lái xe.

  • Nếu hoạt động không được tối ưu hoá để chống phân tâm, nếu hoạt động đó vẫn hoạt động khi xe di chuyển, thì AAOS sẽ hiển thị một lớp phủ chặn hệ thống cho bạn biết, về cơ bản, hãy đỗ xe để tiếp tục sử dụng ứng dụng.

  • Để tránh màn hình bị chặn này, mục tiêu của chúng ta là quay lại mẫu phát nội dung nghe nhìn một cách liền mạch mà không làm gián đoạn âm thanh.

  • Vì vậy, khi isRequiresDistractionOptimization được đánh giá là đúng ở đây, về cơ bản, chúng ta sẽ xoá nền tảng kết xuất video khỏi phiên phát nội dung nghe nhìn cơ bản và gọi phương thức kết thúc trên hoạt động trên Play vì hoạt động này được khởi chạy trên trải nghiệm CAL, việc kết thúc hoạt động này sẽ trực tiếp quay lại mẫu phát nội dung nghe nhìn và tiếp tục phát âm thanh đó.

    class VideoPlayerActivity : ComponentActivity(){
      override fun onStart() {
    
        …
    
        if (uxRestrictionsManager?
            .currentCarUxRestrictions?
            .isRequiresDistractionOptimization
                == true) {
          revertToCarAppTemplate()
        }
      }
    
      private fun revertToCarAppTemplate() {
        mediaControllerCompat
          .sendCommand("CMD_CLEAR_VIDEO_SURFACE",
                       null, null)
        finish()
      }
    }
  • Việc duy trì phát âm thanh không bị gián đoạn là yếu tố then chốt để mang lại trải nghiệm người dùng tuyệt vời. Vì vậy, bằng cách duy trì phiên phát nội dung nghe nhìn ở trạng thái hoạt động dưới dạng dịch vụ nền trước, âm thanh sẽ tiếp tục phát liền mạch trong suốt những thay đổi về trạng thái này.

    <activity
            android:name="androidx.car.app.activity.CarAppActivity"
            android:exported="true"
            android:launchMode="singleTask">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
    
            <action android:name="androidx.car.app.media.action.SHOW_MEDIA_PLAYBACK" />
        </intent-filter>
        <meta-data
                android:name="distractionOptimized"
                android:value="true" />
    </activity>
  • Bạn cũng nên ghi đè onNewIntent trong màn hình CAL để ghi lại ý định SHOW_MEDIA_PLAYBACK.

    class MyCarAppSession : Session() {
        override fun onCreateScreen(intent: Intent): Screen {
            // 1. Link your active MediaSession token with Car App Library's MediaPlaybackManager
            val mediaPlaybackManager = carContext.getCarService(MediaPlaybackManager::class.java)
            mediaPlaybackManager.registerMediaPlaybackToken(mediaSessionToken)
    
            // 2. Handle deep link if cold-started from the vehicle's media widget
            handlePlaybackIntent(intent)
            return HomeScreen(carContext)
        }
        override fun onNewIntent(intent: Intent) {
            super.onNewIntent(intent)
    
            // 3. Handle deep link when the session is already running
            handlePlaybackIntent(intent)
        }
    }
  • Bằng cách đó, bất cứ khi nào người dùng tương tác với tiện ích nội dung nghe nhìn của hệ thống xe trên màn hình chính của ô tô, đường liên kết sâu sẽ đưa họ thẳng đến chế độ xem Phát hiện nhạc trong Thư viện ứng dụng cho ô tô.

  • Vì vậy, việc xác thực các hiệu ứng chuyển đổi này trong suốt quá trình phát triển là rất đơn giản.

  • Bạn có thể thực thi các lệnh adb trên AAOS.

  • Trong trường hợp này, bạn sẽ dùng emulate-driving-state drive hoặc emulate-driving-state park khi đã sẵn sàng chuyển đổi lại giữa các hoạt động.

  • Sau đây là ví dụ về ứng dụng đa phương tiện Media3 mẫu mới của chúng tôi, sử dụng Thư viện ứng dụng cho ô tô có tính năng phát video khi đỗ xe.

  • Vì vậy, hãy xem phần này tại gian hàng Android thích ứng của chúng tôi ở tầng dưới và trên GitHub car-samples của chúng tôi trong thời gian sớm nhất.

  • Tính năng chuyển đổi giữa chế độ đỗ xe và lái xe hiện có trên Android Automotive OS cho các ứng dụng đa phương tiện đã tích hợp với CAL của ô tô để mang lại trải nghiệm lái xe, nơi các ứng dụng này hiện có thể cung cấp trải nghiệm mạnh mẽ hơn khi đỗ xe.

  • Hãy xem thông tin này trong tài liệu của chúng tôi sắp có trên developer.android.com và bày tỏ sự quan tâm tại đó để giới thiệu tính năng này trên ứng dụng của bạn.

  • Paul.

Tính năng sắp ra mắt trong thư viện ứng dụng cho ô tô

  • Tuyệt vời.

  • Cảm ơn Thomas.

  • Trước khi kết thúc, tôi muốn chia sẻ một số cách để bạn tìm hiểu thêm về những nội dung sắp ra mắt vào cuối năm nay.

  • Như Thomas đã đề cập, CAL 1.9 hiện đang ở giai đoạn alpha.

  • Tính năng này sẽ sớm chuyển sang giai đoạn thử nghiệm beta.

  • Sau đó, CAL 1.10 sẽ bước vào giai đoạn alpha trước cuối năm nay, vì vậy, bạn có thể bắt đầu đánh giá giao diện người dùng trò chuyện cũng như các tính năng liên lạc và chuyển từ đỗ xe sang lái xe mới nhất.

  • Cuối cùng, chúng tôi rất vui được chia sẻ rằng, như tôi đã đề cập, trò chơi hiện đã có trên Android Auto và Android Automotive OS, vì vậy, đây thực sự là thời điểm hoàn hảo để tối ưu hoá các tựa game của bạn cho ô tô.

  • Để tìm hiểu thêm về thông tin triển khai, hãy nhớ xem tài liệu trong hướng dẫn "Xây dựng trò chơi cho ô tô".

  • Bạn có thể tìm hiểu thêm về cách điều chỉnh trò chơi cho ô tô và theo dõi những điểm mới cũng như thay đổi khác đối với Android cho ô tô trên trang "Tính năng mới".

  • Chúng tôi hy vọng bạn đã thấy được cách ô tô và người dùng ô tô sẵn sàng cho ứng dụng của bạn.

  • Bạn có thể xây dựng ứng dụng thích ứng hiện có để mang lại trải nghiệm phong phú khi đỗ xe, đồng thời sử dụng nhiều mẫu Thư viện ứng dụng cho ô tô để tạo ra những trải nghiệm an toàn và tối ưu cho việc lái xe.

  • Trước khi xuất bản, bạn có thể kiểm thử kỹ lưỡng bằng Đầu phát trung tâm trên máy tính, trình mô phỏng, AAOS chạy trên Pixel Tablet hoặc bằng Phòng thử nghiệm Firebase.

  • Bạn đã có kỹ năng để xây dựng cho hệ sinh thái này và hàng triệu chiếc ô tô đang chờ ứng dụng của bạn, vì vậy, hãy đưa ứng dụng đó vào hoạt động.

Mã

Đoạn mã

Đoạn mã Shell ở phút 09:03 trong video "Phát triển ứng dụng cho ô tô đang đỗ"
android skills list
android skills add android-for-cars-parked-apps
Đoạn mã Kotlin ở phút 15:20 trong phần "Khả năng chuyển từ chế độ đỗ xe sang chế độ lái xe"
override fun onStart() {
       super.onStart()
       ...
       controllerFuture = MediaController.Builder(
         this,
         sessionToken
       ).buildAsync()

       controllerFuture?.addListener({
           mediaController = controllerFuture?.get()
           playerView.player = mediaController
       }, ContextCompat.getMainExecutor(this))
}
Đoạn mã Kotlin ở phút 16:06 trong video "Tính năng đỗ xe để lái xe"
val watchVideoAction = Action.Builder()
  .setTitle("Watch Video")
  .setIcon(videoCarIcon)
  .setOnClickListener(
    ParkedOnlyOnClickListener.create {
      val intent = Intent(
        carContext,
        VideoPlayerActivity::class.java
      )
        .apply {
          addFlags(
            Intent.FLAG_ACTIVITY_NEW_TASK
          )
        }
      carContext.startActivity(intent)
    })
  .build()
Đoạn mã XML ở phút 16:42 trong phần "Khả năng chuyển từ chế độ đỗ xe sang chế độ lái xe"
<activity
   android:name=".VideoPlayerActivity"
   android:exported="false"
   android:launchMode="singleTop">
   <meta-data
       android:name="distractionOptimized"
       android:value="false" />
</activity>
Đoạn mã Kotlin ở phút 17:17 trong phần "Xử lý quá trình chuyển đổi từ trạng thái đỗ xe sang lái xe"
class VideoPlayerActivity : ComponentActivity(){
  override fun onStart() {

    …

    if (uxRestrictionsManager?
        .currentCarUxRestrictions?
        .isRequiresDistractionOptimization
            == true) {
      revertToCarAppTemplate()
    }
  }

  private fun revertToCarAppTemplate() {
    mediaControllerCompat
      .sendCommand("CMD_CLEAR_VIDEO_SURFACE",
                   null, null)
    finish()
  }
}
Đoạn mã XML ở phút 17:36 trong video "Xử lý quá trình chuyển đổi từ trạng thái đỗ xe sang trạng thái lái xe"
<activity
        android:name="androidx.car.app.activity.CarAppActivity"
        android:exported="true"
        android:launchMode="singleTask">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />

        <action android:name="androidx.car.app.media.action.SHOW_MEDIA_PLAYBACK" />
    </intent-filter>
    <meta-data
            android:name="distractionOptimized"
            android:value="true" />
</activity>
Đoạn mã Kotlin ở phút 17:49 trong phần "Xử lý quá trình chuyển đổi từ trạng thái đỗ xe sang trạng thái lái xe"
class MyCarAppSession : Session() {
    override fun onCreateScreen(intent: Intent): Screen {
        // 1. Link your active MediaSession token with Car App Library's MediaPlaybackManager
        val mediaPlaybackManager = carContext.getCarService(MediaPlaybackManager::class.java)
        mediaPlaybackManager.registerMediaPlaybackToken(mediaSessionToken)

        // 2. Handle deep link if cold-started from the vehicle's media widget
        handlePlaybackIntent(intent)
        return HomeScreen(carContext)
    }
    override fun onNewIntent(intent: Intent) {
        super.onNewIntent(intent)

        // 3. Handle deep link when the session is already running
        handlePlaybackIntent(intent)
    }
}