Android विजेट को Google Assistant के साथ इंटिग्रेट करना

1. खास जानकारी

ऐप्लिकेशन की खास सुविधाओं के लिए कार्रवाइयों के पहले कोडलैब में, आपने स्वास्थ्य और फ़िटनेस बीआईआई कैटगरी से बिल्ट-इन इंटेंट (बीआईआई) को लागू करके, Google Assistant को फ़िटनेस ऐप्लिकेशन के सैंपल के तौर पर इस्तेमाल करने का तरीका सीखा.

ऐप्लिकेशन की खास सुविधाओं के लिए कार्रवाइयां करने की सुविधा की मदद से, उपयोगकर्ता Assistant की मदद से, ऐप्लिकेशन की कुछ खास सुविधाओं को सीधे तौर पर लॉन्च कर सकते हैं. इसके लिए, उन्हें "Ok Google, ExampleApp पर दौड़ना शुरू करो" जैसे निर्देश दिए जा सकते हैं. Assistant, ऐप्लिकेशन लॉन्च करने के साथ-साथ उपयोगकर्ता को एक इंटरैक्टिव Android विजेट दिखा सकती है, ताकि ज़रूरी शर्तें पूरी करने वाले बीआईआई के अनुरोधों को पूरा किया जा सके.

एक स्क्रीन पर, Assistant को उपयोगकर्ता की उस क्वेरी के जवाब में विजेट दिखाते हुए दिखाया गया है जिसकी वजह से किसी ऐप्लिकेशन की GET_EXERCISE_OBSERVATION BII क्षमता ट्रिगर हो रही है.

आपको क्या बनाना होगा

इस कोडलैब में, आपको Assistant से जुड़े उपयोगकर्ताओं के अनुरोधों को पूरा करने के लिए, Android के विजेट वापस करने का तरीका बताया गया है. आपको यह जानकारी भी मिलती है:

  • विजेट को आपके हिसाब से बनाने के लिए, उपयोगकर्ता के बीआईआई पैरामीटर.
  • विजेट के लिए, Assistant में लिखाई को बोली में बदलने की सुविधा (टीटीएस) की जानकारी दें.
  • पहले से मौजूद इंटेंट के रेफ़रंस का इस्तेमाल करके, यह पता करें कि कौनसे बीआईआई, विजेट को पूरा करने में मदद करते हैं.

ज़रूरी शर्तें

आगे बढ़ने से पहले, पक्का करें कि आपका डेवलपमेंट एनवायरमेंट, ऐप्लिकेशन की खास सुविधाओं के लिए कार्रवाइयों के डेवलपमेंट के लिए तैयार है. इसमें:

  • शेल कमांड चलाने के लिए टर्मिनल, जिसमें git इंस्टॉल हो.
  • Android Studio का नया और ठीक से काम करने वाला वर्शन.
  • इंटरनेट की सुविधा वाला फ़िज़िकल या वर्चुअल Android डिवाइस.
  • एक ऐसा Google खाता जिससे Android Studio, Google ऐप्लिकेशन, और Google Assistant ऐप्लिकेशन में साइन इन किया गया हो.

अगर किसी फ़िज़िकल डिवाइस का इस्तेमाल किया जा रहा है, तो उसे अपनी लोकल डेवलपमेंट मशीन से कनेक्ट करें.

2. जानें कि यह सुविधा कैसे काम करती है

किसी व्यक्ति का अनुरोध पढ़ने और उसे Assistant में मौजूद इंटेंट (बीआईआई) से मैच करने के लिए, Google Assistant आम भाषा में समझ (एनएलयू) का इस्तेमाल करती है. इसके बाद, Assistant उस इंटेंट के लिए अपने ऐप्लिकेशन में रजिस्टर की जाने वाली क्षमता (जो बीआईआई को लागू करती है) पर मैप करती है. आखिर में, Assistant, उपयोगकर्ता के अनुरोध को पूरा करती है. इसके लिए, उस Android विजेट को दिखाया जाता है जिसे आपका ऐप्लिकेशन, सुविधा में मिली जानकारी का इस्तेमाल करके जनरेट करता है.

इस कोडलैब में, आपने GET_EXERCISE_OBSERVATION बीआईआई के साथ काम करने की सुविधा तय की है. इस सुविधा की मदद से, Assistant को FitActions विजेट क्लास में Android इंटेंट जनरेट करने के निर्देश दिए जाते हैं, ताकि इस बीआईआई के अनुरोधों को पूरा किया जा सके. आपने इस क्लास को अपडेट किया है, ताकि Assistant आपके हिसाब से बनाया गया विजेट जनरेट कर सके. साथ ही, उपयोगकर्ता को यह विजेट दिख सके और Assistant के बारे में सूचना देने के लिए, आपको टीटीएस के बारे में जानकारी भी मिले.

नीचे दिए गए डायग्राम में यह फ़्लो दिखाया गया है:

Assistant विजेट को पूरा करने की जानकारी देने वाला फ़्लो डायग्राम.

Fitकार्रवाइयां विजेट

Fitकार्रवाइयां सैंपल ऐप्लिकेशन में, कसरत की जानकारी देने वाला विजेट होता है. इसे उपयोगकर्ता अपनी होम स्क्रीन पर जोड़ सकते हैं. यह विजेट, GET_EXERCISE_OBSERVATION बीआईआई को ट्रिगर करने वाली उपयोगकर्ता की क्वेरी को पूरा करने का एक बेहतर तरीका है.

विजेट कैसे काम करता है

जब कोई उपयोगकर्ता होम स्क्रीन पर कोई विजेट जोड़ता है, तो विजेट, डिवाइस ब्रॉडकास्ट रिसीवर को पिंग करता है. यह सेवा, ऐप्लिकेशन के AndroidManifest.xml संसाधन में विजेट को पाने वाले व्यक्ति की परिभाषा से, विजेट के बारे में जानकारी हासिल करती है. यह इस जानकारी का इस्तेमाल करके, विजेट को दिखाने वाला RemoteViews ऑब्जेक्ट जनरेट करता है.

सैंपल ऐप्लिकेशन, रिसीवर widgets.StatsWidgetProvider के बारे में बताता है, जो StatsWidgetProvider क्लास से जुड़ी है:

<!-- app/src/main/AndroidManifest.xml -->

<receiver
  android:name=".widgets.StatsWidgetProvider"
  android:exported="false">
  <intent-filter>
    <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
  </intent-filter>
  <meta-data
    android:name="android.appwidget.provider"
    android:resource="@xml/stats_widget" />
</receiver>

StatsWidgetProvider क्लास, StatsWidgetProvider.kt, StatsWidget ऑब्जेक्ट बनाने के फ़्लो को मैनेज करती है. यह इन ज़िम्मेदारियों को संभालता है:

  • विजेट के इंस्टेंस बनाना और उन्हें ऐप्लिकेशन के डेटाबेस में मौजूद कसरत के डेटा की मदद से भरना.
  • formatDataAndSetWidget() की मदद से, कसरत के डेटा को पढ़ने लायक बनाने के लिए फ़ॉर्मैट किया जा रहा है.
  • कसरत का डेटा उपलब्ध न होने पर, setNoActivityDataWidget() का इस्तेमाल करके डिफ़ॉल्ट वैल्यू देना.

Assistant सहायता जोड़ें

इस कोडलैब में, ऐप्लिकेशन की खास सुविधाओं के लिए कार्रवाइयों को मैनेज करने के लिए, सैंपल ऐप्लिकेशन को अपडेट किया जाता है. इन बदलावों में ये शामिल हैं:

  1. StatsWidget ऑब्जेक्ट का इंस्टेंस दिखाने के लिए, GET_EXERCISE_OBSERVATION बीआईआई की सुविधा को कॉन्फ़िगर करना.
  2. StatsWidget क्लास को अपडेट किया जा रहा है, ताकि ऐप्लिकेशन की खास सुविधाओं के लिए कार्रवाइयों की सुविधाएं इस्तेमाल की जा सकें. जैसे:
    • बीआईआई पैरामीटर का इस्तेमाल करके, लोगों को कसरत के खास आंकड़े देखने का मौका मिलता है. ऐसा करने के लिए, "Ok Google, ExampleApp पर मेरी दौड़ने के आंकड़े दिखाओ" जैसी क्वेरी की जा सकती हैं.
    • टीटीएस के बारे में बताने वाली स्ट्रिंग उपलब्ध कराकर.
    • खास मामलों को मैनेज करना. उदाहरण के लिए, जब उपयोगकर्ता की क्वेरी में कसरत के टाइप का पैरामीटर शामिल न हो.

3. अपना डेवलपमेंट एनवायरमेंट तैयार करें

अपनी बुनियादी फ़ाइलें डाउनलोड करें

ऐप्लिकेशन के GitHub रिपॉज़िटरी का क्लोन बनाने के लिए, इस निर्देश को चलाएं:

git clone --branch start-widget-codelab https://github.com/actions-on-google/appactions-fitness-kotlin.git

डेटा स्टोर करने की जगह को क्लोन करने के बाद, उसे Android Studio में खोलने के लिए यह तरीका अपनाएं:

  1. Android Studio में आपका स्वागत है डायलॉग बॉक्स में, प्रोजेक्ट इंपोर्ट करें पर क्लिक करें.
  2. वह फ़ोल्डर ढूंढें और चुनें जिसमें आपने रिपॉज़िटरी (डेटा स्टोर करने की जगह) को क्लोन किया है.

पूरे हो चुके कोडलैब को दिखाने वाले ऐप्लिकेशन का वर्शन देखने के लिए, --branch master फ़्लैग का इस्तेमाल करके सैंपल ऐप्लिकेशन रेपो का क्लोन बनाएं.

Android ऐप्लिकेशन का आईडी अपडेट करना

ऐप्लिकेशन के ऐप्लिकेशन आईडी को अपडेट करने से, आपके टेस्ट डिवाइस पर ऐप्लिकेशन की खास तरह से पहचान होती है. साथ ही, इसमें "डुप्लीकेट पैकेज नाम" की जानकारी भी शामिल नहीं होती है अगर ऐप्लिकेशन को Play Console में अपलोड किया गया है, तो गड़बड़ी का मैसेज दिखेगा. ऐप्लिकेशन आईडी अपडेट करने के लिए, app/build.gradle खोलें:

android {
...
  defaultConfig {
    applicationId "com.MYUNIQUENAME.android.fitactions"
    ...
  }
}

"MYUNIQUENAME" बदलें को applicationId फ़ील्ड में डालें.

टेस्ट प्लगिन इंस्टॉल करें

Google Assistant प्लगिन की मदद से, आप टेस्ट डिवाइस पर अपनी ऐप्लिकेशन कार्रवाइयों की जांच कर सकते हैं. यह सुविधा, आपके Android डिवाइस पर मौजूद Google ऐप्लिकेशन की मदद से Assistant को जानकारी भेजती है. अगर आपके पास पहले से प्लगिन नहीं है, तो उसे इन चरणों की मदद से इंस्टॉल करें:

  1. फ़ाइल पर जाएं > सेटिंग (MacOS पर Android Studio > प्राथमिकताएं).
  2. प्लगिन सेक्शन में, मार्केटप्लेस पर जाएं और "Google Assistant" खोजें. जांच टूल को मैन्युअल तरीके से भी डाउनलोड करके इंस्टॉल किया जा सकता है.
  3. टूल इंस्टॉल करें और Android Studio को रीस्टार्ट करें.

अपने डिवाइस पर ऐप्लिकेशन की जांच करें

ऐप्लिकेशन में और बदलाव करने से पहले, यह समझने में मदद मिलती है कि सैंपल ऐप्लिकेशन क्या-क्या कर सकता है.

अपने टेस्ट डिवाइस पर ऐप्लिकेशन चलाएं:

  1. Android Studio में, अपना फ़िज़िकल या वर्चुअल डिवाइस चुनें. इसके बाद, चलाएं को चुनें > ऐप्लिकेशन चलाएं या टूलबार में RunAndroid Studio में ऐप्लिकेशन का आइकॉन चलाएं. पर क्लिक करें.
  2. Assistant को सेट अप करने और यह पुष्टि करने के लिए कि यह काम कर रही है या नहीं, होम बटन को दबाकर रखें. अगर आपने अपने डिवाइस पर Assistant में साइन इन नहीं किया है, तो आपको ऐसा करना होगा.

Android वर्चुअल डिवाइसों के बारे में ज़्यादा जानकारी के लिए, वर्चुअल डिवाइस बनाना और उन्हें मैनेज करना लेख पढ़ें.

यह देखने के लिए कि यह क्या कर सकता है, ऐप्लिकेशन को थोड़ा एक्सप्लोर करें. ऐप में कसरत की 10 गतिविधियों को पहले से दिखाया जाता है और इन गतिविधियों की जानकारी को पहली बार में दिखाया जाता है.

मौजूदा विजेट आज़माएं

  1. अपने टेस्ट डिवाइस की होम स्क्रीन पर जाने के लिए, होम बटन पर टैप करें.
  2. होम स्क्रीन पर, किसी खाली जगह को दबाकर रखें और विजेट चुनें.
  3. विजेट की सूची में नीचे की ओर स्क्रोल करके, FitActions पर जाएं.
  4. Fitकार्रवाइयां आइकॉन को दबाकर रखें और उसके विजेट को होम स्क्रीन पर रखें.

डिवाइस की होम स्क्रीन पर, FitAction विजेट को दिखाने वाला स्क्रीनशॉट.

4. ऐप्लिकेशन की खास सुविधाओं के लिए कार्रवाई जोड़ें

इस चरण में, GET_EXERCISE_OBSERVATION बीआईआई की सुविधा जोड़ी जाती है. ऐसा करने के लिए, shortcuts.xml में एक नया capability एलिमेंट जोड़ें. इस सुविधा से पता चलता है कि सुविधा को कैसे ट्रिगर किया जाता है, बीआईआई पैरामीटर का इस्तेमाल कैसे किया जाता है, और अनुरोध पूरा करने के लिए, कौनसा Android इंटेंट शुरू करता है.

  1. इस कॉन्फ़िगरेशन की मदद से, सैंपल प्रोजेक्ट shortcuts.xml संसाधन में नया capability एलिमेंट जोड़ें:
    <!-- fitnessactions/app/src/main/res/xml/shortcuts.xml -->
    
    <capability android:name="actions.intent.GET_EXERCISE_OBSERVATION">
      <app-widget
        android:identifier="GET_EXERCISE_OBSERVATION"
        android:targetClass="com.devrel.android.fitactions.widgets.StatsWidgetProvider"
        android:targetPackage="PUT_YOUR_APPLICATION_ID_HERE">
        <parameter
          android:name="exerciseObservation.aboutExercise.name"
          android:key="aboutExerciseName"
          android:required="true">
        </parameter>
        <extra android:name="hasTts" android:value="true"/>
      </app-widget>
      <!-- Add Fallback Intent-->
    </capability>
    
    android:targetPackage वैल्यू, PUT_YOUR_APPLICATION_ID_HERE को अपने यूनीक applicationId से बदलें.

यह सुविधा, GET_EXERCISE_OBSERVATION बीआईआई को app-widget इंटेंट से मैप करती है, ताकि बीआईआई के ट्रिगर होने पर, विजेट उपयोगकर्ता को इंस्टैंशिएट हो जाए और दिखे.

विजेट को ट्रिगर करने से पहले, Assistant उपयोगकर्ता की क्वेरी से, इस्तेमाल किए जा सकने वाले बीआईआई पैरामीटर निकाल लेती है. इस कोडलैब के लिए बीआईआई पैरामीटर exerciseObservation.aboutExercise.name होना ज़रूरी है. इससे पता चलता है कि उपयोगकर्ता ने किस तरह की कसरत का अनुरोध किया है. इस ऐप्लिकेशन में तीन तरह की कसरतें की जा सकती हैं: "दौड़ना", "पैदल चलना", और "साइकल चलाना." Assistant को इन वैल्यू के बारे में बताने के लिए, इनलाइन इन्वेंट्री का इस्तेमाल किया जाता है.

  1. GET_EXERCISE_OBSERVATION क्षमता के ऊपर, shortcuts.xml:
    <!-- shortcuts.xml -->
    
    <!-- shortcuts are bound to the GET_EXERCISE_OBSERVATION capability and
         represent the types of exercises supported by the app. -->
    
    <shortcut
      android:shortcutId="running"
      android:shortcutShortLabel="@string/activity_running">
      <capability-binding android:key="actions.intent.GET_EXERCISE_OBSERVATION">
        <parameter-binding
          android:key="exerciseObservation.aboutExercise.name"
          android:value="@array/runningSynonyms"/>
      </capability-binding>
    </shortcut>
    
    <shortcut
      android:shortcutId="walking"
      android:shortcutShortLabel="@string/activity_walking">
      <capability-binding android:key="actions.intent.GET_EXERCISE_OBSERVATION">
        <parameter-binding
          android:key="exerciseObservation.aboutExercise.name"
          android:value="@array/walkingSynonyms"/>
      </capability-binding>
    </shortcut>
    
    <shortcut
      android:shortcutId="cycling"
      android:shortcutShortLabel="@string/activity_cycling">
      <capability-binding android:key="actions.intent.GET_EXERCISE_OBSERVATION">
        <parameter-binding
          android:key="exerciseObservation.aboutExercise.name"
          android:value="@array/cyclingSynonyms"/>
      </capability-binding>
    </shortcut>
    
    <capability android:name="actions.intent.GET_EXERCISE_OBSERVATION">
      <!-- ... -->
    </capability>
    
    के ऊपर इस कॉन्फ़िगरेशन को जोड़कर इन्वेंट्री के इन एलिमेंट को तय करें

फ़ॉलबैक इंटेंट जोड़ें

फ़ॉलबैक इंटेंट ऐसी स्थितियों को हैंडल करते हैं जिनमें उपयोगकर्ता की क्वेरी को पूरा नहीं किया जा सकता, क्योंकि क्वेरी में क्षमता के लिए ज़रूरी पैरामीटर मौजूद नहीं हैं. GET_EXERCISE_OBSERVATION क्षमता के लिए exerciseObservation.aboutExercise.name पैरामीटर की ज़रूरत होती है, जिसे android:required="true" एट्रिब्यूट से तय किया जाता है. ऐसे मामलों में, Assistant को अनुरोध पूरा करने के लिए फ़ॉलबैक इंटेंट तय करने की ज़रूरत होती है, भले ही क्वेरी में कोई पैरामीटर न दिया गया हो.

  1. shortcuts.xml में, इस कॉन्फ़िगरेशन का इस्तेमाल करके GET_EXERCISE_OBSERVATION सुविधा में फ़ॉलबैक इंटेंट जोड़ें:
    <!-- shortcuts.xml -->
    
    <capability android:name="actions.intent.GET_EXERCISE_OBSERVATION">
    
      <app-widget>
        <!-- ... -->
      </app-widget>
    
      <!-- Fallback intent with no parameters needed to successfully execute.-->
      <intent
        android:identifier="GET_EXERCISE_OBSERVATION_FALLBACK"
        android:action="android.intent.action.VIEW"
        android:targetClass="com.devrel.android.fitactions.widgets.StatsWidgetProvider">
      </intent>
    </capability>
    

इस सैंपल कॉन्फ़िगरेशन में, फ़ॉलबैक फ़ुलफ़िलमेंट एक Android इंटेंट है. इसके Extra डेटा में कोई पैरामीटर नहीं है.

5. Assistant के लिए विजेट को चालू करें

GET_EXERCISE_OBSERVATION की सुविधा इंस्टॉल होने के बाद, विजेट की क्लास को अपडेट करें, ताकि ऐप्लिकेशन की खास सुविधाओं के लिए बोलकर फ़ोन इस्तेमाल करने की सुविधा काम कर सके.

विजेट एक्सटेंशन लाइब्रेरी जोड़ना

ऐप्लिकेशन की खास सुविधाओं के लिए कार्रवाइयों के लिए, विजेट एक्सटेंशन लाइब्रेरी की मदद से, बोलकर Assistant का इस्तेमाल करने के अनुभव को बेहतर बनाया जा सकता है. खास तौर पर, इसकी मदद से अपने विजेट के लिए, टीटीएस के बारे में ज़रूरत के मुताबिक जानकारी दी जा सकती है.

  1. ऐप्लिकेशन /app/build.gradle संसाधन के नमूने के लिए, विजेट एक्सटेंशन लाइब्रेरी डिपेंडेंसी जोड़ें:
    // app/build.gradle
    
    dependencies {
      //...
      implementation "com.google.assistant.appactions:widgets:0.0.1"
    }
    
    Android Studio में चेतावनी बॉक्स में जाकर, अभी सिंक करें पर क्लिक करें. हर build.gradle बदलाव के बाद सिंक करने से, ऐप्लिकेशन बनाते समय होने वाली गड़बड़ियों से बचा जा सकता है.

विजेट सेवा जोड़ें

सेवा एक ऐप्लिकेशन घटक है, जो बैकग्राउंड में लंबे समय तक चलने वाली कार्रवाइयां कर सकता है. विजेट के अनुरोधों को प्रोसेस करने के लिए, आपके ऐप्लिकेशन को कोई सेवा देनी होगी.

  1. इस कॉन्फ़िगरेशन की मदद से, सैंपल ऐप्लिकेशन के AndroidManifest.xml संसाधन में कोई सेवा जोड़ें:
    <!-- AndroidManifest.xml -->
    <service
       android:name=".widgets.StatsWidgetProvider"
       android:enabled="true"
       android:exported="true">
       <intent-filter>
           <action
               android:name="com.google.assistant.appactions.widgets.PIN_APP_WIDGET" />
       </intent-filter>
    </service>
    
    

वॉइस क्वेरी के दौरान, विजेट के पूरा होने को ट्रिगर करने वाली क्वेरी के दौरान, Assistant इस सेवा का इस्तेमाल, ऐप्लिकेशन को अनुरोध भेजने के लिए करती है. सेवा को अनुरोध, बीआईआई डेटा के साथ मिलता है. यह सेवा इस डेटा का इस्तेमाल, RemoteView विजेट ऑब्जेक्ट जनरेट करने के लिए करती है, ताकि Assistant में रेंडर किया जा सके.

विजेट की क्लास को अपडेट करें

आपका ऐप्लिकेशन, अब GET_EXERCISE_OBSERVATION क्षमता के अनुरोधों को आपकी विजेट क्लास में रूट करने के लिए कॉन्फ़िगर हो गया है. इसके बाद, बीआईआई पैरामीटर वैल्यू का इस्तेमाल करके, उपयोगकर्ता के अनुरोध के हिसाब से बनाया गया विजेट इंस्टेंस जनरेट करने के लिए, StatsWidget.kt क्लास को अपडेट करें.

  1. StatsWidget.kt क्लास खोलें और ऐप्लिकेशन की खास सुविधाओं के लिए कार्रवाइयों के विजेट एक्सटेंशन की लाइब्रेरी को इंपोर्ट करें:
    // StatsWidget.kt
    
    // ... Other import statements
    import com.google.assistant.appactions.widgets.AppActionsWidgetExtension
    
    
  2. विजेट को पॉप्युलेट करने वाली जानकारी तय करते समय, इन प्राइवेट वैरिएबल को जोड़ें:
    // StatsWidget.kt
    
    private val hasBii: Boolean
    private val isFallbackIntent: Boolean
    private val aboutExerciseName: String
    private val exerciseType: FitActivity.Type
    
  3. क्लास को, Assistant से मिले विजेट के विकल्पों का डेटा इस्तेमाल करने की अनुमति देने के लिए, init फ़ंक्शन जोड़ें:
    // StatsWidget.kt
    
    init {
      val optionsBundle = appWidgetManager.getAppWidgetOptions(appWidgetId)
      val bii = optionsBundle.getString(AppActionsWidgetExtension.EXTRA_APP_ACTIONS_BII)
      hasBii = !bii.isNullOrBlank()
      val params = optionsBundle.getBundle(AppActionsWidgetExtension.EXTRA_APP_ACTIONS_PARAMS)
    
      if (params != null) {
        isFallbackIntent = params.isEmpty
        if (isFallbackIntent) {
          aboutExerciseName = context.resources.getString(R.string.activity_unknown)
        } else {
            aboutExerciseName = params.get("aboutExerciseName") as String
          }
      } else {
          isFallbackIntent = false
          aboutExerciseName = context.resources.getString(R.string.activity_unknown)
      }
      exerciseType = FitActivity.Type.find(aboutExerciseName)
    }
    
    

चलिए, जानते हैं कि इन अपडेट की मदद से StatsWidget.kt क्लास, GET_EXERCISE_OBSERVATION सुविधा से जनरेट किए गए Android इंटेंट का जवाब कैसे दे पाती है:

  • optionsBundle = बंडल
    • बंडल ऐसे ऑब्जेक्ट होते हैं जिनका इस्तेमाल प्रोसेस की सीमाओं, इंटेंट वाली गतिविधियों के बीच, और कॉन्फ़िगरेशन में बदलावों के दौरान अस्थायी स्थिति को स्टोर करने के लिए किया जाता है. विजेट को कॉन्फ़िगरेशन से जुड़ा डेटा भेजने के लिए, Assistant Bundle ऑब्जेक्ट का इस्तेमाल करती है.
  • bii = actions.intent.GET_EXERCISE_OBSERVATION
    • बीआईआई का नाम, AppActionsWidgetExtension का इस्तेमाल करने वाले बंडल में उपलब्ध है.
  • hasBii = true
    • इस बात की जांच करता है कि बीआईआई मौजूद है या नहीं.
  • params = Bundle[{aboutExerciseName=running}]
    • ऐप्लिकेशन की खास सुविधाओं के लिए कार्रवाइयों से जनरेट किया गया एक खास बंडल, विजेट के विकल्पों Bundle में मौजूद होता है. इसमें बीआईआई के की/वैल्यू पेयर होते हैं. इस मामले में, वैल्यू running को उदाहरण क्वेरी से लिया गया था, "Ok Google, ExampleApp पर मेरे दौड़ने के आंकड़े दिखाओ."
  • isFallbackIntent = false
    • यह जांच करता है कि Extras इंटेंट में ज़रूरी बीआईआई पैरामीटर मौजूद हैं या नहीं.
  • aboutExerciseName = running
    • aboutExerciseName के लिए इंटेंट Extras वैल्यू मिलती है.
  • exerciseType = RUNNING
    • यह फ़ंक्शन, aboutExerciseName का इस्तेमाल करके, मिलते-जुलते डेटाबेस टाइप ऑब्जेक्ट को खोजता है.

अब StatsWidget क्लास, ऐप्लिकेशन की खास सुविधाओं के लिए कार्रवाइयों का Android इंटेंट डेटा प्रोसेस कर सकती है. इसलिए, विजेट बनाने का फ़्लो लॉजिक अपडेट करें, ताकि यह पता लगाया जा सके कि विजेट को ऐप्लिकेशन की खास सुविधाओं के लिए ट्रिगर किया गया है या नहीं.

  1. StatsWidget.kt में, updateAppWidget() फ़ंक्शन को इस कोड से बदलें:
    // StatsWidget.kt
    
    fun updateAppWidget() {
       /**
        * Checks for App Actions BII invocation and if BII parameter data is present.
        * If parameter data is missing, use data from last exercise recorded to the
        *  fitness tracking database.
        */
       if (hasBii && !isFallbackIntent) {
           observeAndUpdateRequestedExercise()
       } else observeAndUpdateLastExercise()
    }
    
    

ऊपर दिया गया कोड एक नए फ़ंक्शन, observeAndUpdateRequestedExercise का रेफ़रंस देता है. यह फ़ंक्शन, ऐप्लिकेशन की खास सुविधाओं के लिए कार्रवाइयों के Android इंटेंट से पास किए गए exerciseType पैरामीटर का डेटा इस्तेमाल करके, विजेट डेटा जनरेट करता है.

  1. observeAndUpdateRequestedExercise फ़ंक्शन को इस कोड के साथ जोड़ें:
    // StatsWidget.kt
    
    /**
    * Create and observe the last exerciseType activity LiveData.
    */
    private fun observeAndUpdateRequestedExercise() {
      val activityData = repository.getLastActivities(1, exerciseType)
    
       activityData.observeOnce { activitiesStat ->
           if (activitiesStat.isNotEmpty()) {
               formatDataAndSetWidget(activitiesStat[0])
               updateWidget()
           } else {
               setNoActivityDataWidget()
               updateWidget()
           }
       }
    }
    
    

पिछले कोड में, ऐप्लिकेशन के लोकल डेटाबेस से फ़िटनेस डेटा वापस पाने के लिए, ऐप्लिकेशन में मिली किसी मौजूदा डेटा स्टोर करने की जगह क्लास का इस्तेमाल करें. यह क्लास एक एपीआई उपलब्ध कराती है, जिससे डेटाबेस को आसानी से ऐक्सेस किया जा सकता है. डेटा स्टोर करने की जगह, डेटाबेस के बारे में क्वेरी करते समय LiveData ऑब्जेक्ट को सार्वजनिक करके काम करती है. अपने कोड में, आपको यह LiveData दिख रहा है, ताकि आपको फ़िटनेस से जुड़ी नई गतिविधि फिर से मिल सके.

टीटीएस चालू करें

विजेट दिखाते समय, Assistant को सूचना देने के लिए एक टीटीएस स्ट्रिंग दी जा सकती है. हमारा सुझाव है कि आप इसे शामिल करें, ताकि आपके विजेट के साथ सुनने लायक संदर्भ उपलब्ध कराया जा सके. यह सुविधा, ऐप्लिकेशन की खास सुविधाओं के लिए कार्रवाइयों के विजेट एक्सटेंशन लाइब्रेरी से मिलती है. इससे, Assistant में विजेट के साथ दिखने वाले टेक्स्ट और टीटीएस के बारे में जानकारी सेट करने की सुविधा मिलती है.

टीटीएस के बारे में जानकारी देने के लिए, formatDataAndSetWidget फ़ंक्शन एक बेहतर जगह है. यह ऐप्लिकेशन के डेटाबेस से मिलने वाले गतिविधि डेटा को फ़ॉर्मैट करता है.

  1. StatsWidget.kt में, इस कोड को formatDataAndSetWidget फ़ंक्शन में जोड़ें:
    // StatsWidget.kt
    
    private fun formatDataAndSetWidget(
      activityStat: FitActivity,
    ) {
          // ...
    
          // Add conditional for hasBii for widget with data
          if (hasBii) {
             // Formats TTS speech and display text for Assistant
             val speechText = context.getString(
                 R.string.widget_activity_speech,
                 activityExerciseTypeFormatted,
                 formattedDate,
                 durationInMin,
                 distanceInKm
             )
             val displayText = context.getString(
                 R.string.widget_activity_text,
                 activityExerciseTypeFormatted,
                 formattedDate
             )
             setTts(speechText, displayText)
          }
    }
    
    

ऊपर दिया गया कोड दो स्ट्रिंग रिसॉर्स का रेफ़रंस देता है: एक स्पीच के लिए और दूसरा टेक्स्ट के लिए. टीटीएस से जुड़े सुझावों के लिए, हमारे विजेट वीडियो का लिखाई को बोली में बदलने का सुझाव वाला हिस्सा देखें. यह नमूना setTts के बारे में भी बताता है. यह एक ऐसा नया फ़ंक्शन है जो विजेट के इंस्टेंस को टीटीएस की जानकारी देता है.

  1. इस नए setTts फ़ंक्शन को StatsWidget.kt में जोड़ने के लिए, यह कोड इस्तेमाल करें:
    // StatsWidget.kt
    
    /**
     * Sets TTS to widget
     */
    private fun setTts(
      speechText: String,
      displayText: String,
    ) {
      val appActionsWidgetExtension: AppActionsWidgetExtension =
          AppActionsWidgetExtension.newBuilder(appWidgetManager)
            .setResponseSpeech(speechText)  // TTS to be played back to the user
            .setResponseText(displayText)  // Response text to be displayed in Assistant
            .build()
    
      // Update widget with TTS
      appActionsWidgetExtension.updateWidget(appWidgetId)
    }
    

आखिर में, जब कसरत का डेटाबेस, अनुरोध किए गए कसरत के टाइप का खाली डेटा दिखाता है, तो टीटीएस की जानकारी सेट करके टीटीएस लॉजिक को पूरा करें.

  1. StatsWidget.kt में setNoActivityDataWidget() फ़ंक्शन को इस कोड के साथ अपडेट करें:
    // StatsWidget.kt
    
    private fun setNoActivityDataWidget() {
      // ...
      // Add conditional for hasBii for widget without data
      if (hasBii) {
        // formats speech and display text for Assistant
        // https://developers.google.com/assistant/app/widgets#library
        val speechText =
          context.getString(R.string.widget_no_activity_speech, aboutExerciseName)
        val displayText =
          context.getString(R.string.widget_no_activity_text)
    
        setTts(speechText, displayText)
      }
    }
    

6. ऐप्लिकेशन की खास सुविधाओं के लिए कार्रवाई की जांच करें

डेवलपमेंट के दौरान, टेस्ट डिवाइस पर Assistant ऐप्लिकेशन कार्रवाइयों की झलक देखने के लिए, Google Assistant प्लगिन का इस्तेमाल करें. टूल की मदद से, ऐप्लिकेशन की किसी खास कार्रवाई के लिए इंटेंट पैरामीटर में बदलाव किए जा सकते हैं. इससे, यह पता लगाया जा सकता है कि आपकी कार्रवाई उन अलग-अलग तरीकों को कैसे मैनेज करती है जिनसे उपयोगकर्ता, Assistant से इसे चलाने के लिए कह सकते हैं.

गाने के टीज़र के तौर पर बना शॉर्ट वीडियो बनाना

प्लग इन की मदद से, अपने ऐप्लिकेशन की कार्रवाई की जांच करने के लिए:

  1. टूल पर जाएं > Google Assistant > ऐप्लिकेशन की खास सुविधाओं के लिए कार्रवाइयों की जांच करने वाला टूल. आपसे अपने Google खाते का इस्तेमाल करके, Android Studio में साइन इन करने के लिए कहा जा सकता है.
  2. झलक बनाएं पर क्लिक करें. अगर कहा जाए, तो ऐप्लिकेशन की खास सुविधाओं के लिए कार्रवाइयों से जुड़ी नीतियों और सेवा की शर्तों को पढ़ें और स्वीकार करें.

अपने हिसाब से कसरत के टाइप की जांच करना

परीक्षण टूल में इन चरणों का पालन करके ऐप्लिकेशन में पिछली बार पूरे किए गए समय के बारे में जानकारी दिखाने वाला विजेट वापस करें:

  1. पहले चरण में जहां टूल आपसे बीआईआई चुनने और उसे कॉन्फ़िगर करने के लिए कहता है, तो actions.intent.GET_EXERCISE_OBSERVATION चुनें.
  2. exerciseObservation बॉक्स में, कसरत के डिफ़ॉल्ट नाम को climbing से बदलकर run करें.
  3. ऐप्लिकेशन ऐक्शन चलाएं पर क्लिक करें.

एक स्क्रीन, जिसमें Google Assistant प्लगिन का इस्तेमाल करके लौटाए गए विजेट को दिखाया गया है.

कसरत के ऐसे तरीके को टेस्ट करना जिसकी उम्मीद न हो

परीक्षण टूल में किसी अनपेक्षित व्यायाम प्रकार का परीक्षण करने के लिए:

  1. exerciseObservation बॉक्स में, name वैल्यू को Run से Climbing में अपडेट करें.
  2. ऐप्लिकेशन ऐक्शन चलाएं पर क्लिक करें.

Assistant को "कोई गतिविधि नहीं मिली" दिखाने वाला विजेट वापस करना चाहिए जानकारी.

स्क्रीन पर एक विजेट दिख रहा है. इसमें Google Assistant प्लगिन की मदद से, कसरत से जुड़ी कोई जानकारी नहीं दिखाई गई है.

फ़ॉलबैक के इंटेंट की जांच करना

फ़ॉलबैक इंटेंट को ट्रिगर करने वाली क्वेरी में, किसी भी तरह की कसरत की पिछली बार लॉग की गई गतिविधि के बारे में जानकारी वाला विजेट दिखना चाहिए.

फ़ॉलबैक इंटेंट की जांच करने के लिए:

  1. exerciseObservation बॉक्स में, aboutExercise ऑब्जेक्ट को मिटाएं.
  2. ऐप्लिकेशन ऐक्शन चलाएं पर क्लिक करें.

Assistant को एक विजेट दिखना चाहिए, जिसमें आख़िरी बार किए गए टास्क की जानकारी दिखनी चाहिए.

एक स्क्रीन, जिस पर Google Assistant प्लगिन का इस्तेमाल करके, एक विजेट दिख रहा है. इसमें पिछली बार रिकॉर्ड की गई गतिविधि दिख रही है.

7. अगले चरण

बधाई हो!

अब आपके पास उपयोगकर्ताओं की ज़रूरतों को पूरा करने की क्षमता है Assistant की सुविधा वाले Android विजेट का इस्तेमाल करके क्वेरी पूछी जा सकती है.

हमने इन विषयों के बारे में बताया

इस कोडलैब में, आपने ये सीखा:

  • बीआईआई में कोई ऐप्लिकेशन विजेट जोड़ें.
  • Android Extras से पैरामीटर ऐक्सेस करने के लिए, विजेट में बदलाव करें.

आगे क्या करना है

यहां से, अपने फ़िटनेस ऐप्लिकेशन को और बेहतर बनाया जा सकता है. पूरे हो चुके प्रोजेक्ट का रेफ़रंस देने के लिए, GitHub पर मुख्य रेपो देखें.

ऐप्लिकेशन की खास सुविधाओं के लिए कार्रवाइयों की सुविधा का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, यहां कुछ सुझाव दिए गए हैं:

Actions on Google का इस्तेमाल जारी रखने के लिए, इन संसाधनों को एक्सप्लोर करें:

हमारी नई सूचनाओं के साथ बने रहने के लिए, हमें Twitter @ActionsOnGoogle पर फ़ॉलो करें. साथ ही, आपने जो बनाया है उसे शेयर करने के लिए #appactions पर ट्वीट करें!

सुझाव, शिकायत या राय से जुड़ा सर्वे

आखिर में, इस कोडलैब के साथ अपने अनुभव के बारे में सुझाव देने के लिए, कृपया यह सर्वे भरें.