Glance مدیریت تعامل کاربر را از طریق کلاسهای Action
ساده میکند. کلاسهای Action
Glance اقداماتی را که کاربر میتواند انجام دهد را تعریف میکند و میتوانید عملیات انجام شده در پاسخ به عمل را مشخص کنید. با متد GlanceModifier.clickable
می توانید یک Action
برای هر مؤلفه اعمال کنید.
ویجتهای برنامه روی یک فرآیند از راه دور زندگی میکنند، بنابراین اقدامات در زمان ایجاد تعریف میشوند و اجرا در فرآیند از راه دور انجام میشود. در RemoteViews
بومی، این کار از طریق PendingIntents
انجام می شود.
اقدامات زیر در این صفحه شرح داده شده است:
یک فعالیت را راه اندازی کنید
برای راهاندازی یک فعالیت در تعامل با کاربر، تابع actionStartActivity
را از طریق اصلاحکننده GlanceModifier.clickable
(..) به یک Button
یا دیگر قابلانشا ارائه کنید.
یکی از موارد زیر را در actionStartActivity
ارائه دهید:
- کلاس فعالیت هدف
-
ComponentName
- یک قصد
Glance Action را با هدف و پارامترهای ارائه شده به PendingIntent
ترجمه می کند. در مثال زیر، NavigationActivity
زمانی راه اندازی می شود که کاربر روی دکمه کلیک می کند:
@Composable fun MyContent() { // .. Button( text = "Go Home", onClick = actionStartActivity<MyActivity>() ) }
یک سرویس راه اندازی کنید
مشابه راهاندازی یک فعالیت، با استفاده از یکی از روشهای actionStartService
، سرویس تعامل کاربر را راهاندازی کنید.
یکی از موارد زیر را در actionStartService
ارائه دهید:
- کلاس فعالیت هدف
-
ComponentName
- یک قصد
@Composable fun MyButton() { // .. Button( text = "Sync", onClick = actionStartService<SyncService>( isForegroundService = true // define how the service is launched ) ) }
ارسال یک رویداد پخش
با استفاده از یکی از روشهای actionSendBroadcast
یک رویداد پخش در تعامل کاربر ارسال کنید:
یکی از موارد زیر را در actionSendBroadcast
ارائه دهید:
- عمل رشته
-
ComponentName
- یک قصد
- کلاس
BroadcastReceiver
@Composable fun MyButton() { // .. Button( text = "Send", onClick = actionSendBroadcast<MyReceiver>() ) }
انجام اقدامات سفارشی
بهجای راهاندازی یک هدف خاص، Glance میتواند از یک اقدام لامبدا یا یک actionRunCallback
برای انجام یک عمل استفاده کند، مانند بهروزرسانی رابط کاربری یا وضعیت تعامل کاربر.
اکشن های لامبدا را اجرا کنید
میتوانید از توابع لامبدا بهعنوان پاسخدهی به تعاملات رابط کاربری استفاده کنید.
به عنوان مثال، تابع lambda را به اصلاح کننده GlanceModifier.clickable
ارسال کنید:
Text( text = "Submit", modifier = GlanceModifier.clickable { submitData() } )
یا آن را به پارامتر onClick
در composable هایی که از آن پشتیبانی می کنند، ارسال کنید:
Button( text = "Submit", onClick = { submitData() } )
ActionCallback را اجرا کنید
روش دیگر، از متدهای actionRunCallback
برای انجام یک عمل بر روی تعامل کاربر استفاده کنید. برای انجام این کار، یک پیاده سازی سفارشی از 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 } }
با کلیک کاربر، متد suspend onAction
از ActionCallback
ارائه شده فراخوانی می شود و منطق تعریف شده را اجرا می کند (یعنی درخواست تازه سازی داده).
برای به روز رسانی ویجت پس از انجام عمل، یک نمونه جدید ایجاد کنید و update
(..) را فراخوانی کنید. برای جزئیات بیشتر، به بخش مدیریت وضعیت 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) } }
ارائه پارامترهای اقدامات
برای ارائه اطلاعات اضافی به یک عملکرد، از ActionParameters
API برای ایجاد یک جفت کلید-مقدار تایپ شده استفاده کنید. به عنوان مثال، برای تعریف مقصد کلیک شده:
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() } } }
در زیر، پارامترها در هدف مورد استفاده برای راه اندازی فعالیت گنجانده شده است و به Activity هدف اجازه می دهد آن را بازیابی کند.
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val destination = intent.extras?.getString(KEY_DESTINATION) ?: return // ... } }
پارامترها نیز به ActionCallback
ارائه شده است. از Parameters.Key
تعریف شده برای بازیابی مقدار استفاده کنید:
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 // ... } }