1. Genel Bakış
İlk uygulama işlemleri codelab'inde, Sağlık ve 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 Asistan'dan "Ok Google, ExampleApp'te koşu başlat" gibi şeyler söyleyerek doğrudan belirli uygulama özelliklerini başlatmasına olanak tanır. Asistan, uygulamaları başlatmanın yanı sıra uygun BII'lerle ilgili istekleri karşılamak için kullanıcıya etkileşimli bir Android widget'ı da gösterebilir.

Ne oluşturacaksınız?
Bu codelab'de, Asistan kullanıcı isteklerini karşılamak için Android widget'larını nasıl döndüreceğinizi öğreneceksiniz. Ayrıca şunları da öğreneceksiniz:
- Widget'ları kişiselleştirmek için kullanıcı BII parametrelerini kullanın.
- Asistan'da widget'larınız için metin okuma (TTS) girişleri sağlayın.
- Hangi yerleşik amaçların widget isteğini karşılama özelliğini desteklediğini belirlemek için yerleşik amaç referansını kullanın.
Ön koşullar
Devam etmeden önce geliştirme ortamınızın uygulama işlemleri geliştirmeye hazır olduğundan emin olun. Şunları içermelidir:
- Git'in yüklü olduğu bir terminalde kabuk komutlarını çalıştırma
- 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 cihazı yerel geliştirme makinenize bağlayın.
2. İşleyiş şeklini anlama
Google Asistan, kullanıcının isteğini okumak ve yerleşik bir Asistan amacı (BII) ile eşleştirmek için doğal dil anlama (NLU) özelliğini kullanır. Ardından Asistan, amacı uygulamanızda bu amaç için kaydettiğiniz yetenekle (BII'yi uygulayan) eşler. Son olarak Asistan, yetenekte bulunan ayrıntıları kullanarak uygulamanızın oluşturduğu Android widget'ını göstererek kullanıcının isteğini yerine getirir.
Bu codelab'de, GET_EXERCISE_OBSERVATION BII'nin desteklendiğini kaydeden bir özellik tanımlayacaksınız. Bu özellikte, Asistan'a bu BII ile ilgili istekleri karşılamak için FitActions widget sınıfına yönelik bir Android intent'i oluşturmasını söylersiniz. Bu sınıfı, kullanıcıya gösterilecek kişiselleştirilmiş bir Asistan widget'ı ve Asistan'ın duyuracağı bir TTS girişi oluşturmak için güncellersiniz.
Aşağıdaki şemada bu akış gösterilmektedir:

FitActions widget'ı
FitActions örnek uygulamasında, kullanıcıların ana ekranlarına ekleyebileceği bir egzersiz bilgileri widget'ı bulunur. Bu widget, GET_EXERCISE_OBSERVATION BII'yi tetikleyen kullanıcı sorgularını karşılama konusunda mükemmel bir adaydır.
Widget'ın işleyiş şekli
Kullanıcı ana ekrana bir widget eklediğinde widget, cihazın Broadcast Receiver'ını ping'ler. Bu hizmet, widget'la ilgili bilgileri uygulamanın AndroidManifest.xml kaynağındaki widget alıcısının tanımından alır. Bu bilgileri kullanarak widget'ı temsil eden bir RemoteViews nesnesi oluşturur.
Örnek uygulama, StatsWidgetProvider sınıfına karşılık gelen alıcı widgets.StatsWidgetProvider öğesini 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ışlarını yönetir. Şu sorumlulukları üstlenir:
- Widget örnekleri oluşturma ve bunları uygulama veritabanındaki egzersiz verileriyle doldurma.
formatDataAndSetWidget()ile egzersiz verilerini okunabilir şekilde biçimlendirme- Egzersiz verileri kullanılamıyorsa varsayılan değerler sağlama (
setNoActivityDataWidget()kullanılarak).
Asistan desteği ekleme
Bu codelab'de, örnek uygulamayı Uygulama İşlemleri işlevini işleyecek şekilde güncelleyeceksiniz. Bu değişiklikler şunlardır:
GET_EXERCISE_OBSERVATIONBII özelliğini,StatsWidgetnesnesinin bir örneğini döndürecek şekilde yapılandırma.StatsWidgetsınıfını aşağıdaki gibi uygulama işlemleri özelliklerini kullanacak şekilde güncelleme:- BII parametrelerini kullanarak kullanıcılara "Ok Google, ExampleApp'teki koşu istatistiklerimi göster" gibi sorular sorarak belirli antrenman istatistiklerini görüntüleme olanağı tanır.
- TTS giriş dizeleri sağlama.
- Kullanıcı sorgusunda egzersiz türü parametresinin bulunmadığı durumlar gibi özel durumları yönetme
3. Geliştirme ortamınızı hazırlama
Temel dosyalarınızı indirme
Örnek uygulamanın GitHub deposunu klonlamak için bu komutu çalıştırın:
git clone --branch start-widget-codelab https://github.com/actions-on-google/appactions-fitness-kotlin.git
Depoyu klonladıktan sonra Android Studio'da açmak için aşağıdaki adımları uygulayın:
- Android Studio'ya Hoş Geldiniz iletişim kutusunda Projeyi içe aktar'ı tıklayın.
- Depoyu klonladığınız klasörü bulup seçin.
Tamamlanmış codelab'i temsil eden 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, uygulamayı test cihazınızda benzersiz bir şekilde tanımlar ve uygulama Play Console'a yüklenirse "Paket adı yineleniyor" hatasını önler. Uygulama kimliğini güncellemek için app/build.gradle uygulamasını açın:
android {
...
defaultConfig {
applicationId "com.MYUNIQUENAME.android.fitactions"
...
}
}
applicationId alanındaki "MYUNIQUENAME" ifadesini size özel benzersiz bir ifadeyle değiştirin.
Test eklentisini yükleyin
Google Asistan eklentisi, uygulama işlemlerinizi bir test cihazında test etmenize olanak tanır. Bu özellik, Android cihazınızdaki Google uygulaması üzerinden Asistan'a bilgi göndererek çalışır. Eklentiye sahip değilseniz aşağıdaki adımları uygulayarak yükleyin:
- Dosya > Ayarlar'a (MacOS'te Android Studio > Tercihler) gidin.
- Eklentiler bölümünde Marketplace'e gidin ve "Google Asistan"ı arayın. Test aracını manuel olarak da indirip yükleyebilirsiniz.
- 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 edinmek faydalı olur.
Uygulamayı test cihazınızda çalıştırın:
- Android Studio'da fiziksel veya sanal cihazınızı seçin ve Run > Run app'i seçin ya da araç çubuğunda Run'ı
tıklayın. - Asistan'ı ayarlamak ve çalıştığını doğrulamak için Ana Sayfa düğmesine uzun basın. Henüz yapmadıysanız cihazınızda Asistan'da oturum açmanız gerekir.
Android sanal cihazları hakkında daha fazla bilgi için Sanal cihaz oluşturma ve yönetme başlıklı makaleyi inceleyin.
Uygulamanın neler yapabileceğini görmek için uygulamayı kısaca inceleyin. Uygulama, 10 egzersiz etkinliğini önceden doldurur ve bu bilgileri ilk görünümde gösterir.
Mevcut widget'ı deneyin
- Test cihazınızın ana ekranına gitmek için Ana Sayfa düğmesine dokunun.
- Ana ekranda boş bir alana uzun basın ve Widget'lar'ı seçin.
- Widget listesinde FitActions'a gidin.
- FitActions simgesine uzun basın ve widget'ını ana ekrana yerleştirin.

4. Uygulama İşlemini Ekleme
Bu adımda, GET_EXERCISE_OBSERVATION BII özelliğini eklersiniz. Bunu, shortcuts.xml içine yeni bir capability öğesi ekleyerek yapabilirsiniz. Bu özellik, özelliğin nasıl tetikleneceğini, BII parametrelerinin nasıl kullanılacağını ve isteği karşılamak için hangi Android amaçlarının çağrılacağını belirtir.
- Örnek proje
shortcuts.xmlkaynağına şu yapılandırmayla yeni bircapabilityöğ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>android:targetPackagedeğeriPUT_YOUR_APPLICATION_ID_HEREyerine benzersizapplicationIddeğerinizi girin.
Bu özellik, GET_EXERCISE_OBSERVATION BII'yi app-widget amaca eşler. Böylece BII tetiklendiğinde widget oluşturulur ve kullanıcıya gösterilir.
Asistan, kullanıcı sorgusundan desteklenen BII parametrelerini ayıklar ve ardından widget'ı tetikler. Bu codelab'de, kullanıcının istediği egzersiz türünü temsil eden BII parametresi exerciseObservation.aboutExercise.name gereklidir. Uygulama üç egzersiz türünü destekler: "koşu", "yürüyüş" ve "bisiklet". Asistan'ı bu desteklenen değerler hakkında bilgilendirmek için satır içi envanter sağlarsınız.
- Bu yapılandırmayı
shortcuts.xmlöğesine,GET_EXERCISE_OBSERVATIONözelliğinin üstüne ekleyerek bu envanter öğelerini tanımlayın:<!-- 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 amaç ekleme
Yedek amaçlar, sorguda özelliğin gerektirdiği parametreler eksik olduğundan kullanıcı sorgusunun karşılanamadığı durumları ele alır. GET_EXERCISE_OBSERVATION özelliği, android:required="true" özelliğiyle belirtilen exerciseObservation.aboutExercise.name parametresini gerektirir. Bu gibi durumlarda, sorguda parametre sağlanmasa bile isteğin başarılı olması için Asistan'ın bir yedek amaç tanımlamanızı gerektirir.
shortcuts.xmliçinde, bu yapılandırmayı kullanarakGET_EXERCISE_OBSERVATIONözelliğine yedek amaç 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 öğesi, Extra verilerinde parametre bulunmayan bir Android intent'idir.
5. Asistan widget'ını etkinleştirme
GET_EXERCISE_OBSERVATION özelliği oluşturulduktan sonra, widget sınıfını uygulama işlemleriyle sesli çağırmayı destekleyecek şekilde güncelleyin.
Widget Uzantısı kitaplığını ekleme
Uygulama İşlemleri Widget Uzantısı kitaplığı, sesli Asistan deneyimleri için widget'larınızı geliştirir. Özellikle, widget'larınız için özel bir TTS tanıtımı sağlamanıza olanak tanır.
- Örnek uygulama
/app/build.gradlekaynağına Widgets Extension kitaplığı bağımlılığını ekleyin: Android Studio'da görünen uyarı kutusunda Şimdi Senkronize Et'i tıklayın. Her// app/build.gradle dependencies { //... implementation "com.google.assistant.appactions:widgets:0.0.1" }build.gradledeğişiklikten sonra senkronizasyon yapmak, uygulamayı oluştururken hatalardan kaçınmanıza yardımcı olur.
Widget hizmetini ekleme
Hizmet, arka planda uzun süren işlemler gerçekleştirebilen bir uygulama bileşenidir. Uygulamanızın, widget isteklerini işlemek için bir hizmet sağlaması gerekir.
- Örnek uygulamanın
AndroidManifest.xmlkaynağına şu yapılandırmayla 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'ın yerine getirilmesini tetikleyen bir sesli sorgu sırasında Asistan, uygulamaya istek göndermek için bu hizmeti kullanır. Hizmet, isteği BII verileriyle birlikte alır. Hizmet, Asistan'da oluşturulacak bir RemoteView widget nesnesi oluşturmak için bu verileri kullanır.
Widget sınıfını güncelleme
Uygulamanız artık GET_EXERCISE_OBSERVATION özelliği 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.
StatsWidget.ktsı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- Widget'ı dolduracak bilgileri belirlerken kullandığınız şu özel değişkenleri ekleyin:
// StatsWidget.kt private val hasBii: Boolean private val isFallbackIntent: Boolean private val aboutExerciseName: String private val exerciseType: FitActivity.Type - Sınıfın, Asistan'dan aktarılan widget seçenekleri verilerini kullanmasına izin vermek için
initiş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 nasıl yanıt vermesini sağladığını inceleyelim:
optionsBundle= Paket- Paketler, işlem sınırları arasında, amaç içeren etkinlikler arasında kullanılmak ve yapılandırma değişiklikleri boyunca geçici durumu depolamak için tasarlanmış nesnelerdir. Asistan, yapılandırma verilerini widget'a iletmek için
Bundlenesnelerini kullanır.
- Paketler, işlem sınırları arasında, amaç içeren etkinlikler arasında kullanılmak ve yapılandırma değişiklikleri boyunca geçici durumu depolamak için tasarlanmış nesnelerdir. Asistan, yapılandırma verilerini widget'a iletmek için
bii=actions.intent.GET_EXERCISE_OBSERVATION- BII'nin adı,
AppActionsWidgetExtensionkullanılarak paketten alınabilir.
- BII'nin adı,
hasBii=true- BII olup olmadığını kontrol eder.
params=Bundle[{aboutExerciseName=running}]- Uygulama İşlemleri tarafından oluşturulan özel bir paket, widget seçeneklerinin
Bundleiçine yerleştirilir. BII'nin anahtar/değer çiftlerini içerir. Bu durumda,runningdeğeri "Ok Google, ExampleApp'teki koşu istatistiklerimi göster" örnek sorgusundan çıkarıldı.
- Uygulama İşlemleri tarafından oluşturulan özel bir paket, widget seçeneklerinin
isFallbackIntent=false- Niyette
Extrasgerekli BII parametrelerinin olup olmadığını kontrol eder.
- Niyette
aboutExerciseName=runningaboutExerciseNameiçin amaçExtrasdeğerini alır.
exerciseType=RUNNING- İlgili veritabanı türü nesnesini aramak için
aboutExerciseNamekullanılır.
- İlgili veritabanı türü nesnesini aramak için
StatsWidget sınıfı artık gelen uygulama işlemleri Android intent verilerini işleyebildiğinden, widget oluşturma akışı mantığını widget'ın bir uygulama işlemi tarafından tetiklenip tetiklenmediğini kontrol edecek şekilde güncelleyin.
StatsWidget.ktiçindeupdateAppWidget()işlevini aşağıdaki 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() }
Yukarıdaki kod, observeAndUpdateRequestedExercise adlı yeni bir işlevi referans alıyor. Bu işlev, Uygulama İşlemleri Android intent'i tarafından iletilen exerciseType parametre verilerini kullanarak widget verileri oluşturur.
- Aşağıdaki kodla
observeAndUpdateRequestedExerciseiş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 repository sınıfını kullanın. Bu sınıf, veritabanına erişimi basitleştiren bir API sağlar. Depo, veritabanında sorgu gerçekleştirirken bir LiveData nesnesi sunarak çalışır. En son fitness etkinliğini almak için kodunuzda LiveData değerini gözlemlersiniz.
TTS'yi etkinleştirme
Asistan'ın widget'ınızı görüntülerken duyurması için TTS dizesi sağlayabilirsiniz. Widget'larınızla sesli bağlam sağlamak için bunu eklemenizi öneririz. Bu işlev, Asistan'daki widget'larınıza eşlik eden metin ve TTS tanıtımlarını ayarlamanıza olanak tanıyan Uygulama İşlemleri Widgets Extension kitaplığı tarafından sağlanır.
TTS girişinizi sağlamak için iyi bir yer, uygulama veritabanından döndürülen etkinlik verilerini biçimlendiren formatDataAndSetWidget işlevidir.
StatsWidget.ktiçinde,formatDataAndSetWidgetiş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, iki dize kaynağına referans veriyor: biri konuşma, diğeri ise metin için. TTS önerileri için widget'lar videomuzun Metin okuma stili önerisi bölümüne göz atın. Örnekte, TTS bilgilerini widget örneğine sağlayan yeni bir işlev olan setTts de ele alınmaktadır.
- Bu kodu kullanarak
setTtsadlı yeni işleviStatsWidget.kt'ye 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 antrenman türü için boş veri döndürdüğünde TTS bilgilerini ayarlayarak TTS mantığını tamamlayın.
StatsWidget.ktiçindekisetNoActivityDataWidget()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 İşlemlerini önizlemek için Google Asistan eklentisini kullanın. Aracı kullanarak bir uygulama işleminin amaç parametrelerini ayarlayabilir ve işleminizin, kullanıcının Asistan'dan işlemi çalıştırmasını isteyebileceği çeşitli yöntemleri nasıl ele aldığını test edebilirsiniz.
Önizleme oluşturma
Uygulama İşleminizi eklentiyle test etmek için:
- Araçlar > Google Asistan > Uygulama İşlemleri Test Aracı'na gidin. Google Hesabınızı kullanarak Android Studio'da oturum açmanız istenebilir.
- Önizleme Oluştur'u tıklayın. İstenirse 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ı uygulayarak uygulamada tamamlanan son çalıştırma hakkında bilgi gösteren bir widget döndürün:
- Aracın sizden bir BII seçip yapılandırmanızı istediği ilk adımda
actions.intent.GET_EXERCISE_OBSERVATIONsimgesini seçin. - exerciseObservation kutusunda, varsayılan Egzersiz adını
climbingyerinerunolarak güncelleyin. - Uygulama İşlemini Çalıştır'ı tıklayın.

Beklenmeyen bir egzersiz türünü test etme
Test aracında beklenmedik bir egzersiz türünü test etmek için:
- exerciseObservation kutusunda
namedeğeriniRunyerineClimbingolarak güncelleyin. - Uygulama İşlemini Çalıştır'ı tıklayın.
Asistan, "Etkinlik bulunamadı" bilgisini gösteren bir widget döndürmelidir.

Yedek amacı test etme
Yedek amaç tetikleyen sorgular, herhangi bir egzersiz türünün son kaydedilen etkinliğiyle ilgili bilgileri gösteren bir widget döndürmelidir.
Yedek intent'i test etmek için:
- exerciseObservation kutusunda
aboutExercisenesnesini silin. - Uygulama İşlemini Çalıştır'ı tıklayın.
Asistan, tamamlanan son egzersizle ilgili bilgileri gösteren bir widget döndürmelidir.

7. Sonraki adımlar
Tebrikler!
Artık Asistan ile Android widget'ını kullanarak kullanıcıların sorgularını yanıtlayabilirsiniz.
İşlediğimiz konular
Bu codelab'de şunları öğrendiniz:
- BII'ye uygulama widget'ı ekleme
- Android Ekstralar'daki parametrelere erişmek için bir widget'ı değiştirin.
Sırada ne var?
Buradan, fitness uygulamanızda daha fazla iyileştirme yapmayı deneyebilirsiniz. Tamamlanmış projeye referans vermek için GitHub'daki ana depoya bakın.
Bu uygulamayı Uygulama İşlemleri ile genişletme hakkında daha fazla bilgi edinmek için aşağıdaki önerilerden yararlanabilirsiniz:
- Uygulama İşlemleri yerleşik amaç referansı sayfasını ziyaret ederek uygulamalarınızı Asistan'a entegre etmenin diğer yollarını keşfedin.
Actions on Google yolculuğunuza devam etmek için aşağıdaki kaynakları inceleyin:
- developers.google.com/assistant/app: Google Asistan uygulama işlemleriyle ilgili resmi doküman sitesi.
- Uygulama İşlemleri örnek dizini: Uygulama İşlemleri özelliklerini keşfetmek için örnek uygulamalar ve kodlar.
- Actions on Google GitHub deposu: Örnek kod ve kitaplıklar.
- r/GoogleAssistantDev: Google Asistan ile çalışan geliştiriciler için resmi Reddit topluluğu.
En son duyurularımızdan haberdar olmak için Twitter'da @ActionsOnGoogle hesabını takip edin ve geliştirdiklerinizi paylaşmak için #appactions etiketini kullanarak tweet atın.
Geri bildirim anketi
Son olarak, bu codelab ile ilgili deneyiminizi değerlendirmek için lütfen bu anketi doldurun.