Glance đơn giản hoá việc xử lý lượt tương tác của người dùng bằng các lớp Action. Các lớp Action của Glance xác định những thao tác mà người dùng có thể thực hiện và bạn có thể chỉ định thao tác được thực hiện để phản hồi thao tác đó. Bạn có thể áp dụng một Action cho mọi thành phần bằng phương thức GlanceModifier.clickable.
Các tiện ích ứng dụng nằm trên một quy trình từ xa, vì vậy, các thao tác được xác định tại thời điểm tạo và quá trình thực thi diễn ra trong quy trình từ xa. Trong RemoteViews gốc, bạn có thể thực hiện việc này bằng cách sử dụng PendingIntents.
Các thao tác sau đây được mô tả trên trang này:
Khởi chạy một hoạt động
Để chạy một Hoạt động khi lượt tương tác của người dùng, hãy cung cấp hàm actionStartActivity cho Button hoặc composable khác bằng cách sử dụng modifier GlanceModifier.clickable.
Cung cấp một trong những thông tin sau trong actionStartActivity:
- Lớp hoạt động đích
ComponentName- Một Ý định
Glance chuyển Hành động thành một PendingIntent với mục tiêu và các tham số được cung cấp. Trong ví dụ sau, NavigationActivity sẽ được khởi chạy khi người dùng nhấp vào nút:
@Composable fun MyContent() { // .. Button( text = "Go Home", onClick = actionStartActivity<MyActivity>() ) }
Ra mắt dịch vụ
Tương tự như việc chạy một hoạt động, hãy chạy một dịch vụ khi người dùng tương tác bằng một trong các phương thức actionStartService.
Cung cấp một trong những thông tin sau trong actionStartService:
- Lớp hoạt động đích
ComponentName- Một ý định
@Composable fun MyButton() { // .. Button( text = "Sync", onClick = actionStartService<SyncService>( isForegroundService = true // define how the service is launched ) ) }
Gửi sự kiện phát sóng
Gửi một sự kiện truyền tin về lượt tương tác của người dùng bằng một trong các phương thức actionSendBroadcast:
Cung cấp một trong những thông tin sau trong actionSendBroadcast:
- Thao tác với chuỗi
ComponentName- Một ý định
- Lớp
BroadcastReceiver
@Composable fun MyButton() { // .. Button( text = "Send", onClick = actionSendBroadcast<MyReceiver>() ) }
Thực hiện các thao tác tuỳ chỉnh
Thay vì khởi chạy một đích đến cụ thể, Glance có thể sử dụng một thao tác lambda hoặc actionRunCallback để thực hiện một thao tác, chẳng hạn như cập nhật giao diện người dùng hoặc state khi lượt tương tác của người dùng.
Chạy các thao tác lambda
Bạn có thể dùng hàm lambda làm lệnh gọi lại cho các hoạt động tương tác với giao diện người dùng.
Ví dụ: truyền hàm lambda vào đối tượng sửa đổi GlanceModifier.clickable:
Text( text = "Submit", modifier = GlanceModifier.clickable { submitData() } )
Hoặc truyền đối tượng sửa đổi này đến tham số onClick trên các thành phần kết hợp hỗ trợ tham số này:
Button( text = "Submit", onClick = { submitData() } )
Chạy ActionCallback
Ngoài ra, hãy sử dụng các phương thức actionRunCallback để thực hiện một thao tác khi người dùng tương tác. Để thực hiện việc này, hãy cung cấp một phương thức triển khai tuỳ chỉnh của ActionCallback:
@Composable private fun MyContent() { // .. Image( provider = ImageProvider(R.drawable.ic_hourglass_animated), modifier = GlanceModifier.clickable( onClick = actionRunCallback<RefreshAction>() ), contentDescription = "Refresh" ) } class RefreshAction : ActionCallback { override suspend fun onAction( context: Context, glanceId: GlanceId, parameters: ActionParameters ) { // TODO implement } }
Khi người dùng nhấp vào, phương thức suspend onAction của ActionCallback được cung cấp sẽ được gọi, thực thi logic đã xác định (tức là yêu cầu làm mới dữ liệu).
Để cập nhật tiện ích sau khi thực hiện thao tác, hãy tạo một phiên bản mới và gọi update(..). Để biết thêm thông tin chi tiết, hãy xem phần Quản lý trạng thái GlanceAppWidget.
class RefreshAction : ActionCallback { override suspend fun onAction( context: Context, glanceId: GlanceId, parameters: ActionParameters ) { // do some work but offset long-term tasks (e.g a Worker) MyAppWidget().update(context, glanceId) } }
Cung cấp các tham số cho thao tác
Để cung cấp thêm thông tin cho một thao tác, hãy sử dụng API ActionParameters để tạo một cặp khoá-giá trị được nhập. Ví dụ: để xác định đích đến được nhấp vào:
private val destinationKey = ActionParameters.Key<String>( NavigationActivity.KEY_DESTINATION ) class MyAppWidget : GlanceAppWidget() { // .. @Composable private fun MyContent() { // .. Button( text = "Home", onClick = actionStartActivity<NavigationActivity>( actionParametersOf(destinationKey to "home") ) ) Button( text = "Work", onClick = actionStartActivity<NavigationActivity>( actionParametersOf(destinationKey to "work") ) ) } override suspend fun provideGlance(context: Context, id: GlanceId) { provideContent { MyContent() } } }
Bên dưới, các tham số được đưa vào ý định dùng để khởi chạy hoạt động, cho phép Hoạt động mục tiêu truy xuất tham số đó.
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val destination = intent.extras?.getString(KEY_DESTINATION) ?: return // ... } }
Các tham số cũng được cung cấp cho ActionCallback. Sử dụng Parameters.Key đã xác định để truy xuất giá trị:
class RefreshAction : ActionCallback { private val destinationKey = ActionParameters.Key<String>( NavigationActivity.KEY_DESTINATION ) override suspend fun onAction( context: Context, glanceId: GlanceId, parameters: ActionParameters ) { val destination: String = parameters[destinationKey] ?: return // ... } }