1. Tổng quan
Trong lớp học lập trình đầu tiên về Hành động trong ứng dụng, bạn đã tìm hiểu cách mở rộng Trợ lý Google sang một ứng dụng thể dục mẫu bằng cách triển khai các ý định tích hợp (BII) từ danh mục BII về Sức khoẻ và thể dục.
Hành động trong ứng dụng cho phép người dùng chạy trực tiếp các tính năng cụ thể của ứng dụng thông qua Trợ lý bằng cách hỏi những câu như "Ok Google, bắt đầu chạy trên ExampleApp". Ngoài việc khởi chạy ứng dụng, Trợ lý có thể hiển thị một tiện ích Android có thể tương tác cho người dùng để đáp ứng các yêu cầu đối với BII đủ điều kiện.

Sản phẩm bạn sẽ tạo ra
Trong lớp học lập trình này, bạn sẽ tìm hiểu cách trả về các tiện ích Android để đáp ứng yêu cầu của người dùng Trợ lý. Bạn cũng sẽ học được cách:
- Tham số BII của người dùng để cá nhân hoá tiện ích.
- Cung cấp phần giới thiệu văn bản dưới dạng lời nói (TTS) trong Trợ lý cho các tiện ích của bạn.
- Sử dụng Tài liệu tham khảo về ý định tích hợp sẵn để xác định những BII hỗ trợ phương thức thực hiện tiện ích.
Điều kiện tiên quyết
Trước khi tiếp tục, hãy đảm bảo môi trường phát triển của bạn đã sẵn sàng cho việc phát triển Hành động trong ứng dụng. Thông tin này phải có:
- Một cửa sổ dòng lệnh để chạy các lệnh shell, có cài đặt git.
- Bản phát hành ổn định mới nhất của Android Studio.
- Một thiết bị Android thực hoặc thiết bị Android ảo có quyền truy cập Internet.
- Một Tài khoản Google đã đăng nhập vào Android Studio, ứng dụng Google và ứng dụng Trợ lý Google.
Nếu bạn đang sử dụng một thiết bị thực, hãy kết nối thiết bị đó với máy phát triển cục bộ.
2. Tìm hiểu cách hoạt động
Trợ lý Google sử dụng tính năng hiểu ngôn ngữ tự nhiên (NLU) để đọc yêu cầu của người dùng và so khớp yêu cầu đó với một ý định tích hợp sẵn (BII) của Trợ lý. Sau đó, Trợ lý sẽ ánh xạ ý định đến chức năng (triển khai BII) mà bạn đăng ký cho ý định đó trong ứng dụng của mình. Cuối cùng, Trợ lý sẽ đáp ứng yêu cầu của người dùng bằng cách hiển thị tiện ích Android mà ứng dụng của bạn tạo bằng các thông tin chi tiết có trong chức năng.
Trong lớp học lập trình này, bạn sẽ xác định một chức năng đăng ký hỗ trợ BII GET_EXERCISE_OBSERVATION. Trong chức năng này, bạn hướng dẫn Trợ lý tạo một ý định Android cho lớp tiện ích FitActions để thực hiện các yêu cầu cho BII này. Bạn cập nhật lớp này để tạo một tiện ích được cá nhân hoá để Trợ lý hiển thị cho người dùng và một phần giới thiệu TTS để Trợ lý thông báo.
Sơ đồ sau đây minh hoạ quy trình này:

Tiện ích FitActions
Ứng dụng mẫu FitActions chứa một tiện ích thông tin về hoạt động tập luyện mà người dùng có thể thêm vào màn hình chính. Tiện ích này là một lựa chọn phù hợp để thực hiện các truy vấn của người dùng kích hoạt BII GET_EXERCISE_OBSERVATION.
Cách hoạt động của tiện ích
Khi người dùng thêm một tiện ích vào màn hình chính, tiện ích đó sẽ ping Broadcast Receiver của thiết bị. Dịch vụ này truy xuất thông tin về tiện ích từ định nghĩa của receiver tiện ích trong tài nguyên AndroidManifest.xml của ứng dụng. Dịch vụ này sử dụng thông tin này để tạo một đối tượng RemoteViews đại diện cho tiện ích.
Ứng dụng mẫu xác định widgets.StatsWidgetProvider của trình nhận, tương ứng với lớp 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>
Lớp StatsWidgetProvider, StatsWidgetProvider.kt, quản lý các luồng tạo đối tượng StatsWidget. Ứng dụng này đảm nhận những trách nhiệm sau:
- Tạo các thực thể tiện ích và điền sẵn dữ liệu bài tập vào các thực thể đó từ cơ sở dữ liệu ứng dụng.
- Định dạng dữ liệu tập luyện để dễ đọc bằng
formatDataAndSetWidget(). - Cung cấp giá trị mặc định nếu không có dữ liệu về bài tập, sử dụng
setNoActivityDataWidget().
Thêm tính năng hỗ trợ Trợ lý
Trong lớp học lập trình này, bạn sẽ cập nhật ứng dụng mẫu để xử lý chức năng Hành động trong ứng dụng. Những thay đổi này bao gồm:
- Định cấu hình khả năng BII
GET_EXERCISE_OBSERVATIONđể trả về một thực thể của đối tượngStatsWidget. - Cập nhật lớp
StatsWidgetđể sử dụng các tính năng của Hành động trong ứng dụng, chẳng hạn như:- Sử dụng các tham số BII, cho phép người dùng xem số liệu thống kê cụ thể về bài tập bằng cách hỏi những câu như "Ok Google, cho tôi xem số liệu thống kê về hoạt động chạy của tôi trên ExampleApp."
- Cung cấp chuỗi giới thiệu TTS.
- Quản lý các trường hợp đặc biệt, chẳng hạn như khi truy vấn của người dùng không có tham số loại bài tập.
3. Chuẩn bị môi trường phát triển
Tải tệp cơ sở xuống
Chạy lệnh này để sao chép kho lưu trữ GitHub của ứng dụng mẫu:
git clone --branch start-widget-codelab https://github.com/actions-on-google/appactions-fitness-kotlin.git
Sau khi sao chép kho lưu trữ, hãy làm theo các bước sau để mở kho lưu trữ đó trong Android Studio:
- Trong hộp thoại Welcome to Android Studio (Chào mừng bạn đến với Android Studio), hãy nhấp vào Import project (Nhập dự án).
- Tìm và chọn thư mục nơi bạn đã sao chép kho lưu trữ.
Để xem phiên bản ứng dụng đại diện cho lớp học lập trình đã hoàn thành, hãy sao chép kho lưu trữ ứng dụng mẫu bằng cờ --branch master.
Cập nhật mã ứng dụng Android
Việc cập nhật mã ứng dụng của ứng dụng sẽ giúp nhận dạng duy nhất ứng dụng trên thiết bị thử nghiệm của bạn và tránh lỗi "Tên gói trùng lặp" nếu ứng dụng được tải lên Play Console. Để cập nhật mã ứng dụng, hãy mở app/build.gradle:
android {
...
defaultConfig {
applicationId "com.MYUNIQUENAME.android.fitactions"
...
}
}
Thay thế "MYUNIQUENAME" trong trường applicationId bằng một tên riêng biệt cho bạn.
Cài đặt trình bổ trợ kiểm thử
Trình bổ trợ Trợ lý Google cho phép bạn kiểm thử Hành động trong ứng dụng trên một thiết bị thử nghiệm. Tính năng này hoạt động bằng cách gửi thông tin đến Trợ lý thông qua ứng dụng Google trên thiết bị Android của bạn. Nếu bạn chưa có trình bổ trợ này, hãy cài đặt theo các bước sau:
- Chuyển đến mục Tệp > Cài đặt (Android Studio > Lựa chọn ưu tiên trên MacOS).
- Trong mục Trình bổ trợ, hãy chuyển đến Marketplace rồi tìm "Trợ lý Google". Bạn cũng có thể tải và cài đặt công cụ kiểm thử theo cách thủ công.
- Cài đặt công cụ rồi khởi động lại Android Studio.
Kiểm thử ứng dụng trên thiết bị
Trước khi thực hiện thêm các thay đổi cho ứng dụng, bạn nên tìm hiểu những việc mà ứng dụng mẫu có thể làm.
Chạy ứng dụng trên thiết bị thử nghiệm:
- Trong Android Studio, hãy chọn thiết bị thực hoặc thiết bị ảo rồi chọn Run > Run app (Chạy > Chạy ứng dụng) hoặc nhấp vào biểu tượng Run
(Chạy) trên thanh công cụ. - Nhấn và giữ nút Màn hình chính để thiết lập Trợ lý và xác minh rằng Trợ lý hoạt động. Bạn sẽ cần đăng nhập vào Trợ lý trên thiết bị của mình (nếu chưa đăng nhập).
Để biết thêm thông tin về thiết bị ảo Android, hãy xem bài viết Tạo và quản lý thiết bị ảo.
Khám phá nhanh ứng dụng để xem ứng dụng có thể làm gì. Ứng dụng sẽ điền sẵn 10 hoạt động tập thể dục và hiển thị thông tin này trên chế độ xem đầu tiên.
Dùng thử tiện ích hiện có
- Nhấn vào nút Màn hình chính để chuyển đến màn hình chính của thiết bị thử nghiệm.
- Nhấn và giữ một khoảng trống trên màn hình chính rồi chọn Tiện ích.
- Di chuyển xuống danh sách tiện ích để tìm FitActions.
- Nhấn và giữ biểu tượng FitActions rồi đặt tiện ích này lên màn hình chính.

4. Thêm Thao tác trong ứng dụng
Ở bước này, bạn sẽ thêm khả năng BII GET_EXERCISE_OBSERVATION. Bạn thực hiện việc này bằng cách thêm một phần tử capability mới vào shortcuts.xml. Chức năng này chỉ định cách kích hoạt chức năng, cách sử dụng các tham số BII và ý định nào của Android cần gọi để thực hiện yêu cầu.
- Thêm một phần tử
capabilitymới vào tài nguyênshortcuts.xmlcủa dự án mẫu bằng cấu hình sau: Thay thế giá trị<!-- fitnessactions/app/src/main/res/xml/shortcuts.xml --> <capability android:name="actions.intent.GET_EXERCISE_OBSERVATION"> <app-widget android:identifier="GET_EXERCISE_OBSERVATION" android:targetClass="com.devrel.android.fitactions.widgets.StatsWidgetProvider" android:targetPackage="PUT_YOUR_APPLICATION_ID_HERE"> <parameter android:name="exerciseObservation.aboutExercise.name" android:key="aboutExerciseName" android:required="true"> </parameter> <extra android:name="hasTts" android:value="true"/> </app-widget> <!-- Add Fallback Intent--> </capability>android:targetPackage,PUT_YOUR_APPLICATION_ID_HEREbằngapplicationIdduy nhất của bạn.
Khả năng này liên kết BII GET_EXERCISE_OBSERVATION với ý định app-widget để khi BII được kích hoạt, tiện ích sẽ khởi tạo và hiển thị cho người dùng.
Trước khi kích hoạt tiện ích, Trợ lý sẽ trích xuất các tham số BII được hỗ trợ từ truy vấn của người dùng. Lớp học lập trình này yêu cầu tham số BII exerciseObservation.aboutExercise.name, đại diện cho loại bài tập mà người dùng yêu cầu. Ứng dụng này hỗ trợ 3 loại bài tập: "chạy bộ", "đi bộ" và "đạp xe". Bạn cung cấp một khoảng không quảng cáo nội tuyến để thông báo cho Trợ lý về những giá trị được hỗ trợ này.
- Xác định các phần tử khoảng không quảng cáo này bằng cách thêm cấu hình này (phía trên chức năng
GET_EXERCISE_OBSERVATION) vàoshortcuts.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>
Thêm ý định dự phòng
Ý định dự phòng xử lý các trường hợp không thực hiện được truy vấn của người dùng vì truy vấn đó thiếu các tham số bắt buộc theo chức năng. Chức năng GET_EXERCISE_OBSERVATION yêu cầu tham số exerciseObservation.aboutExercise.name, được chỉ định bằng thuộc tính android:required="true". Trong những trường hợp này, Trợ lý yêu cầu bạn xác định một ý định dự phòng để cho phép yêu cầu thành công, ngay cả khi không có tham số nào được cung cấp trong truy vấn.
- Trong
shortcuts.xml, hãy thêm một ý định dự phòng vào chức năngGET_EXERCISE_OBSERVATIONbằng cấu hình sau:<!-- 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>
Trong cấu hình mẫu này, phương thức thực hiện dự phòng là một ý định Android không có tham số trong dữ liệu Extra.
5. Bật tiện ích cho Trợ lý
Sau khi thiết lập khả năng GET_EXERCISE_OBSERVATION, hãy cập nhật lớp tiện ích để hỗ trợ lệnh gọi bằng giọng nói cho Hành động trong ứng dụng.
Thêm thư viện Tiện ích mở rộng
Thư viện mở rộng tiện ích của Hành động trong ứng dụng giúp cải thiện tiện ích của bạn đối với trải nghiệm Trợ lý chuyển tiếp bằng lời nói. Cụ thể, thư viện này cho phép bạn cung cấp phần giới thiệu TTS tuỳ chỉnh cho các tiện ích của mình.
- Thêm phần phụ thuộc của thư viện Tiện ích mở rộng vào tài nguyên
/app/build.gradlecủa ứng dụng mẫu: Nhấp vào Đồng bộ hoá ngay trong hộp cảnh báo xuất hiện trong Android Studio. Việc đồng bộ hoá sau mỗi lần thay đổi// app/build.gradle dependencies { //... implementation "com.google.assistant.appactions:widgets:0.0.1" }build.gradlegiúp bạn tránh được lỗi khi tạo ứng dụng.
Thêm dịch vụ tiện ích
Dịch vụ là một thành phần của ứng dụng có thể thực hiện các thao tác kéo dài trong nền. Ứng dụng của bạn cần cung cấp một dịch vụ để xử lý các yêu cầu về tiện ích.
- Thêm một dịch vụ vào tài nguyên
AndroidManifest.xmlcủa ứng dụng mẫu bằng cấu hình sau:<!-- 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>
Trong một truy vấn bằng giọng nói kích hoạt việc thực hiện tiện ích, Trợ lý sẽ dùng dịch vụ này để gửi yêu cầu đến ứng dụng. Dịch vụ này sẽ nhận được yêu cầu cùng với dữ liệu BII. Dịch vụ này sử dụng dữ liệu này để tạo một đối tượng tiện ích RemoteView nhằm kết xuất trong Trợ lý.
Cập nhật lớp tiện ích
Ứng dụng của bạn hiện được định cấu hình để định tuyến các yêu cầu về chức năng GET_EXERCISE_OBSERVATION đến lớp tiện ích. Tiếp theo, hãy cập nhật lớp StatsWidget.kt để tạo một phiên bản tiện ích được cá nhân hoá theo yêu cầu của người dùng, bằng cách sử dụng các giá trị tham số BII.
- Mở lớp
StatsWidget.ktvà nhập thư viện Tiện ích Hành động trong ứng dụng:// StatsWidget.kt // ... Other import statements import com.google.assistant.appactions.widgets.AppActionsWidgetExtension - Thêm các biến riêng tư này mà bạn dùng khi xác định thông tin cần điền vào tiện ích:
// StatsWidget.kt private val hasBii: Boolean private val isFallbackIntent: Boolean private val aboutExerciseName: String private val exerciseType: FitActivity.Type - Thêm hàm
initđể cho phép lớp sử dụng dữ liệu về các lựa chọn cho tiện ích được truyền từ Trợ lý:// 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) }
Hãy cùng tìm hiểu cách những nội dung cập nhật này cho phép lớp StatsWidget.kt phản hồi các ý định của Android do chức năng GET_EXERCISE_OBSERVATION tạo ra:
optionsBundle= Gói- Bundle là các đối tượng được dùng trên các ranh giới quy trình, giữa các hoạt động có ý định và để lưu trữ trạng thái tạm thời qua các thay đổi về cấu hình. Trợ lý sử dụng các đối tượng
Bundleđể truyền dữ liệu cấu hình đến tiện ích.
- Bundle là các đối tượng được dùng trên các ranh giới quy trình, giữa các hoạt động có ý định và để lưu trữ trạng thái tạm thời qua các thay đổi về cấu hình. Trợ lý sử dụng các đối tượng
bii=actions.intent.GET_EXERCISE_OBSERVATION- Tên của BII có trong Gói bằng cách sử dụng
AppActionsWidgetExtension.
- Tên của BII có trong Gói bằng cách sử dụng
hasBii=true- Kiểm tra xem có BII hay không.
params=Bundle[{aboutExerciseName=running}]- Một Bundle đặc biệt do Hành động trong ứng dụng tạo ra sẽ được lồng bên trong các lựa chọn về tiện ích
Bundle. Nó chứa các cặp khoá/giá trị của BII. Trong trường hợp này, giá trịrunningđược trích xuất từ cụm từ tìm kiếm mẫu "Ok Google, cho tôi xem số liệu thống kê về hoạt động chạy của tôi trên ExampleApp."
- Một Bundle đặc biệt do Hành động trong ứng dụng tạo ra sẽ được lồng bên trong các lựa chọn về tiện ích
isFallbackIntent=false- Kiểm tra sự hiện diện của các tham số BII bắt buộc trong ý định
Extras.
- Kiểm tra sự hiện diện của các tham số BII bắt buộc trong ý định
aboutExerciseName=running- Nhận giá trị ý định
ExtraschoaboutExerciseName.
- Nhận giá trị ý định
exerciseType=RUNNING- Sử dụng
aboutExerciseNameđể tra cứu đối tượng loại cơ sở dữ liệu tương ứng.
- Sử dụng
Giờ đây, khi lớp StatsWidget có thể xử lý dữ liệu ý định Android của Hành động trong ứng dụng, hãy cập nhật logic quy trình tạo tiện ích để kiểm tra xem tiện ích có được kích hoạt bởi một Hành động trong ứng dụng hay không.
- Trong
StatsWidget.kt, hãy thay thế hàmupdateAppWidget()bằng đoạn mã sau:// 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() }
Mã trước đó tham chiếu đến một hàm mới, observeAndUpdateRequestedExercise. Hàm này tạo dữ liệu tiện ích bằng cách sử dụng dữ liệu tham số exerciseType do ý định Android của Hành động trong ứng dụng truyền.
- Thêm hàm
observeAndUpdateRequestedExercisebằng mã sau:// 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() } } }
Trong đoạn mã trước, hãy sử dụng một lớp repository hiện có trong ứng dụng để truy xuất dữ liệu về hoạt động thể dục từ cơ sở dữ liệu cục bộ của ứng dụng. Lớp này cung cấp một API giúp đơn giản hoá việc truy cập vào cơ sở dữ liệu. Kho lưu trữ hoạt động bằng cách hiển thị một đối tượng LiveData khi thực hiện các truy vấn đối với cơ sở dữ liệu. Trong mã của bạn, bạn quan sát LiveData này để truy xuất hoạt động thể dục mới nhất.
Bật TTS
Bạn có thể cung cấp một chuỗi TTS để Trợ lý thông báo khi hiện tiện ích của bạn. Bạn nên thêm thuộc tính này để cung cấp ngữ cảnh có thể nghe được cho các tiện ích. Chức năng này được cung cấp bởi thư viện mở rộng tiện ích của Hành động trong ứng dụng, cho phép bạn đặt văn bản và phần giới thiệu TTS đi kèm với tiện ích của bạn trong Trợ lý.
Một vị trí phù hợp để cung cấp phần giới thiệu TTS là trong hàm formatDataAndSetWidget. Hàm này định dạng dữ liệu hoạt động được trả về từ cơ sở dữ liệu ứng dụng.
- Trong
StatsWidget.kt, hãy thêm mã này vào hàmformatDataAndSetWidget:// 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) } }
Mã trên tham chiếu đến 2 tài nguyên chuỗi: một cho lời nói và một cho văn bản. Hãy xem phần Đề xuất về kiểu chuyển văn bản sang lời nói trong video về các tiện ích của chúng tôi để biết các đề xuất về TTS. Mẫu này cũng đề cập đến setTts, một hàm mới cung cấp thông tin TTS cho phiên bản tiện ích.
- Thêm hàm
setTtsmới này vàoStatsWidget.ktbằng mã sau:// 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) }
Cuối cùng, hãy hoàn tất logic TTS bằng cách đặt thông tin TTS khi cơ sở dữ liệu bài tập trả về dữ liệu trống cho một loại bài tập được yêu cầu.
- Cập nhật hàm
setNoActivityDataWidget()trongStatsWidget.ktbằng mã sau:// 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. Kiểm thử Hành động trong ứng dụng
Trong quá trình phát triển, hãy sử dụng trình bổ trợ Trợ lý Google để xem trước Hành động trong ứng dụng của Trợ lý trên một thiết bị thử nghiệm. Bạn có thể điều chỉnh các tham số ý định cho một Hành động trong ứng dụng bằng công cụ này để kiểm thử cách hành động của bạn xử lý nhiều cách mà người dùng có thể yêu cầu Trợ lý kích hoạt hành động đó.
Tạo bản xem trước
Cách kiểm thử Hành động trong ứng dụng bằng trình bổ trợ:
- Chuyển đến phần Công cụ > Trợ lý Google > Công cụ kiểm tra hành động trong ứng dụng. Bạn có thể được yêu cầu đăng nhập vào Android Studio bằng Tài khoản Google của mình.
- Nhấp vào Tạo bản xem trước. Nếu được yêu cầu, hãy xem xét và chấp nhận các chính sách và điều khoản dịch vụ về Hành động trong ứng dụng.
Kiểm thử một loại bài tập dự kiến
Trả về một tiện ích cho biết thông tin về lần chạy gần đây nhất đã hoàn tất trong ứng dụng bằng cách làm theo các bước sau trong công cụ kiểm thử:
- Ở bước đầu tiên khi công cụ yêu cầu bạn chọn và định cấu hình một BII, hãy chọn
actions.intent.GET_EXERCISE_OBSERVATION. - Trong hộp exerciseObservation, hãy cập nhật tên Bài tập mặc định từ
climbingthànhrun. - Nhấp vào Run App Action (Chạy thao tác trên ứng dụng).

Kiểm thử một loại bài tập không mong muốn
Cách kiểm thử một loại bài tập thể dục không mong muốn trong công cụ kiểm thử:
- Trong hộp exerciseObservation, hãy cập nhật giá trị
nametừRunthànhClimbing. - Nhấp vào Run App Action (Chạy thao tác trên ứng dụng).
Trợ lý sẽ trả về một tiện ích hiển thị thông tin "Không tìm thấy hoạt động".

Kiểm thử ý định dự phòng
Các truy vấn kích hoạt ý định dự phòng sẽ trả về một tiện ích hiển thị thông tin về hoạt động đã ghi nhật ký gần đây nhất của mọi loại bài tập.
Cách kiểm thử ý định dự phòng:
- Trong hộp exerciseObservation, hãy xoá đối tượng
aboutExercise. - Nhấp vào Run App Action (Chạy thao tác trên ứng dụng).
Trợ lý sẽ trả về một tiện ích hiển thị thông tin về bài tập đã hoàn thành gần đây nhất.

7. Các bước tiếp theo
Xin chúc mừng!
Giờ đây, bạn có thể đáp ứng các truy vấn của người dùng bằng Tiện ích Android thông qua Trợ lý.
Nội dung đã đề cập
Trong lớp học lập trình này, bạn đã tìm hiểu cách:
- Thêm tiện ích ứng dụng vào BII.
- Sửa đổi một tiện ích để truy cập vào các tham số từ Android Extras.
Bước tiếp theo
Từ đây, bạn có thể thử tinh chỉnh thêm cho ứng dụng thể dục của mình. Để tham khảo dự án đã hoàn thành, hãy xem kho lưu trữ chính trên GitHub.
Sau đây là một số đề xuất để bạn tìm hiểu thêm về việc mở rộng ứng dụng này bằng Hành động trong ứng dụng:
- Hãy truy cập vào tài liệu tham khảo về ý định tích hợp của Hành động trong ứng dụng để khám phá thêm nhiều cách mở rộng ứng dụng của bạn cho Trợ lý.
Để tiếp tục hành trình của bạn trên Actions on Google, hãy khám phá những tài nguyên sau:
- developers.google.com/assistant/app: Trang web tài liệu chính thức về Hành động trong ứng dụng của Trợ lý Google.
- Chỉ mục mẫu về Hành động trong ứng dụng: Ứng dụng và mã mẫu để khám phá các chức năng của Hành động trong ứng dụng.
- Kho lưu trữ Actions on Google trên GitHub: Mã mẫu và thư viện.
- r/GoogleAssistantDev: Cộng đồng Reddit chính thức dành cho các nhà phát triển làm việc với Trợ lý Google.
Theo dõi chúng tôi trên Twitter @ActionsOnGoogle để nắm bắt những thông báo mới nhất của chúng tôi, đồng thời đăng bài lên Twitter kèm theo thẻ hashtag #appactions để chia sẻ những gì bạn đã tạo!
Khảo sát nhận phản hồi
Cuối cùng, vui lòng điền vào bản khảo sát này để đưa ra ý kiến phản hồi về trải nghiệm của bạn với lớp học lập trình này.