تعمل ميزة "نظرة سريعة" على تبسيط التعامل مع تفاعل المستخدمين من خلال صفوف Action
. تحدّد فئات
Action
في Glance الإجراءات التي يمكن للمستخدم اتّخاذها، ويمكنك تحديد
العملية التي يتم تنفيذها كردّ على الإجراء. يمكنك تطبيق 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>() ) }
تنفيذ إجراءات مخصصة
بدلاً من إطلاق هدف محدّد، يمكن لميزة "نظرة سريعة" استخدام إجراء 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 // ... } }