تبسّط ميزة "نظرة سريعة" التعامل مع تفاعل المستخدمين من خلال فئات Action
. ميزة Glances
تحدّد Action
فئة الإجراءات التي يمكن للمستخدم اتخاذها، ويمكنك تحديد
العملية التي يتم تنفيذها استجابةً للإجراء. يمكنك تطبيق Action
على أي
باستخدام الطريقة GlanceModifier.clickable
.
تعمل أدوات التطبيقات على عملية عن بُعد، بحيث يتم تحديد الإجراءات عند الإنشاء
الوقت ويحدث التنفيذ في العملية البعيدة. باللغة RemoteViews
الأصلية،
يتم ذلك عبر PendingIntents
.
يتم وصف الإجراءات التالية في هذه الصفحة:
إطلاق نشاط
لبدء نشاط على تفاعل المستخدم، قدِّم
actionStartActivity
إلى Button
أو دالة أخرى قابلة للإنشاء عبر
مفتاح التعديل GlanceModifier.clickable
(..)
أضِف أيًا مما يلي باللغة actionStartActivity
:
- فئة النشاط المستهدف
ComponentName
- النية
تعمل ميزة "نظرة سريعة" على ترجمة المهمّة إلى 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 إجراء lambda أو
actionRunCallback
لتنفيذ إجراء، مثل تحديث واجهة المستخدم أو الحالة
تفاعل المستخدم.
تنفيذ إجراءات lambda
يمكنك استخدام دوال lambda كعمليات استدعاء لتفاعلات واجهة المستخدم.
على سبيل المثال، أدخِل دالة lambda في GlanceModifier.clickable
.
مفتاح التعديل:
Text( text = "Submit", modifier = GlanceModifier.clickable { submitData() } )
أو يمكنك تمريره إلى المعلَمة onClick
في العناصر القابلة للإنشاء التي تتيحها:
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
.
واجهة برمجة التطبيقات لإنشاء زوج المفتاح/القيمة المكتوب. على سبيل المثال، لتحديد نوع النقرة
الوجهة:
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() } } }
أسفل، يتم تضمين المعاملات في الغرض المستخدم لإطلاق النشاط، مما يسمح للنشاط المستهدف باسترداده.
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 // ... } }