उपयोगकर्ता के इंटरैक्शन मैनेज करना

एक नज़र में जानकारी देखने की सुविधा, 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 में, इनमें से कोई एक जानकारी दें:

@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
        // ...
    }
}