Tính năng Glance đơn giản hoá việc xử lý hoạt động tương tác của người dùng thông qua các lớp Action
. Tính năng Glance
Các lớp Action
xác định những hành động mà người dùng có thể thực hiện, đồng thời bạn có thể chỉ định
được thực hiện để đáp ứng hành động đó. Bạn có thể áp dụng Action
cho bất kỳ
bằng phương thức GlanceModifier.clickable
.
Tiện ích ứng dụng hoạt động trên một quy trình từ xa, vì vậy, các hành động được xác định khi tạo
và quá trình thực thi diễn ra trong quy trình từ xa. Trong RemoteViews
gốc,
việc này được thực hiện thông qua PendingIntents
.
Các thao tác sau đây được mô tả trên trang này:
Chạy một hoạt động
Để khởi chạy một hoạt động dựa trên tương tác của người dùng, hãy cung cấp
hàm actionStartActivity
sang Button
hoặc thành phần kết hợp khác thông qua
Đối tượng sửa đổi GlanceModifier.clickable
(..).
Cung cấp một trong các thông tin sau trong actionStartActivity
:
- Lớp hoạt động mục tiêu
ComponentName
- Một ý định
Glance sẽ dịch Hành động thành PendingIntent
với mục tiêu được cung cấp và
tham số. Trong ví dụ sau, NavigationActivity
được chạy khi một
người dùng nhấp vào nút:
@Composable fun MyContent() { // .. Button( text = "Go Home", onClick = actionStartActivity<MyActivity>() ) }
Chạy một dịch vụ
Tương tự như khởi chạy một hoạt động, hãy khởi chạy dịch vụ dựa trên tương tác của người dùng bằng một
của phương thức actionStartService
.
Cung cấp một trong các thông tin sau trong actionStartService
:
- Lớp hoạt động mục tiêu
ComponentName
- Một ý định
@Composable fun MyButton() { // .. Button( text = "Sync", onClick = actionStartService<SyncService>( isForegroundService = true // define how the service is launched ) ) }
Gửi một sự kiện truyền phát
Gửi sự kiện truyền tin khi người dùng tương tác bằng một trong
Phương thức actionSendBroadcast
:
Cung cấp một trong các thông tin sau trong actionSendBroadcast
:
- Hành động 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ì chạy một mục tiêu cụ thể, tính năng Glance có thể sử dụng thao tác lambda hoặc
actionRunCallback
để thực hiện một hành động, chẳng hạn như cập nhật giao diện người dùng hoặc trạng thái trên
tương tác của người dùng.
Chạy các thao tác lambda
Bạn có thể sử dụng các hàm lambda làm lệnh gọi lại cho các hoạt động tương tác trên giao diện người dùng.
Ví dụ: truyền hàm lambda vào GlanceModifier.clickable
đối tượng sửa đổi:
Text( text = "Submit", modifier = GlanceModifier.clickable { submitData() } )
Hoặc truyền tham số đến tham số onClick
trên các thành phần kết hợp hỗ trợ tham số đó:
Button( text = "Submit", onClick = { submitData() } )
Chạy ActionCallback
Ngoài ra, hãy dùng các phương thức actionRunCallback
để thực hiện một thao tác trên
tương tác của người dùng. Để thực hiện điều này, hãy cung cấp triển khai tuỳ chỉnh của thuộc tính
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, phương thức suspend onAction
của giá trị được cung cấp
ActionCallback
được gọi, thực thi logic đã xác định (ví dụ: yêu cầu
làm mới dữ liệu).
Để cập nhật tiện ích này sau khi thực hiện thao tác này, hãy tạo một thực thể mới và
gọi update
(..). Để biết thêm thông tin, 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 tham số cho hành động
Để cung cấp thêm thông tin cho một thao tác, hãy sử dụng ActionParameters
API để tạo một cặp khoá-giá trị đã nhập. Ví dụ: để xác định lượt nhấp
đích đến:
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ó trong ý định dùng để khởi chạy hoạt động, cho phép Hoạt động mục tiêu truy xuất hoạt động đó.
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 giá trị xác định
Parameters.Key
để 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 // ... } }