Mengintegrasikan widget Android dengan Asisten Google

1. Ringkasan

Pada codelab Action Aplikasi pertama, Anda telah mempelajari cara memperluas Asisten Google ke sampel aplikasi kebugaran dengan menerapkan intent bawaan (BII) dari kategori BII Kesehatan dan Kebugaran.

Action Aplikasi memungkinkan pengguna meluncurkan langsung ke fitur aplikasi tertentu dari Asisten dengan menanyakan hal seperti, "Ok Google, mulai berlari di ExampleApp". Selain meluncurkan aplikasi, Asisten dapat menampilkan widget Android interaktif kepada pengguna untuk memenuhi permintaan BII yang memenuhi syarat.

Layar yang menunjukkan Asisten menampilkan widget sebagai respons terhadap\nkueri pengguna yang memicu kemampuan BII GET_EXERCISE_OBSERVATION aplikasi.

Yang akan Anda buat

Dalam codelab ini, Anda akan mempelajari cara menampilkan widget Android untuk memenuhi permintaan pengguna Asisten. Anda juga akan mempelajari:

  • Parameter BII pengguna untuk mempersonalisasi widget.
  • Memberikan pengantar text-to-speech (TTS) di Asisten untuk widget Anda.
  • Menggunakan Referensi intent bawaan untuk menentukan BII yang mendukung fulfillment widget.

Prasyarat

Sebelum melanjutkan, pastikan lingkungan pengembangan Anda siap untuk mengembangkan Action Aplikasi. Layar ini harus memiliki:

  • Terminal untuk menjalankan perintah shell, dengan git terinstal.
  • Rilis stabil terbaru dari Android Studio.
  • Perangkat Android fisik atau virtual dengan akses Internet.
  • Akun Google yang login ke Android Studio, aplikasi Google, dan aplikasi Asisten Google.

Jika Anda menggunakan perangkat fisik, hubungkan ke mesin pengembangan lokal Anda.

2. Memahami cara kerjanya

Asisten Google menggunakan natural language understanding (NLU) untuk membaca permintaan pengguna dan mencocokkannya dengan intent bawaan Asisten (BII). Asisten kemudian memetakan intent ke kemampuan (yang mengimplementasikan BII), yang Anda daftarkan untuk intent tersebut di aplikasi Anda. Terakhir, Asisten memenuhi permintaan pengguna dengan menampilkan widget Android yang dihasilkan aplikasi Anda menggunakan detail yang ditemukan dalam kemampuan.

Dalam codelab ini, Anda menentukan kemampuan yang mendaftarkan dukungan untuk BII GET_EXERCISE_OBSERVATION. Dalam kemampuan ini, Anda menginstruksikan Asisten untuk membuat intent Android ke class widget FitActions untuk memenuhi permintaan BII ini. Anda memperbarui class ini untuk membuat widget yang dipersonalisasi bagi Asisten untuk ditampilkan kepada pengguna, dan pengantar TTS untuk Asisten.

Diagram berikut menunjukkan alur ini:

Diagram alur yang menunjukkan fulfillment widget Asisten.

Widget FitActions

Aplikasi contoh FitActions berisi widget informasi olahraga yang dapat ditambahkan pengguna ke layar utama. Widget ini sangat cocok untuk memenuhi kueri pengguna yang memicu BII GET_EXERCISE_OBSERVATION.

Cara kerja widget

Saat pengguna menambahkan widget ke layar utama, widget tersebut akan melakukan ping ke Penerima Siaran perangkat. Layanan ini mengambil informasi tentang widget dari definisi penerima widget dalam resource AndroidManifest.xml aplikasi. Informasi tersebut lalu digunakan untuk menghasilkan objek RemoteViews yang mewakili widget.

Aplikasi contoh menentukan widgets.StatsWidgetProvider penerima, yang sesuai dengan class 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>

Class StatsWidgetProvider, StatsWidgetProvider.kt, mengelola alur pembuatan objek StatsWidget. Cakupan tugasnya adalah:

  • Membuat instance widget dan mengisinya dengan data olahraga dari database aplikasi.
  • Memformat data olahraga agar mudah dibaca, dengan formatDataAndSetWidget().
  • Memberikan nilai default jika data olahraga tidak tersedia, menggunakan setNoActivityDataWidget().

Menambahkan dukungan Asisten

Dalam codelab ini, Anda akan memperbarui aplikasi contoh untuk menangani fungsi Action Aplikasi. Perubahan ini mencakup:

  1. Mengonfigurasi kemampuan BII GET_EXERCISE_OBSERVATION untuk menampilkan instance objek StatsWidget.
  2. Memperbarui class StatsWidget untuk menggunakan fitur Action Aplikasi seperti:
    • Dengan menggunakan parameter BII, pengguna dapat melihat statistik olahraga tertentu dengan menanyakan hal seperti, "Ok Google, tampilkan statistik lari saya di ExampleApp".
    • Menyediakan string pengantar TTS.
    • Mengelola kasus khusus, seperti saat kueri pengguna tidak menyertakan parameter jenis olahraga.

3. Menyiapkan lingkungan pengembangan

Mendownload file dasar Anda

Jalankan perintah ini untuk meng-clone repositori GitHub aplikasi contoh:

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

Setelah meng-clone repositori, ikuti langkah-langkah berikut untuk membukanya di Android Studio:

  1. Dalam dialog Welcome to Android Studio, klik Import project.
  2. Cari dan pilih folder tempat Anda meng-clone repositori.

Untuk melihat versi aplikasi yang mewakili codelab yang sudah selesai, clone repo aplikasi contoh menggunakan tanda --branch master.

Mengubah ID aplikasi Android

Nanti dalam codelab ini, Anda menggunakan plugin Asisten Google untuk menguji action di perangkat fisik atau virtual. Untuk menjalankannya, alat uji mengharuskan aplikasi Anda diupload ke project di Konsol Google Play terlebih dulu. Untuk menghindari error "Nama paket duplikat" saat mengupload aplikasi ke Konsol Play, ubah applicationId aplikasi contoh menjadi sesuatu yang unik (Google Play tidak akan mengizinkan dua aplikasi dengan applicationId yang sama diupload).

  1. Di app/build.gradle, perbarui nilai applicationId PUT_YOUR_APPLICATION_ID_HERE ke ID unik, misalnya com.codelabs.myname. Untuk mempelajari ID aplikasi Android lebih lanjut, lihat Menyetel ID aplikasi.
  2. Buka app/src/res/xml/shortcuts.xml dan perbarui dua (2) instance android:targetPackage ke applicationId unik Anda.

Mengupload ke Konsol Play

Mengupload aplikasi ke project di Konsol Google Play adalah prasyarat untuk menggunakan plugin Asisten Google di Android Studio. Buat aplikasi Anda di Android Studio dan upload ke Konsol Play sebagai draf rilis internal.

Untuk membuat aplikasi di Android Studio:

  1. Buka Build > Generate Signed Bundle / APK.
  2. Pilih Android App Bundle, lalu klik Next.
  3. Masukkan detail untuk menandatangani aplikasi Anda lalu klik Next. Lacak jalur pembuatan paket Anda di bagian Destination Folder.
  4. Pilih varian build prodRelease atau release, lalu klik Finish.

Di Konsol Play, upload app bundle yang baru saja Anda buat sebagai aplikasi baru:

  1. Di halaman Semua aplikasi, klik Buat aplikasi.
  2. Di kotak Nama Aplikasi, masukkan nama aplikasi apa pun, seperti "Codelab widget".
  3. Untuk Aplikasi atau game, pilih Aplikasi.
  4. Untuk Gratis atau berbayar, pilih Gratis.
  5. Terima setiap Deklarasi yang tercantum.
  6. Klik Buat Aplikasi.
  7. Dari menu samping Konsol Play, buka Pengujian dan temukan halaman Pengujian internal.
  8. Dari halaman ini, klik Buat rilis baru.
  9. Jika diminta, klik Lanjutkan untuk menyetujui penandatanganan aplikasi oleh Google Play.
  10. Di panel App bundle dan APK, upload file AAB yang dibuat di langkah sebelumnya. File ini mungkin berada dalam direktori app/prod/release atau app/release project Anda). Klik Simpan.

Menginstal plugin uji

Plugin Asisten Google memungkinkan Anda menguji Action Aplikasi di perangkat pengujian. Cara kerjanya adalah dengan mengirimkan informasi ke Asisten melalui aplikasi Google di perangkat Android Anda. Jika Anda belum memiliki plugin tersebut, instal dengan langkah-langkah berikut:

  1. Buka File > Setelan (Android Studio > Preferensi di MacOS).
  2. Di bagian Plugin, buka Marketplace dan telusuri "Asisten Google". Anda juga dapat mendownload dan menginstal alat pengujian secara manual.
  3. Instal alat tersebut lalu mulai ulang Android Studio.

Menguji aplikasi di perangkat Anda

Sebelum membuat lebih banyak perubahan pada aplikasi, sebaiknya Anda mengetahui apa saja yang dapat dilakukan aplikasi contoh.

Jalankan aplikasi di perangkat pengujian Anda:

  1. Di Android Studio, pilih perangkat fisik atau virtual Anda lalu pilih Run > Run app atau klik RunJalankan ikon aplikasi di Android Studio. di toolbar.
  2. Tekan lama tombol Layar utama untuk menyiapkan Asisten dan memastikannya berfungsi. Anda harus login ke Asisten di perangkat jika belum melakukannya.

Untuk informasi selengkapnya tentang perangkat virtual Android, lihat Membuat dan mengelola perangkat virtual.

Jelajahi aplikasi secara singkat untuk melihat apa yang bisa dilakukannya. Aplikasi mengisi otomatis 10 aktivitas olahraga dan menampilkan informasi ini pada tampilan pertama.

Coba widget yang ada

  1. Ketuk tombol Beranda untuk membuka layar utama perangkat pengujian.
  2. Tekan lama ruang kosong di layar utama, lalu pilih Widget.
  3. Scroll ke bawah daftar widget ke FitActions.
  4. Tekan lama ikon FitActions dan letakkan widgetnya di layar utama.

Screenshot menampilkan widget FitActions di layar utama perangkat.

4. Menambahkan Action Aplikasi

Pada langkah ini, Anda menambahkan kemampuan BII GET_EXERCISE_OBSERVATION. Untuk melakukannya, tambahkan elemen capability baru di shortcuts.xml. Kemampuan ini menentukan bagaimana kemampuan dipicu, bagaimana parameter BII digunakan, dan intent Android mana yang akan dipanggil untuk memenuhi permintaan.

  1. Tambahkan elemen capability baru ke resource shortcuts.xml project contoh dengan konfigurasi ini:
    <!-- 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>
    
    Ganti nilai android:targetPackage, PUT_YOUR_APPLICATION_ID_HERE, dengan applicationId unik Anda.

Kemampuan ini memetakan BII GET_EXERCISE_OBSERVATION ke intent app-widget sehingga saat BII dipicu, widget akan membuat instance dan menampilkannya kepada pengguna.

Sebelum memicu widget, Asisten mengekstrak parameter BII yang didukung dari kueri pengguna. Codelab ini memerlukan parameter BII exerciseObservation.aboutExercise.name, yang mewakili jenis olahraga yang diminta pengguna. Aplikasi ini mendukung tiga jenis olahraga: "berlari", "berjalan", dan "bersepeda". Anda menyediakan inventaris inline untuk memberi tahu Asisten tentang nilai yang didukung ini.

  1. Tentukan elemen inventaris ini dengan menambahkan konfigurasi ini, di atas kemampuan GET_EXERCISE_OBSERVATION, ke 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>
    

Menambahkan intent fallback

Intent fallback menangani situasi saat kueri pengguna tidak dapat dipenuhi karena kueri tidak memiliki parameter yang diperlukan oleh kemampuan. Kemampuan GET_EXERCISE_OBSERVATION memerlukan parameter exerciseObservation.aboutExercise.name, yang ditentukan oleh atribut android:required="true". Untuk situasi ini, Asisten mengharuskan Anda menentukan intent fallback agar permintaan berhasil, meskipun tidak ada parameter yang disediakan dalam kueri.

  1. Di shortcuts.xml, tambahkan intent fallback ke kemampuan GET_EXERCISE_OBSERVATION menggunakan konfigurasi ini:
    <!-- 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>
    

Dalam contoh konfigurasi ini, fulfillment penggantian adalah intent Android tanpa parameter dalam data Extra-nya.

5. Mengaktifkan widget untuk Asisten

Dengan kemampuan GET_EXERCISE_OBSERVATION yang ditetapkan, update class widget untuk mendukung pemanggilan suara Action Aplikasi.

Menambahkan library Ekstensi Widget

Library Ekstensi Widget Action Aplikasi meningkatkan (kualitas) widget Anda untuk pengalaman Asisten Voice-forward. Secara khusus, ini memungkinkan Anda memberikan pengantar TTS kustom untuk widget.

  1. Tambahkan dependensi library Ekstensi Widget ke resource contoh aplikasi /app/build.gradle:
    // app/build.gradle
    
    dependencies {
      //...
      implementation "com.google.assistant.appactions:widgets:0.0.1"
    }
    
    Klik Sync Now di kotak peringatan yang muncul di Android Studio. Menyinkronkan setelah setiap perubahan build.gradle akan membantu Anda menghindari error saat membuat aplikasi.

Menambahkan layanan widget

Layanan adalah komponen aplikasi yang dapat menjalankan operasi yang berjalan lama di latar belakang. Aplikasi Anda harus menyediakan layanan untuk memproses permintaan widget.

  1. Tambahkan layanan ke resource AndroidManifest.xml aplikasi contoh dengan konfigurasi ini:
    <!-- 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>
    
    

Selama kueri suara yang memicu fulfillment widget, Asisten menggunakan layanan ini untuk mengirim permintaan ke aplikasi. Layanan menerima permintaan beserta data BII. Layanan menggunakan data ini untuk membuat objek widget RemoteView untuk dirender dalam Asisten.

Mengupdate class widget

Aplikasi Anda kini dikonfigurasi untuk mengarahkan permintaan kemampuan GET_EXERCISE_OBSERVATION ke class widget. Selanjutnya, perbarui class StatsWidget.kt untuk membuat instance widget yang dipersonalisasi ke permintaan pengguna, menggunakan nilai parameter BII.

  1. Buka class StatsWidget.kt dan impor library Ekstensi Widget Action Aplikasi:
    // StatsWidget.kt
    
    // ... Other import statements
    import com.google.assistant.appactions.widgets.AppActionsWidgetExtension
    
    
  2. Tambahkan variabel pribadi berikut, yang Anda gunakan saat menentukan informasi yang harus mengisi widget:
    // StatsWidget.kt
    
    private val hasBii: Boolean
    private val isFallbackIntent: Boolean
    private val aboutExerciseName: String
    private val exerciseType: FitActivity.Type
    
  3. Tambahkan fungsi init untuk mengizinkan class menggunakan data opsi widget yang diteruskan dari Asisten:
    // 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)
    }
    
    

Mari kita pelajari bagaimana update ini memungkinkan class StatsWidget.kt untuk merespons intent Android yang dihasilkan oleh kemampuan GET_EXERCISE_OBSERVATION:

  • optionsBundle = Bundle
    • Bundle adalah objek yang dimaksudkan untuk digunakan di seluruh batas proses, antar-aktivitas dengan intent, dan untuk menyimpan status sementara di seluruh perubahan konfigurasi. Asisten menggunakan objek Bundle untuk meneruskan data konfigurasi ke widget.
  • bii = actions.intent.GET_EXERCISE_OBSERVATION
    • Nama BII tersedia dari Bundle menggunakan AppActionsWidgetExtension.
  • hasBii = true
    • Memeriksa apakah ada BII.
  • params = Bundle[{aboutExerciseName=running}]
    • Bundle khusus, yang dihasilkan oleh Action Aplikasi, ditempatkan di dalam opsi widget Bundle. Daftar tersebut berisi key-value pair BII. Dalam hal ini, nilai running diekstrak dari contoh kueri, "Ok Google, tampilkan statistik berjalan di ExampleApp".
  • isFallbackIntent = false
    • Memeriksa keberadaan parameter BII yang diperlukan dalam intent Extras.
  • aboutExerciseName = running
    • Mendapatkan nilai Extras intent untuk aboutExerciseName.
  • exerciseType = RUNNING
    • Menggunakan aboutExerciseName untuk mencari objek jenis database yang sesuai.

Setelah class StatsWidget dapat memproses data intent Android Action Aplikasi yang masuk, perbarui logika alur pembuatan widget untuk memeriksa apakah widget tersebut dipicu oleh Action Aplikasi.

  1. Di StatsWidget.kt, ganti fungsi updateAppWidget() dengan kode ini:
    // 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()
    }
    
    

Kode sebelumnya merujuk ke fungsi baru, observeAndUpdateRequestedExercise. Fungsi ini menghasilkan data widget menggunakan data parameter exerciseType yang diteruskan oleh intent Android Action Aplikasi.

  1. Tambahkan fungsi observeAndUpdateRequestedExercise dengan kode ini:
    // 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()
           }
       }
    }
    
    

Dalam kode sebelumnya, gunakan class repositori yang ada di aplikasi untuk mengambil data kebugaran dari database lokal aplikasi. Class ini menyediakan API yang menyederhanakan akses ke database. Repositori bekerja dengan mengekspos objek LiveData saat melakukan kueri terhadap database. Dalam kode Anda, Anda mengamati LiveData ini untuk mengambil aktivitas kebugaran terbaru.

Mengaktifkan TTS

Anda dapat memberikan string TTS untuk Asisten yang akan diumumkan saat menampilkan widget. Sebaiknya sertakan ini untuk memberikan konteks yang dapat didengar dengan widget Anda. Fungsi ini disediakan oleh library Ekstensi Widget Action Aplikasi, yang memungkinkan Anda menyetel pengantar teks dan TTS yang menyertai widget di Asisten.

Tempat yang baik untuk memberikan pengantar TTS adalah dalam fungsi formatDataAndSetWidget, yang memformat data aktivitas yang ditampilkan dari database aplikasi.

  1. Di StatsWidget.kt, tambahkan kode ini ke fungsi 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)
          }
    }
    
    

Kode sebelumnya merujuk pada dua resource string: satu untuk ucapan dan yang lain untuk teks. Lihat bagian Rekomendasi gaya Text-to-Speech dari video widget kami untuk rekomendasi TTS. Contoh tersebut juga merujuk ke setTts, fungsi baru yang memberikan informasi TTS ke instance widget.

  1. Tambahkan fungsi setTts baru ini ke StatsWidget.kt menggunakan kode ini:
    // 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)
    }
    

Terakhir, selesaikan logika TTS dengan menyetel informasi TTS saat database olahraga menampilkan data kosong untuk jenis olahraga yang diminta.

  1. Perbarui fungsi setNoActivityDataWidget() di StatsWidget.kt dengan kode ini:
    // 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. Menguji Action Aplikasi

Selama pengembangan, gunakan plugin Asisten Google untuk melihat pratinjau Action Aplikasi Asisten di perangkat pengujian. Anda dapat menyesuaikan parameter intent untuk Action Aplikasi dengan alat untuk menguji bagaimana action Anda menangani berbagai cara yang mungkin digunakan pengguna untuk meminta Asisten menjalankannya.

Membuat pratinjau

Untuk menguji Action Aplikasi Anda dengan plugin:

  1. Buka Alat > Asisten Google > Alat Uji Action Aplikasi. Anda mungkin diminta untuk login ke Android Studio. Jika demikian, gunakan akun yang sama yang digunakan sebelumnya dengan Konsol Google Play.
  2. Klik Buat Pratinjau untuk membuat pratinjau.

Menguji jenis olahraga yang diharapkan

Tampilkan widget yang menampilkan informasi tentang proses terakhir yang dijalankan di aplikasi dengan mengikuti langkah-langkah berikut di alat pengujian:

  1. Pada langkah pertama, alat meminta Anda untuk memilih dan mengonfigurasi BII, pilih actions.intent.GET_EXERCISE_OBSERVATION.
  2. Di kotak exerciseObservation, update nama Olahraga default dari climbing menjadi run.
  3. Klik Jalankan Action Aplikasi.

Layar yang menampilkan widget yang ditampilkan menggunakan plugin Asisten Google.

Menguji jenis olahraga yang tidak terduga

Untuk menguji jenis olahraga yang tidak terduga dalam alat pengujian:

  1. Di kotak exerciseObservation, update nilai name dari Run menjadi Climbing.
  2. Klik Jalankan Action Aplikasi.

Asisten akan menampilkan widget yang menampilkan informasi "Aktivitas tidak ditemukan".

Layar menampilkan widget tanpa informasi olahraga yang ditampilkan menggunakan plugin Asisten Google.

Menguji intent fallback

Kueri yang memicu intent fallback akan menampilkan widget yang menampilkan informasi tentang aktivitas yang terakhir dicatat dari jenis olahraga apa pun.

Untuk menguji intent fallback:

  1. Di kotak exerciseObservation, hapus objek aboutExercise.
  2. Klik Jalankan Action Aplikasi.

Asisten akan menampilkan widget yang menampilkan informasi untuk olahraga terakhir yang telah diselesaikan.

Layar yang menampilkan widget dengan aktivitas yang terakhir direkam, menggunakan plugin Asisten Google.

7. Langkah berikutnya

Selamat!

Kini Anda memiliki kemampuan untuk memenuhi kueri pengguna menggunakan Widget Android dengan Asisten.

Yang telah kita bahas

Dalam codelab ini, Anda telah mempelajari cara:

  • Menambahkan widget aplikasi ke BII.
  • Mengubah widget untuk mengakses parameter dari Android Extra.

Langkah berikutnya

Dari sini, Anda dapat mencoba meningkatkan aplikasi kebugaran lebih lanjut. Untuk mereferensikan project yang sudah selesai, lihat repo utama di GitHub.

Berikut beberapa saran untuk mempelajari lebih lanjut cara memperluas aplikasi ini dengan Action Aplikasi:

  • Kunjungi referensi intent bawaan Action Aplikasi untuk menemukan lebih banyak cara untuk memperluas aplikasi Anda ke Asisten.

Untuk melanjutkan perjalanan Actions on Google Anda, pelajari referensi berikut:

Ikuti kami di Twitter @ActionsOnGoogle untuk mengikuti terus pengumuman terbaru kami, dan kirim tweet ke #appactions untuk membagikan yang telah Anda buat.

Survei masukan

Terakhir, isi survei ini guna memberikan masukan tentang pengalaman Anda dengan codelab ini.