שילוב ווידג'טים של Android עם Google Assistant

1. סקירה כללית

ב-first App Actions Codelab, למדתם איך להרחיב את Google Assistant לאפליקציית כושר לדוגמה על ידי הטמעת Intents מובנים (BII) מקטגוריית Health and Fitness BII.

'פעולות באפליקציה' מאפשרות למשתמשים להפעיל ישירות תכונות ספציפיות של האפליקציה מ-Assistant. למשל, אפשר לשאול: "Ok Google, start a run on ExampleApp". בנוסף להשקת האפליקציות, Assistant יכולה להציג למשתמש ווידג'ט אינטראקטיבי של Android כדי למלא בקשות של ממשקי BII שעומדים בדרישות.

מסך שבו מוצגת Assistant שמחזירה ווידג'ט בתגובה\nלשאילתת משתמש שהפעילה אפליקציות ליכולת GET_EXERCISE_OBSERVATION BII.

מה תפַתחו

ב-Codelab הזה תלמדו איך להחזיר ווידג'טים של Android כדי למלא בקשות של משתמשים מ-Assistant. תלמדו גם:

  • פרמטרים של BII של משתמש להתאמה אישית של ווידג'טים.
  • הוספת רכיבי מבוא של המרת טקסט לדיבור (TTS) ב-Assistant לווידג'טים.
  • ניתן להשתמש בחומר העזר בנושא Intent מובנה כדי לקבוע אילו ממשקי BII תומכים במימוש ווידג'ט.

דרישות מוקדמות

לפני שממשיכים, צריך לוודא שסביבת הפיתוח מוכנה לפיתוח של 'פעולות באפליקציה'. היא צריכה לכלול:

  • טרמינל להרצת פקודות מעטפת עם git מותקן.
  • הגרסה היציבה האחרונה של Android Studio.
  • מכשיר Android פיזי או וירטואלי עם גישה לאינטרנט.
  • חשבון Google שמחובר ל-Android Studio, לאפליקציית Google ולאפליקציית Google Assistant.

אם אתם משתמשים במכשיר פיזי, צריך לחבר אותו למכונת הפיתוח המקומית.

2. איך זה עובד

Google Assistant משתמשת בהבנת שפה טבעית (NLU) כדי לקרוא בקשות של משתמשים ולהתאים אותה ל-Intent מובנה של Assistant (BII). לאחר מכן, Assistant ממפה את הכוונה ליכולת (שמטמיעה את ה-BII), שרושמים להכוונה הזו באפליקציה. לבסוף, Assistant ממלאת את הבקשה של המשתמש על ידי הצגת הווידג'ט ל-Android שהאפליקציה יוצרת באמצעות הפרטים שביכולת.

ב-Codelab הזה מגדירים יכולת שרושמת תמיכה ב-BII של GET_EXERCISE_OBSERVATION. באפשרות הזו, אתם מבקשים מ-Assistant ליצור Intent של Android למחלקת הווידג'טים FitActions כדי למלא בקשות ל-BII הזה. מעדכנים את הכיתה הזו כדי ליצור ווידג'ט מותאם אישית ש-Assistant תציג למשתמש, וקדמה ל-TTS שעליה Assistant תוכל להכריז.

התרשים הבא מדגים את התהליך הזה:

תרשים זרימה שמדגים מילוי הזמנות בווידג'ט של Assistant.

הווידג'ט של FitActions

האפליקציה לדוגמה של FitActions מכילה ווידג'ט של מידע על אימון הכושר שמשתמשים יכולים להוסיף למסך הבית. הווידג'ט הזה הוא מועמד מעולה למילוי שאילתות של משתמשים שמפעילות את ה-BII של 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

ב-Codelab הזה, מעדכנים את האפליקציה לדוגמה כדי לטפל בפונקציונליות של 'פעולות באפליקציה'. השינויים האלה כוללים:

  1. הגדרת יכולת ה-BII של GET_EXERCISE_OBSERVATION להחזרת מופע של האובייקט StatsWidget.
  2. המערכת מעדכנים את הכיתה StatsWidget כדי להשתמש בתכונות של 'פעולות באפליקציה', כמו:
    • שימוש בפרמטרים של BII, כדי לאפשר למשתמשים לצפות בנתונים סטטיסטיים ספציפיים של אימוני כושר באמצעות שאלות כמו: "Ok Google, show my run center on ExampleApp".
    • אספקת מחרוזות מבוא ל-TTS.
    • ניהול מקרים מיוחדים, למשל כששאילתת המשתמש לא כוללת פרמטר של סוג אימון.

3. הכנת סביבת הפיתוח

הורדת הקבצים הבסיסיים

מריצים את הפקודה הבאה כדי לשכפל את מאגר GitHub של האפליקציה לדוגמה:

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

אחרי שמשכפלים את המאגר, פועלים לפי השלבים הבאים כדי לפתוח אותו ב-Android Studio:

  1. בתיבת הדו-שיח 'ברוך בואך אל Android Studio' לוחצים על ייבוא פרויקט.
  2. מוצאים את התיקייה שבה שכפולם את המאגר ובוחרים בה.

כדי לראות גרסה של האפליקציה שמייצגת את ה-Codelab שהושלמה, צריך לשכפל את מאגר האפליקציה לדוגמה באמצעות הדגל --branch master.

עדכון המזהה של האפליקציה ל-Android

עדכון מזהה האפליקציה של האפליקציה משמש לזיהוי ייחודי של האפליקציה במכשיר הבדיקה ולמניעת 'שם חבילה כפול'. שגיאה אם האפליקציה הועלתה ל-Play Console. כדי לעדכן את מזהה האפליקציה, פותחים את app/build.gradle:

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

מחליפים את "MYUNIQUENAME" בשדה applicationId למשהו ייחודי לך.

התקנת הפלאגין לבדיקה

הפלאגין של Google Assistant מאפשר לבדוק את הפעולות באפליקציה במכשיר בדיקה. לשם כך, המידע נשלח ל-Assistant באמצעות אפליקציית Google במכשיר Android. אם הפלאגין עדיין לא מותקן, מתקינים אותו לפי השלבים הבאים:

  1. עוברים אל קובץ > הגדרות (Android Studio > העדפות ב-MacOS).
  2. בקטע 'יישומי פלאגין', עוברים אל Marketplace ומחפשים את 'Google Assistant'. אתם יכולים גם להוריד ולהתקין את כלי הבדיקה באופן ידני.
  3. מתקינים את הכלי ומפעילים מחדש את Android Studio.

בדיקת האפליקציה במכשיר

לפני שמבצעים שינויים נוספים באפליקציה, כדאי להבין מה אפשר לעשות באמצעות האפליקציה לדוגמה.

מריצים את האפליקציה במכשיר הבדיקה:

  1. ב-Android Studio, בוחרים את המכשיר הפיזי או הווירטואלי ובוחרים באפשרות הפעלה > אפשר להפעיל את האפליקציה או ללחוץ על הפעלההפעלת סמל האפליקציה ב-Android Studio. בסרגל הכלים.
  2. כדי להגדיר את Assistant ולוודא שהיא פועלת, לוחצים לחיצה ארוכה על הלחצן הראשי. אם עדיין לא עשית זאת, יהיה עליך להיכנס אל Assistant במכשיר שלך.

מידע נוסף על מכשירים וירטואליים של Android זמין במאמר יצירה וניהול של מכשירים וירטואליים.

בדקו בקצרה את האפליקציה כדי לראות מה היא יכולה לעשות. האפליקציה מאכלסת מראש 10 פעילויות של תרגול ומציגה את המידע הזה בתצוגה הראשונה.

רוצה לנסות את הווידג'ט הקיים?

  1. מקישים על לחצן דף הבית כדי לעבור למסך הבית של מכשיר הבדיקה.
  2. לוחצים לחיצה ארוכה על אזור ריק במסך הבית ובוחרים באפשרות ווידג'טים.
  3. גוללים למטה ברשימת הווידג'טים אל FitActions.
  4. ללחוץ לחיצה ארוכה על הסמל של FitActions ולהציב את הווידג'ט שלו במסך הבית.

צילום מסך שבו מוצג הווידג&#39;ט של FitActions במסך הבית של המכשיר.

4. הוספת הפעולה באפליקציה

בשלב הזה, מוסיפים את יכולת ה-BII של GET_EXERCISE_OBSERVATION. כדי לעשות זאת, צריך להוסיף רכיב capability חדש ב-shortcuts.xml. היכולת הזו מציינת איך היכולת מופעלת, אופן השימוש בפרמטרים של BII ואילו כוונות של Android מופעלות כדי למלא את הבקשה.

  1. מוסיפים רכיב capability חדש למשאב shortcuts.xml של הפרויקט לדוגמה, עם ההגדרות האישיות הבאות:
    <!-- 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>
    
    מחליפים את הערך PUT_YOUR_APPLICATION_ID_HERE ב-android:targetPackage ב-applicationId הייחודי שלכם.

היכולת הזו ממפה את ה-BII של GET_EXERCISE_OBSERVATION ל-Intent של app-widget, כך שכאשר ה-BII מופעל, הווידג'ט יוצר ומוצג למשתמש.

לפני הפעלת הווידג'ט, Assistant מחלצת פרמטרים נתמכים של BII משאילתת המשתמש. ה-Codelab הזה מחייב את פרמטר ה-BII 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>
    

הוספת Intent חלופי

אובייקטים מסוג Intent חלופיים מטפלים במצבים שבהם אי אפשר למלא שאילתת משתמש כי חסרים בה פרמטרים שנדרשים על ידי היכולת. היכולת GET_EXERCISE_OBSERVATION מחייבת את הפרמטר exerciseObservation.aboutExercise.name, שצוין באמצעות המאפיין android:required="true". במצבים כאלה, Assistant דורשת להגדיר Intent חלופי כדי לאפשר לבקשה להצליח, גם אם לא סופקו פרמטרים בשאילתה.

  1. ב-shortcuts.xml, מוסיפים Intent חלופי ליכולת של 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>
    

בהגדרה לדוגמה הזו, מילוי ההזמנות החלופי הוא Intent של Android ללא פרמטרים בנתוני Extra שלו.

5. הפעלת הווידג'ט ל-Assistant

אם נוצרה היכולת GET_EXERCISE_OBSERVATION, מעדכנים את מחלקה של הווידג'ט כך שתתמוך בהפעלה קולית של 'פעולות באפליקציה'.

הוספה של ספריית התוספים לווידג'טים

ספריית התוספים של הווידג'טים של 'פעולות באפליקציה' משפרת את הווידג'טים לחוויות של Assistant להעברה קולית. באופן ספציפי, היא מאפשרת לך לספק הקדמה מותאמת אישית של TTS עבור הווידג'טים שלך.

  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 משתמשת בשירות הזה כדי לשלוח בקשות לאפליקציה. השירות מקבל את הבקשה יחד עם נתוני ה-BII. השירות משתמש בנתונים האלה כדי ליצור אובייקט של ווידג'ט RemoteView לעיבוד ב-Assistant.

עדכון מחלקת הווידג'טים

האפליקציה שלך מוגדרת עכשיו לנתב בקשות של יכולת GET_EXERCISE_OBSERVATION למחלקה של הווידג'טים. בשלב הבא, מעדכנים את המחלקה StatsWidget.kt כדי ליצור מופע ווידג'ט שמותאם אישית לבקשת המשתמש, באמצעות ערכי פרמטרים של BII.

  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. אפשר להוסיף את הפונקציה init כדי לאפשר לכיתה להשתמש בנתוני האפשרויות של הווידג'ט שמועברים מ-Assistant:
    // 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 להגיב לאובייקטים של Intent של Android שנוצרו על ידי היכולת GET_EXERCISE_OBSERVATION:

  • optionsBundle = חבילה
    • חבילות הן אובייקטים שמיועדים לשימוש מעבר לגבולות של תהליכים, בין פעילויות עם כוונות ולאחסון מצב זמני בכל שינוי של הגדרות אישיות. Assistant משתמשת באובייקטים מסוג Bundle כדי להעביר את נתוני ההגדרות לווידג'ט.
  • bii = actions.intent.GET_EXERCISE_OBSERVATION
    • שם ה-BII זמין מהחבילה באמצעות AppActionsWidgetExtension.
  • hasBii = true
    • המערכת בודקת אם יש BII.
  • params = Bundle[{aboutExerciseName=running}]
    • חבילה מיוחדת, שנוצרה על ידי 'פעולות באפליקציה', מוצבת בתוך אפשרויות הווידג'ט Bundle. הוא מכיל את צמדי מפתח/ערך של ה-BII. במקרה הזה, הערך running חולץ מהשאילתה לדוגמה, "Ok Google, show my running history on ExampleApp".
  • isFallbackIntent = false
    • הפונקציה בודקת אם יש פרמטרים נדרשים של BII ב-Intent Extras.
  • aboutExerciseName = running
    • הפונקציה מקבלת את הערך של Intent Extras עבור aboutExerciseName.
  • exerciseType = RUNNING
    • משתמש ב-aboutExerciseName כדי לחפש את האובייקט התואם של סוג מסד הנתונים.

עכשיו, כשהמחלקה StatsWidget יכולה לעבד נתוני Intent נכנסים של פעולות באפליקציה, צריך לעדכן את הלוגיקה של תהליך יצירת הווידג'ט כדי לבדוק אם הווידג'ט הופעל על ידי פעולה באפליקציה.

  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. הפונקציה הזו יוצרת נתוני ווידג'ט באמצעות נתוני הפרמטר exerciseType שמועברים על ידי Intent של Android לפעולות באפליקציה.

  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()
           }
       }
    }
    
    

בקוד הקודם, צריך להשתמש במחלקה קיימת של repository שנמצאה באפליקציה כדי לאחזר נתוני כושר ממסד הנתונים המקומי של האפליקציה. הכיתה הזו מספקת API שמפשט את הגישה למסד הנתונים. המאגר פועל על ידי חשיפת אובייקט LiveData במהלך ביצוע שאילתות מול מסד הנתונים. בקוד שלך מופיע LiveData הזה כדי לאחזר את פעילות הכושר האחרונה.

הפעלת TTS

אפשר להוסיף מחרוזת TTS כדי ש-Assistant תכריז עליה כשהווידג'ט מוצג. מומלץ לכלול את האפשרות הזו כדי לספק הקשר קולי לווידג'טים. הפונקציונליות הזו זמינה בספריית התוספים לווידג'טים של פעולות באפליקציה, שמאפשרת להגדיר את ההקדמה לטקסט ול-TTS שנלווה לווידג'טים ב-Assistant.

כדאי להציג את ההקדמה ל-TTS בפונקציה 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)
          }
    }
    
    

הקוד הקודם מפנה לשני משאבי מחרוזות: אחד לדיבור והשני לטקסט. כדאי לעיין בחלק המלצה לסגנון המרת טקסט לדיבור (TTS) בסרטון הווידג'טים שלנו כדי לקבל המלצות בנושא TTS. הדוגמה מתייחסת גם אל setTts, פונקציה חדשה שמספקת את פרטי ה-TTS למופע הווידג'ט.

  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)
    }
    

לבסוף, משלימים את הלוגיקה של TTS על ידי הגדרת פרטי TTS כשמסד הנתונים של התרגילים מחזיר נתונים ריקים עבור סוג אימון מבוקש.

  1. מעדכנים את הפונקציה setNoActivityDataWidget() ב-StatsWidget.kt עם הקוד הבא:
    // 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. בדיקת הפעולה באפליקציה

במהלך הפיתוח, משתמשים בפלאגין של Google Assistant כדי לראות תצוגה מקדימה של 'פעולות באפליקציה של Assistant' במכשיר בדיקה. אפשר לשנות את הפרמטרים של Intent של פעולה באפליקציה באמצעות הכלי כדי לבדוק איך הפעולה מטפלת בדרכים השונות שבהן משתמש עשוי לבקש מ-Assistant להפעיל אותה.

יצירת קטע מקדים

כדי לבדוק את הפעולה באפליקציה באמצעות הפלאגין:

  1. עוברים אל כלים > Google Assistant > כלי הבדיקה של פעולות באפליקציה. יכול להיות שתתבקשו להיכנס ל-Android Studio באמצעות חשבון Google שלכם.
  2. לוחצים על יצירת תצוגה מקדימה. אם מופיעה בקשה, קוראים את המדיניות ואת התנאים וההגבלות של 'פעולות באפליקציה' ומאשרים אותם.

בדקו סוג של פעילות גופנית שאתם מצפים לה

להחזיר ווידג'ט שמציג מידע על ההפעלה האחרונה שהושלמה באפליקציה לפי השלבים הבאים בכלי הבדיקה:

  1. בשלב הראשון, שבו הכלי יבקש מכם לבחור ולהגדיר את ה-BII, צריך לבחור באפשרות actions.intent.GET_EXERCISE_OBSERVATION.
  2. בתיבה exerciseObservation, מעדכנים את שם ברירת המחדל של התרגיל מ-climbing ל-run.
  3. לוחצים על Run App Action (הפעלת פעולה באפליקציה).

מסך שמוצג בו ווידג&#39;ט שהוחזר באמצעות הפלאגין של Google Assistant.

בדקו תרגיל מסוג בלתי צפוי

כדי לבדוק סוג תרגיל לא צפוי בכלי הבדיקה:

  1. בתיבה exerciseObservation, מעדכנים את הערך של name מ-Run ל-Climbing.
  2. לוחצים על Run App Action (הפעלת פעולה באפליקציה).

Assistant צריכה להחזיר ווידג'ט עם ההודעה 'לא נמצאה פעילות' מידע.

מסך שמוצג בו ווידג&#39;ט שלא מוחזר מידע על פעילות גופנית באמצעות הפלאגין של Google Assistant.

בדיקת Intent חלופי

השאילתות שמפעילות את הכוונה החלופית אמורות להחזיר ווידג'ט שמציג מידע על הפעילות האחרונה שתועדה, מכל סוג של תרגיל.

כדי לבדוק את ה-Intent החלופי:

  1. בתיבה exerciseObservation, מוחקים את האובייקט aboutExercise.
  2. לוחצים על Run App Action (הפעלת פעולה באפליקציה).

Assistant אמורה להחזיר ווידג'ט שמציג מידע על התרגיל האחרון שהושלמה.

מסך שבו מוצג ווידג&#39;ט שבו מוצגת הפעילות האחרונה שהוקלטה באמצעות הפלאגין של Google Assistant.

7. השלבים הבאים

מעולה!

עכשיו יש לך את הכוח לספק באמצעות ווידג'ט של Android עם Assistant,

הנושאים שטיפלנו בהם

ב-Codelab הזה למדת איך:

  • הוספת ווידג'ט של אפליקציה ל-BII.
  • שינוי ווידג'ט כדי לגשת לפרמטרים מ-Android Extras.

המאמרים הבאים

מכאן אפשר לנסות לבצע שיפורים נוספים באפליקציית הכושר. כדי להתייחס לפרויקט הסופי, תוכלו לעיין במאגר הראשי ב-GitHub.

בהמשך מופיעות כמה הצעות ללמידה נוספת בנוגע להרחבת האפליקציה הזו באמצעות 'פעולות באפליקציה':

כדי להמשיך בתהליך שלך ב-Actions on Google, כדאי לעיין במקורות המידע הבאים:

אפשר לעקוב אחרינו ב- @ActionsOnGoogle בטוויטר כדי להתעדכן בהכרזות האחרונות שלנו, ולשלוח ציוץ אל #appactions כדי לשתף את מה שפיתחתם!

סקר משוב

לסיום, מלאו את הסקר הזה כדי לשלוח משוב על החוויה שלכם ב-Codelab הזה.