Android widget'larını Google Asistan'la entegre etme

1. Genel Bakış

İlk Uygulama İşlemleri codelab'inde, Health and Fitness BII kategorisindeki yerleşik amaçları (BII) uygulayarak Google Asistan'ı örnek bir fitness uygulamasına nasıl genişleteceğinizi öğrendiniz.

Uygulama İşlemleri, kullanıcıların "Ok Google, ExampleApp'te çalıştırma başlat" gibi sorular sorarak doğrudan Asistan'dan belirli uygulama özelliklerini başlatmalarına olanak tanır. Asistan, uygulamaları başlatmanın yanı sıra uygun BBI isteklerini yerine getirmek için kullanıcıya etkileşimli bir Android widget'ı gösterebilir.

Asistan'ın, bir uygulamanın GET_EXERCISE_OBSERVATION BII özelliğini tetikleyen\nkullanıcı sorgusuna yanıt olarak widget döndürdüğünü gösteren ekran.

Neler oluşturacaksınız?

Bu codelab'de, Asistan'ın kullanıcı isteklerini yerine getirmek için Android widget'larını nasıl döndüreceğinizi öğreneceksiniz. Ayrıca şunları öğreneceksiniz:

  • Widget'ları kişiselleştirmek için kullanılan kullanıcı BII parametreleri.
  • Widget'larınız için Asistan'da metin okuma (TTS) tanıtımları sağlayın.
  • Hangi BII'lerin desteklenmesi için widget'ı sağlanması gerektiğini belirlemek için Yerleşik amaç referansı kullanın.

Ön koşullar

Devam etmeden önce, geliştirme ortamınızın Uygulama İşlemleri geliştirmek için hazır olduğundan emin olun. Şunları içermelidir:

  • Git'in yüklü olduğu, kabuk komutlarının çalıştırılacağı bir terminal.
  • Android Studio'nun en son kararlı sürümü.
  • İnternet erişimi olan fiziksel veya sanal bir Android cihaz.
  • Android Studio, Google uygulaması ve Google Asistan uygulamasında oturum açmış bir Google Hesabı.

Fiziksel bir cihaz kullanıyorsanız bu cihazı yerel geliştirme makinenize bağlayın.

2. İşleyiş şeklini anlayın

Google Asistan, kullanıcıların isteğini okumak ve Asistan'ın yerleşik amacıyla (BII) eşleştirmek için doğal dil anlama (NLU) özelliğini kullanır. Asistan daha sonra amacı, uygulamanızda bu amaç için kaydettiğiniz özellikle (BII'yi uygulayan) eşleştirir. Son olarak Asistan, uygulamanızın özellikteki ayrıntılarla oluşturduğu Android widget'ını göstererek kullanıcının isteğini yerine getirir.

Bu codelab'de, GET_EXERCISE_OBSERVATION BII için destek kaydeden bir özellik tanımlayacaksınız. Bu özellikte Asistan'a, bu BII ile ilgili istekleri yerine getirmek amacıyla FitActions widget sınıfına bir Android intent oluşturması için talimat verirsiniz. Asistan'ın kullanıcıya göstereceği kişiselleştirilmiş bir widget ve Asistan'ın duyuracağı bir TTS tanıtımı oluşturmak için bu sınıfı güncellersiniz.

Aşağıdaki şemada bu akış gösterilmektedir:

Asistan widget'ının nasıl karşılandığını gösteren akış şeması.

FitActions widget'ı

FitActions örnek uygulaması, kullanıcıların ana ekranlarına ekleyebileceği bir antrenman bilgileri widget'ı içerir. Bu widget, GET_EXERCISE_OBSERVATION BII'yi tetikleyen kullanıcı sorgularını yerine getirmek için mükemmel bir adaydır.

Widget'ın işleyiş şekli

Bir kullanıcı ana ekrana bir widget eklediğinde, widget, cihaza Yayın Alıcısı'na ping gönderir. Bu hizmet, uygulamanın AndroidManifest.xml kaynağındaki widget'ın alıcı tanımından widget hakkında bilgi alır. Bu bilgileri kullanarak widget'ı temsil eden bir RemoteViews nesnesi oluşturur.

Örnek uygulama, StatsWidgetProvider sınıfına karşılık gelen widgets.StatsWidgetProvider alıcısını tanımlar:

<!-- 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 sınıfı (StatsWidgetProvider.kt), StatsWidget nesne oluşturma akışını yönetir. Şirket şu sorumlulukları yerine getirir:

  • Widget örnekleri oluşturma ve bunları uygulama veritabanındaki egzersiz verileriyle doldurma.
  • Antrenman verileri okunabilirlik için formatDataAndSetWidget() ile biçimlendiriliyor.
  • Antrenman verileri kullanılamıyorsa setNoActivityDataWidget() kullanılarak varsayılan değerler sağlanıyor.

Asistan desteği ekleme

Bu codelab'de, örnek uygulamayı Uygulama İşlemleri işlevini işleyecek şekilde güncelleyeceksiniz. Bu değişiklikler şunlardır:

  1. GET_EXERCISE_OBSERVATION BII özelliğini, StatsWidget nesnesinin bir örneğini döndürecek şekilde yapılandırma.
  2. StatsWidget sınıfı, aşağıdaki gibi uygulama işlemleri özelliklerini kullanacak şekilde güncelleniyor:
    • BII parametrelerinden yararlanarak kullanıcılara "Ok Google, exampleApp'te koşu istatistiklerimi göster" gibi sorular sorarak belirli antrenman istatistiklerini görüntüleyebilirler.
    • TTS giriş dizeleri sağlama.
    • Kullanıcı sorgusunun antrenman türü parametresi içermediği durumlar gibi özel durumları yönetme.

3. Geliştirme ortamınızı hazırlama

Temel dosyalarınızı indirin

Örnek uygulamanın GitHub deposunu klonlamak için şu komutu çalıştırın:

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

Kod deposunu klonladıktan sonra, Android Studio'da açmak için şu adımları uygulayın:

  1. Android Studio'ya hoş geldiniz iletişim kutusunda Projeyi içe aktar'ı tıklayın.
  2. Depoyu klonladığınız klasörü bulup seçin.

Tamamlanmış codelab'i temsil eden bir uygulama sürümünü görmek için --branch master işaretini kullanarak örnek uygulama deposunu klonlayın.

Android uygulama kimliğini güncelleme

Uygulamanın uygulama kimliğini güncellemek, test cihazınızda uygulamayı benzersiz bir şekilde tanımlar ve "Yinelenen paket adı"nı önler hatası oluşur. Uygulama kimliğini güncellemek için app/build.gradle dosyasını açın:

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

Değiştir: "MYUNIQUENAME" applicationId alanına bunu benzersiz bir şekilde ekleyebilirsiniz.

Test eklentisini yükleyin

Google Asistan eklentisi, Uygulama İşlemlerinizi bir test cihazında test etmenize olanak tanır. Bu uygulama, Android cihazınızdaki Google uygulaması üzerinden Asistan'a bilgi göndererek çalışır. Eklentiye henüz sahip değilseniz aşağıdaki adımları uygulayarak yükleyin:

  1. Dosya > Ayarlar (MacOS'te Android Studio > Tercihler).
  2. Eklentiler bölümünde Marketplace'e gidin ve "Google Asistan"ı arayın. Test aracını manuel olarak da indirip yükleyebilirsiniz.
  3. Aracı yükleyin ve Android Studio'yu yeniden başlatın.

Uygulamayı cihazınızda test etme

Uygulamada daha fazla değişiklik yapmadan önce, örnek uygulamanın neler yapabileceği hakkında fikir edinmeniz yardımcı olacaktır.

Uygulamayı test cihazınızda çalıştırın:

  1. Android Studio'da fiziksel veya sanal cihazınızı seçip Çalıştır > Uygulamayı çalıştırın veya araç çubuğunda ÇalıştırAndroid Studio&#39;da uygulama simgesini çalıştırma. tıklayın.
  2. Asistan'ı kurmak ve çalıştığını doğrulamak için Ana Sayfa düğmesine uzun basın. Henüz açmadıysanız cihazınızda Asistan'da oturum açmanız gerekir.

Android sanal cihazlar hakkında daha fazla bilgi için Sanal cihazları oluşturma ve yönetme başlıklı makaleyi inceleyin.

Özelliklerini görmek için uygulamayı kısaca keşfedin. Uygulama 10 egzersiz aktivitesini önceden doldurur ve bu bilgileri ilk görünümde gösterir.

Mevcut widget'ı deneyin

  1. Ana sayfa düğmesine dokunarak test cihazınızın ana ekranına gidin.
  2. Ana ekrandaki boş bir alana uzun basın ve Widget'lar seçeneğini belirleyin.
  3. Widget listesinde aşağı kaydırarak FitActions'a gidin.
  4. FitActions simgesine uzun basın ve widget'ını ana ekrana yerleştirin.

Cihazın ana ekranında FitActions widget&#39;ını gösteren ekran görüntüsü.

4. Uygulama İşlemini ekleme

Bu adımda GET_EXERCISE_OBSERVATION BII özelliğini eklersiniz. Bunu, shortcuts.xml uygulamasına yeni bir capability öğesi ekleyerek yaparsınız. Bu özellik; özelliğin nasıl tetiklendiğini, BII parametrelerinin nasıl kullanıldığını ve isteği yerine getirmek için hangi Android amaçlarının çağrılacağını belirtir.

  1. shortcuts.xml kimlikli örnek proje kaynağına şu yapılandırmayla yeni bir capability öğesi ekleyin:
    <!-- 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 değerini benzersiz applicationId değerinizle değiştirin.

Bu özellik, GET_EXERCISE_OBSERVATION BII'yi app-widget amacı ile eşler. Böylece BII tetiklendiğinde, widget örneklenir ve kullanıcıya gösterilir.

Asistan, widget'ı tetiklemeden önce kullanıcı sorgusundan desteklenen BII parametrelerini ayıklar. Bu codelab'de, kullanıcının istediği egzersiz türünü temsil eden exerciseObservation.aboutExercise.name BII parametresi gerekir. Uygulama üç egzersiz türünü destekler: "koşu", "yürüyüş" ve "bisiklet". Asistan'ı desteklenen bu değerler hakkında bilgilendirmek için bir satır içi envanter sağlarsınız.

  1. Bu envanter öğelerini tanımlamak için GET_EXERCISE_OBSERVATION özelliğinin üzerindeki bu yapılandırmayı shortcuts.xml öğesine ekleyin:
    <!-- 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>
    

Yedek intent ekle

Yedek amaçları, sorguda özelliğin gerektirdiği parametrelerin eksik olması nedeniyle kullanıcı sorgusunun yerine getirilemediği durumları ele alır. GET_EXERCISE_OBSERVATION özelliği, android:required="true" özelliğiyle belirtilen exerciseObservation.aboutExercise.name parametresini gerektirir. Bu durumlarda Asistan, sorguda hiçbir parametre sağlanmamış olsa bile isteğin başarılı olabilmesi için bir yedek intent tanımlamanızı gerektirir.

  1. shortcuts.xml ürününde, şu yapılandırmayı kullanarak GET_EXERCISE_OBSERVATION özelliğine bir yedek intent ekleyin:
    <!-- 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>
    

Bu örnek yapılandırmada yedek karşılama, Extra verilerinde parametre olmayan bir Android niyetidir.

5. Asistan için widget'ı etkinleştirin

GET_EXERCISE_OBSERVATION özelliği kullanıma sunulduktan sonra widget sınıfını, Uygulama İşlemleri sesli çağrısını destekleyecek şekilde güncelleyin.

Widget'lar Uzantı kitaplığını ekleme

Uygulama İşlemleri Widget'lar Uzantı kitaplığı, widget'larınızı sesli Asistan deneyimleri için geliştirir. Özellikle, widget'larınız için özel bir TTS girişi sağlamanıza olanak tanır.

  1. Widget'lar Uzantısı kitaplığı bağımlılığını örnek uygulama /app/build.gradle kaynağına ekleyin:
    // app/build.gradle
    
    dependencies {
      //...
      implementation "com.google.assistant.appactions:widgets:0.0.1"
    }
    
    Android Studio'da görünen uyarı kutusunda Şimdi Senkronize Et'i tıklayın. Her build.gradle değişiklikten sonra senkronizasyon yapmak, uygulamayı geliştirirken hatalardan kaçınmanıza yardımcı olur.

Widget hizmetini ekleyin

Hizmet, arka planda uzun süreli işlemler yapabilen bir uygulama bileşenidir. Uygulamanızın widget isteklerini işlemek için bir hizmet sağlaması gerekir.

  1. Şu yapılandırmayla örnek uygulamanın AndroidManifest.xml kaynağına bir hizmet ekleyin:
    <!-- 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>
    
    

Widget sipariş karşılamayı tetikleyen sesli sorgular sırasında Asistan, uygulamaya istek göndermek için bu hizmeti kullanır. Hizmet, isteği BII verileriyle birlikte alır. Hizmet, bu verileri kullanarak Asistan'da RemoteView widget nesnesi oluşturur.

Widget sınıfını güncelleme

Uygulamanız artık GET_EXERCISE_OBSERVATION özellik isteklerini widget sınıfınıza yönlendirecek şekilde yapılandırıldı. Ardından, BII parametre değerlerini kullanarak kullanıcı isteğine göre kişiselleştirilmiş bir widget örneği oluşturmak için StatsWidget.kt sınıfını güncelleyin.

  1. StatsWidget.kt sınıfını açın ve Uygulama İşlemleri Widget Uzantısı kitaplığını içe aktarın:
    // StatsWidget.kt
    
    // ... Other import statements
    import com.google.assistant.appactions.widgets.AppActionsWidgetExtension
    
    
  2. Widget'ı doldurması gereken bilgileri belirlerken kullanacağınız şu gizli değişkenleri ekleyin:
    // StatsWidget.kt
    
    private val hasBii: Boolean
    private val isFallbackIntent: Boolean
    private val aboutExerciseName: String
    private val exerciseType: FitActivity.Type
    
  3. Sınıfın Asistan'dan iletilen widget seçenekleri verilerini kullanmasına izin vermek için init işlevini ekleyin:
    // 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)
    }
    
    

Bu güncellemelerin, StatsWidget.kt sınıfının GET_EXERCISE_OBSERVATION özelliği tarafından oluşturulan Android amaçlarına yanıt vermesini nasıl sağladığını inceleyelim:

  • optionsBundle = Paket
    • Paketler; süreç sınırlarının ötesinde, amaca sahip etkinlikler arasında ve yapılandırma değişiklikleri genelinde geçici durumu depolamak için kullanılması amaçlanan nesnelerdir. Asistan, yapılandırma verilerini widget'a aktarmak için Bundle nesneleri kullanır.
  • bii = actions.intent.GET_EXERCISE_OBSERVATION
    • BII'nin adına, AppActionsWidgetExtension kullanılarak Paket'ten ulaşabilirsiniz.
  • hasBii = true
    • BII olup olmadığını kontrol eder.
  • params = Bundle[{aboutExerciseName=running}]
    • Uygulama İşlemleri tarafından oluşturulan özel bir Paket, Bundle widget seçeneklerinin içinde iç içe yerleştirilmiştir. BII anahtar/değer çiftlerini içerir. Bu durumda, running değeri "Ok Google, exampleApp'te çalışan istatistiklerimi göster" örnek sorgudan çıkarılmıştır.
  • isFallbackIntent = false
    • Extras amacında gerekli BII parametrelerinin olup olmadığını kontrol eder.
  • aboutExerciseName = running
    • aboutExerciseName için intent Extras değerini alır.
  • exerciseType = RUNNING
    • İlgili veritabanı türü nesnesini aramak için aboutExerciseName yöntemini kullanır.

StatsWidget sınıfı artık gelen Uygulama İşlemleri Android amaç verilerini işleyebildiğine göre widget'ın bir Uygulama İşlemi tarafından tetiklenip tetiklenmediğini kontrol etmek için widget oluşturma akış mantığını güncelleyin.

  1. StatsWidget.kt içinde updateAppWidget() işlevini şu kodla değiştirin:
    // 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()
    }
    
    

Önceki kod, observeAndUpdateRequestedExercise adlı yeni bir işleve başvuruda bulunuyor. Bu işlev, Uygulama İşlemleri Android amacı tarafından iletilen exerciseType parametresi verilerini kullanarak widget verileri oluşturur.

  1. Şu kodla observeAndUpdateRequestedExercise işlevini ekleyin:
    // 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()
           }
       }
    }
    
    

Önceki kodda, uygulamanın yerel veritabanından fitness verilerini almak için uygulamada bulunan mevcut bir depo sınıfını kullanın. Bu sınıf, veritabanına erişimi basitleştiren bir API sağlar. Depo, veritabanında sorgu yürütürken bir LiveData nesnesini ortaya çıkararak çalışır. Kodunuzda bu LiveData, en son fitness aktivitesini almak için gözlemlenir.

TTS'yi etkinleştir

Asistan'ın widget'ınızı görüntülerken duyuru yapması için bir TTS dizesi sağlayabilirsiniz. Widget'larınızla sesli bağlam sağlamak için bunu eklemenizi öneririz. Bu işlev, Asistan'da widget'larınıza eşlik eden metin ve TTS girişlerini ayarlamanıza olanak tanıyan Uygulama İşlemleri Widget'ları Uzantı kitaplığı tarafından sağlanmaktadır.

TTS tanıtımınızı sunmak için iyi bir yer, uygulama veritabanından döndürülen etkinlik verilerini biçimlendiren formatDataAndSetWidget işlevidir.

  1. StatsWidget.kt ürününde, formatDataAndSetWidget işlevine şu kodu ekleyin:
    // 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)
          }
    }
    
    

Önceki kod, biri konuşma, diğeri metin için olmak üzere iki dize kaynağına başvuruyor. TTS önerileri için widget videomuzun Metin Okuma stili önerisi bölümüne göz atın. Örnek, widget örneğine TTS bilgileri sağlayan yeni bir işlev olan setTts ile de ilgilidir.

  1. Bu yeni setTts işlevini, şu kodu kullanarak StatsWidget.kt işlevine ekleyin:
    // 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)
    }
    

Son olarak, egzersiz veritabanı istenen bir antrenman türü için boş veriler döndürdüğünde TTS bilgilerini ayarlayarak TTS mantığını tamamlayın.

  1. StatsWidget.kt içindeki setNoActivityDataWidget() işlevini şu kodla güncelleyin:
    // 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. Uygulama İşlemini Test Etme

Geliştirme sırasında, test cihazında Asistan Uygulama İşlemleri'ni önizlemek için Google Asistan eklentisini kullanın. Bir uygulama işleminin intent parametrelerini ayarlayarak eylemin kullanıcının Asistan'dan işlem yapmasını istediği çeşitli yöntemleri nasıl ele aldığını test edebilirsiniz.

Önizleme oluşturma

Uygulama İşleminizi eklentiyle test etmek için:

  1. Araçlar'a gidin > Google Asistan > Uygulama İşlemleri Test Aracı. Google Hesabınızı kullanarak Android Studio'da oturum açmanız istenebilir.
  2. Önizleme Oluştur'u tıklayın. Sizden istenirse Uygulama İşlemleri politikalarını ve hizmet şartlarını inceleyip kabul edin.

Beklenen bir egzersiz türünü test etme

Test aracında aşağıdaki adımları izleyerek uygulamada tamamlanan son çalıştırmayla ilgili bilgileri gösteren bir widget'ı döndürün:

  1. Aracın bir BII seçmeniz ve yapılandırmanız istediği ilk adımda actions.intent.GET_EXERCISE_OBSERVATION seçeneğini belirleyin.
  2. exerciseObservation kutusunda, climbing olan varsayılan Egzersiz adını run olarak güncelleyin.
  3. Run App Action'ı (Uygulama İşlemini Çalıştır) tıklayın.

Google Asistan eklentisi kullanılarak döndürülen bir widget&#39;ı gösteren ekran.

Beklenmeyen bir egzersiz türünü test etme

Test aracında beklenmedik bir egzersiz türünü test etmek için:

  1. exerciseObservation kutusunda, Run olan name değerini Climbing olarak güncelleyin.
  2. Run App Action'ı (Uygulama İşlemini Çalıştır) tıklayın.

Asistan, "Etkinlik bulunamadı" mesajını gösteren bir widget döndürmelidir ekleyebilirsiniz.

Google Asistan eklentisi kullanılarak döndürülen egzersiz bilgisi içermeyen bir widget&#39;ın gösterildiği ekran.

Yedek niyetini test edin

Yedek niyetini tetikleyen sorgular, herhangi bir egzersiz türünün günlüğe kaydedilen son aktivitesi hakkında bilgi gösteren bir widget döndürmelidir.

Yedek amacını test etmek için:

  1. exerciseObservation kutusundaki aboutExercise nesnesini silin.
  2. Run App Action'ı (Uygulama İşlemini Çalıştır) tıklayın.

Asistan, tamamlanan son alıştırmayla ilgili bilgileri gösteren bir widget döndürmelidir.

Google Asistan eklentisi kullanılarak kaydedilen son etkinliği gösteren bir widget&#39;ın gösterildiği ekran.

7. Sonraki adımlar

Tebrikler!

Artık kullanıcıların ihtiyaçlarını karşılama ve kullanarak bir Android Widget'ı sorgulayabilir.

İşlediğimiz konular

Bu codelab'de şunları öğrendiniz:

  • BII'ye uygulama widget'ı ekleyin.
  • Android Extras'taki parametrelere erişmek için bir widget'ta değişiklik yapma

Sırada ne var?

Buradan, fitness uygulamanızda daha fazla hassaslaştırma yapmayı deneyebilirsiniz. Bitmiş projeye referans vermek için GitHub'da ana depoya göz atın.

Aşağıda, Uygulama İşlemleri ile bu uygulamanın kapsamını genişletme hakkında daha fazla bilgi için bazı öneriler verilmiştir:

Actions on Google yolculuğunuza devam etmek için aşağıdaki kaynakları inceleyin:

En son duyurularımızı kaçırmamak için bizi @ActionsOnGoogle Twitter'da takip edin ve oluşturduğunuz içerikleri paylaşmak için #appactions adresine tweet atın.

Geri bildirim anketi

Son olarak, bu codelab'deki deneyiminiz hakkında geri bildirimde bulunmak için lütfen bu anketi doldurun.