एक नज़र में जानकारी देखने की सुविधा, Action
क्लास का इस्तेमाल करके उपयोगकर्ता के इंटरैक्शन को मैनेज करना आसान बनाती है. एक नज़र में
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>() ) }
कस्टम कार्रवाइयां करें
किसी खास टारगेट को लॉन्च करने के बजाय, नज़र में जानकारी देखने की सुविधा के लिए, lambda ऐक्शन या
कोई कार्रवाई करने के लिए actionRunCallback
. जैसे, यूज़र इंटरफ़ेस (यूआई) या स्थिति अपडेट करना
उपयोगकर्ता इंटरैक्शन.
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
(..) को कॉल करें. ज़्यादा जानकारी के लिए, झलकAppWidget की स्थिति मैनेज करें पर जाएं
सेक्शन में जाएं.
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 // ... } }