Tiện ích ứng dụng là các thành phần hiển thị thu nhỏ của ứng dụng mà bạn có thể nhúng vào các ứng dụng khác (chẳng hạn như màn hình chính) và nhận được các bản cập nhật định kỳ. Những khung hiển thị này được gọi là tiện ích trong giao diện người dùng và bạn có thể xuất bản một tiện ích bằng trình cung cấp tiện ích ứng dụng (hoặc trình cung cấp tiện ích). Một thành phần ứng dụng chứa các tiện ích khác được gọi là máy chủ tiện ích ứng dụng (hoặc máy chủ tiện ích). Hình 1 minh hoạ một tiện ích âm nhạc mẫu:
Tài liệu này mô tả cách xuất bản một tiện ích bằng cách sử dụng trình cung cấp tiện ích. Để biết thông tin chi tiết về cách tạo AppWidgetHost của riêng bạn để lưu trữ các tiện ích ứng dụng, hãy xem phần Xây dựng máy chủ tiện ích.
Để biết thông tin về cách thiết kế tiện ích, hãy xem bài viết Tổng quan về tiện ích ứng dụng.
Thành phần tiện ích
Để tạo một tiện ích, bạn cần có các thành phần cơ bản sau:
- Đối tượng
AppWidgetProviderInfo - Mô tả siêu dữ liệu cho một tiện ích, chẳng hạn như bố cục, tần suất cập nhật và lớp
AppWidgetProvidercủa tiện ích.AppWidgetProviderInfođược xác định trong XML, như mô tả trong tài liệu này. - Lớp
AppWidgetProvider - Xác định các phương thức cơ bản cho phép bạn tương tác với tiện ích theo cách lập trình. Thông qua đó, bạn sẽ nhận được thông báo truyền tin khi tiện ích được cập nhật, bật, tắt hoặc xoá. Bạn khai báo
AppWidgetProvidertrong tệp kê khai rồi triển khai nó, như mô tả trong tài liệu này. - Xem bố cục
- Xác định bố cục ban đầu cho tiện ích. Bố cục được xác định trong XML, như mô tả trong tài liệu này.
Hình 2 cho thấy cách các thành phần này phù hợp với quy trình xử lý tiện ích ứng dụng tổng thể.
Nếu tiện ích của bạn cần cấu hình người dùng, hãy triển khai hoạt động cấu hình tiện ích ứng dụng. Hoạt động này cho phép người dùng sửa đổi chế độ cài đặt tiện ích, chẳng hạn như múi giờ cho tiện ích đồng hồ.
- Kể từ Android 12 (cấp độ API 31), bạn có thể cung cấp cấu hình mặc định và cho phép người dùng định cấu hình lại tiện ích sau này. Hãy xem phần Sử dụng cấu hình mặc định của tiện ích và Cho phép người dùng định cấu hình lại các tiện ích đã đặt để biết thêm thông tin chi tiết.
- Trong Android 11 (cấp độ API 30) trở xuống, hoạt động này sẽ được khởi chạy mỗi khi người dùng thêm tiện ích vào màn hình chính.
Chúng tôi cũng đề xuất những điểm cải tiến sau: bố cục tiện ích linh hoạt, các điểm cải tiến khác, tiện ích nâng cao, tiện ích tập hợp và tạo một máy chủ lưu trữ tiện ích.
Khai báo XML AppWidgetProviderInfo
Việc xác định các chế độ cài đặt siêu dữ liệu (chẳng hạn như kích thước ô mặc định, các ràng buộc về việc đổi kích thước và tần suất cập nhật) hoàn toàn giống nhau trên cả các khung hiển thị truyền thống và các tiện ích dựa trên Glance.
Để tìm hiểu cách xác định và định cấu hình tệp XML siêu dữ liệu, hãy xem phần Khai báo phần tử XML AppWidgetProviderInfo ưu tiên Compose trong tài liệu về Glance.
Sử dụng lớp AppWidgetProvider để xử lý thông báo truyền tin của tiện ích
Cơ chế bộ nhận tín hiệu truyền tin, bộ lọc khai báo tệp kê khai và các vòng lặp sự kiện trong vòng đời của nền tảng được hợp nhất bên dưới nền tảng. Trong quá trình phát triển ưu tiên Compose, các thông báo này được điều phối bằng trình bao bọc GlanceAppWidgetReceiver.
Để tìm hiểu cách đăng ký bộ nhận trong tệp kê khai và triển khai các phương thức ghi đè vòng đời tương thích với Hilt, hãy xem phần Sử dụng lớp AppWidgetProvider để xử lý thông báo truyền tin trong tài liệu Glance.
Tạo bố cục tiện ích
Bạn phải xác định bố cục ban đầu cho tiện ích của mình trong XML và lưu bố cục đó vào thư mục res/layout/ của dự án. Tham khảo Nguyên tắc thiết kế để biết thêm thông tin.
Việc tạo bố cục tiện ích rất đơn giản nếu bạn đã quen thuộc với bố cục. Tuy nhiên, hãy lưu ý rằng bố cục tiện ích dựa trên RemoteViews, không hỗ trợ mọi loại bố cục hoặc tiện ích xem.
Bạn không thể sử dụng các khung hiển thị tuỳ chỉnh hoặc các lớp con của khung hiển thị mà RemoteViews hỗ trợ.
RemoteViews cũng hỗ trợ ViewStub. Đây là một View vô hình, có kích thước bằng 0 mà bạn có thể sử dụng để tăng cường từng phần tài nguyên bố cục trong thời gian chạy.
Hỗ trợ hành vi có trạng thái
Android 12 bổ sung tính năng hỗ trợ hành vi có trạng thái bằng cách sử dụng các thành phần hiện có sau đây:
Tiện ích này vẫn không có trạng thái. Ứng dụng của bạn phải lưu trữ trạng thái và đăng ký các sự kiện thay đổi trạng thái.
Ví dụ về mã sau đây cho thấy cách triển khai các thành phần này.
Kotlin
// Check the view.
remoteView.setCompoundButtonChecked(R.id.my_checkbox, true)
// Check a radio group.
remoteView.setRadioGroupChecked(R.id.my_radio_group, R.id.radio_button_2)
// Listen for check changes. The intent has an extra with the key
// EXTRA_CHECKED that specifies the current checked state of the view.
remoteView.setOnCheckedChangeResponse(
R.id.my_checkbox,
RemoteViews.RemoteResponse.fromPendingIntent(onCheckedChangePendingIntent)
)
Java
// Check the view.
remoteView.setCompoundButtonChecked(R.id.my_checkbox, true);
// Check a radio group.
remoteView.setRadioGroupChecked(R.id.my_radio_group, R.id.radio_button_2);
// Listen for check changes. The intent has an extra with the key
// EXTRA_CHECKED that specifies the current checked state of the view.
remoteView.setOnCheckedChangeResponse(
R.id.my_checkbox,
RemoteViews.RemoteResponse.fromPendingIntent(onCheckedChangePendingIntent));
Cung cấp 2 bố cục: một bố cục nhắm đến các thiết bị chạy Android 12 trở lên trong res/layout-v31 và bố cục còn lại nhắm đến Android 11 trở xuống trong thư mục res/layout mặc định.
Triển khai góc bo tròn
Việc tính toán bán kính tỷ lệ bên trong và nền bên ngoài là tiêu chuẩn và được chia sẻ. Trong quá trình phát triển ưu tiên Compose, bạn có thể thiết lập thuộc tính này một cách linh động trong Kotlin cùng với các tài nguyên giao diện tuỳ chỉnh.
Để triển khai bán kính góc hoặc thiết lập kiểu động cho các thiết bị Android cũ, hãy xem phần Triển khai các góc bo tròn ưu tiên Compose trong tài liệu Glance.