Bạn có thể định cấu hình các tiện ích ứng dụng. Ví dụ: tiện ích đồng hồ có thể cho phép người dùng định cấu hình múi giờ sẽ hiển thị.
Nếu bạn muốn cho phép người dùng định cấu hình các chế độ cài đặt của tiện ích, hãy tạo một cấu hình tiện ích Activity
. Máy chủ tiện ích ứng dụng sẽ tự động chạy hoạt động này ngay cả khi tiện ích được tạo hoặc sau đó, tuỳ thuộc vào các lựa chọn cấu hình mà bạn chỉ định.
Khai báo hoạt động định cấu hình
Khai báo hoạt động cấu hình như một hoạt động bình thường trong tệp kê khai Android. Máy chủ tiện ích ứng dụng chạy nó bằng thao tác ACTION_APPWIDGET_CONFIGURE
, vì vậy, hoạt động cần chấp nhận ý định này. Ví dụ:
<activity android:name=".ExampleAppWidgetConfigurationActivity">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
</intent-filter>
</activity>
Khai báo hoạt động trong tệp AppWidgetProviderInfo.xml
bằng thuộc tính android:configure
. Xem thêm thông tin về việc khai báo tệp này. Dưới đây là ví dụ về cách khai báo hoạt động cấu hình:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
...
android:configure="com.example.android.ExampleAppWidgetConfigurationActivity"
... >
</appwidget-provider>
Hoạt động được khai báo bằng một không gian tên đủ điều kiện, vì trình chạy tham chiếu đến hoạt động đó từ bên ngoài phạm vi gói của bạn.
Đó là tất cả những gì bạn cần để bắt đầu một hoạt động định cấu hình. Tiếp theo, bạn cần triển khai hoạt động thực tế.
Triển khai hoạt động cấu hình
Có 2 điểm quan trọng cần nhớ khi bạn triển khai hoạt động:
- Máy chủ tiện ích ứng dụng gọi hoạt động cấu hình và hoạt động cấu hình phải luôn trả về một kết quả. Kết quả phải bao gồm Mã tiện ích ứng dụng được truyền bởi ý định chạy hoạt động – được lưu trong phần bổ sung ý định dưới dạng
EXTRA_APPWIDGET_ID
. - Hệ thống sẽ không gửi thông báo
ACTION_APPWIDGET_UPDATE
khi chạy một hoạt động cấu hình, tức là hệ thống sẽ không gọi phương thứconUpdate()
khi tiện ích được tạo. Hoạt động định cấu hình có trách nhiệm yêu cầu cập nhật từAppWidgetManager
trong lần đầu tiên tạo tiện ích. Tuy nhiên,onUpdate()
được gọi cho các bản cập nhật tiếp theo – chỉ bị bỏ qua lần đầu tiên.
Hãy xem các đoạn mã trong phần sau để biết ví dụ về cách trả về kết quả từ cấu hình và cập nhật tiện ích.
Cập nhật tiện ích trong hoạt động định cấu hình
Khi một tiện ích sử dụng hoạt động cấu hình, hoạt động đó có trách nhiệm cập nhật tiện ích đó khi quá trình định cấu hình hoàn tất. Bạn có thể thực hiện việc này bằng cách yêu cầu cập nhật trực tiếp từ AppWidgetManager
.
Dưới đây là phần tóm tắt về quy trình để cập nhật tiện ích đúng cách và đóng hoạt động cấu hình:
Lấy Mã tiện ích ứng dụng từ ý định chạy hoạt động:
Kotlin
val appWidgetId = intent?.extras?.getInt( AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID ) ?: AppWidgetManager.INVALID_APPWIDGET_ID
Java
Intent intent = getIntent(); Bundle extras = intent.getExtras(); int appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; if (extras != null) { appWidgetId = extras.getInt( AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); }
Đặt kết quả hoạt động thành
RESULT_CANCELED
.Bằng cách này, nếu người dùng quay lại hoạt động trước khi kết thúc, hệ thống sẽ thông báo cho máy chủ tiện ích ứng dụng rằng cấu hình đã bị huỷ và máy chủ lưu trữ sẽ không thêm tiện ích:
Kotlin
val resultValue = Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) setResult(Activity.RESULT_CANCELED, resultValue)
Java
int resultValue = new Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult(Activity.RESULT_CANCELED, resultValue);
Định cấu hình tiện ích theo các lựa chọn ưu tiên của người dùng.
Khi cấu hình xong, hãy lấy một thực thể của
AppWidgetManager
bằng cách gọigetInstance(Context)
:Kotlin
val appWidgetManager = AppWidgetManager.getInstance(context)
Java
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
Cập nhật tiện ích với bố cục
RemoteViews
bằng cách gọiupdateAppWidget(int,RemoteViews)
:Kotlin
val views = RemoteViews(context.packageName, R.layout.example_appwidget) appWidgetManager.updateAppWidget(appWidgetId, views)
Java
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.example_appwidget); appWidgetManager.updateAppWidget(appWidgetId, views);
Tạo ý định trả về, đặt ý định này với kết quả hoạt động và hoàn tất hoạt động:
Kotlin
val resultValue = Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) setResult(Activity.RESULT_OK, resultValue) finish()
Java
Intent resultValue = new Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult(RESULT_OK, resultValue); finish();
Hãy xem lớp mẫu ListWidgetConfigureActivity.kt
trên GitHub để biết ví dụ.
Tuỳ chọn cấu hình tiện ích
Theo mặc định, máy chủ tiện ích ứng dụng chỉ chạy hoạt động định cấu hình một lần, ngay sau khi người dùng thêm tiện ích đó vào màn hình chính. Tuy nhiên, bạn có thể chỉ định các tuỳ chọn cho phép người dùng định cấu hình lại các tiện ích hiện có hoặc bỏ qua cấu hình tiện ích ban đầu bằng cách cung cấp một cấu hình tiện ích mặc định.
Cho phép người dùng định cấu hình lại các tiện ích được đặt
Để cho phép người dùng định cấu hình lại các tiện ích hiện có, hãy chỉ định cờ reconfigurable
trong thuộc tính widgetFeatures
của appwidget-provider
. Xem hướng dẫn về cách khai báo tệp AppWidgetProviderInfo.xml
để biết thêm thông tin. Ví dụ:
<appwidget-provider
android:configure="com.myapp.ExampleAppWidgetConfigurationActivity"
android:widgetFeatures="reconfigurable">
</appwidget-provider>
Người dùng có thể định cấu hình lại tiện ích của mình bằng cách chạm và giữ tiện ích đó rồi nhấn vào nút ReConfigure (Định cấu hình lại) có nhãn 1 trong hình 1.
Sử dụng cấu hình mặc định của tiện ích
Bạn có thể cung cấp trải nghiệm tiện ích liền mạch hơn bằng cách cho phép người dùng bỏ qua bước định cấu hình ban đầu. Để thực hiện việc này, hãy chỉ định cả cờ configuration_optional
và reconfigurable
trong trường widgetFeatures
. Thao tác này sẽ bỏ qua việc chạy hoạt động cấu hình sau khi người dùng thêm tiện ích. Như đã đề cập trước đó, sau đó, người dùng vẫn có thể định cấu hình lại tiện ích. Ví dụ: tiện ích đồng hồ có thể bỏ qua cấu hình ban đầu và hiển thị múi giờ của thiết bị theo mặc định.
Dưới đây là ví dụ về cách đánh dấu hoạt động cấu hình của bạn là có thể định cấu hình lại và không bắt buộc:
<appwidget-provider
android:configure="com.myapp.ExampleAppWidgetConfigurationActivity"
android:widgetFeatures="reconfigurable|configuration_optional">
</appwidget-provider>