1. Tổng quan
Ở 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 cho một ứng dụng thể dục mẫu bằng cách triển khai ý định tích hợp (BII) trong danh mục BII về Sức khoẻ và Thể hình.
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 qua Trợ lý bằng cách hỏi những câu như: "Ok Google, hãy 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ó tính tương tác cho người dùng để thực hiện các yêu cầu đối với các 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ẽ tìm hiểu 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 chuyển văn bản sang lời nói (TTS) trong Trợ lý cho các tiện ích của bạn.
- Sử dụng Tham chiếu ý định tích hợp để xác định BII nào 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 để phát triển Hành động trong ứng dụng. Mã này phải:
- Một thiết bị đầu cuối để chạy các lệnh shell, đã 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 ảo có khả năng truy cập Internet.
- Tài khoản Google dùng để đă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 khả năng hiểu ngôn ngữ tự nhiên (NLU) để đọc yêu cầu của người dùng rồi khớp yêu cầu đó với ý định tích hợp của Trợ lý (BII). Sau đó, Trợ lý sẽ ánh xạ ý định đến khả năng (sẽ triển khai BII) mà bạn đăng ký cho ý định đó trong ứng dụng. Cuối cùng, Trợ lý đá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 dựa trên 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 có thể đăng ký hỗ trợ cho BII GET_EXERCISE_OBSERVATION
. Trong khả 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 học này để tạo một tiện ích được cá nhân hoá cho Trợ lý để hiển thị với người dùng, cũng như phần giới thiệu TTS để Trợ lý thông báo.
Sơ đồ dưới đâ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ề bài tập thể dục 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 ứng viên tuyệt vời để 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 tiện ích này hoạt động
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 thiết bị broadcast receiver. Dịch vụ này truy xuất thông tin về tiện ích này từ định nghĩa trình thu nhận của tiện ích trong tài nguyên AndroidManifest.xml
của ứng dụng. Hàm 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 trình thu nhận widgets.StatsWidgetProvider
, 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ý quy trình tạo đối tượng StatsWidget
. Google Play xử lý 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 tập thể dục từ cơ sở dữ liệu ứng dụng vào các thực thể đó.
- Định dạng dữ liệu bài tập thể dục để dễ đọc hơn, bằng
formatDataAndSetWidget()
. - Cung cấp giá trị mặc định nếu không có dữ liệu tập luyện, bằng cách sử dụng
setNoActivityDataWidget()
.
Thêm khả 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 của 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 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ề các bài tập thể dục bằng cách hỏi những câu như "Ok Google, cho tôi xem số liệu thống kê về lần 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 bao gồm thông số loại bài tập thể dục.
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 bạn 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 Chào mừng bạn đến với Android Studio, hãy nhấp vào Nhập dự án.
- Tìm và chọn thư mục mà 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ách sử dụ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 và tránh việc "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
thành một giá trị độc đáo của riêng 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 của mình trên một thiết bị kiểm thử. 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 Plugins (Trình bổ trợ), hãy chọn Marketplace rồi tìm "Google Assistant". Bạn cũng có thể tải xuống 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 thay đổi nào đối với ứng dụng, bạn nên nắm được những việc mà ứng dụng mẫu có thể làm.
Chạy ứng dụng trên thiết bị kiểm thử:
- Trong Android Studio, hãy chọn thiết bị thực hoặc thiết bị ảo rồi chọn Run (Chạy) > Chạy ứng dụng hoặc nhấp vào biểu tượng 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 nhận rằng Trợ lý đang hoạt động. Bạn sẽ cần đăng nhập vào Trợ lý trên thiết bị nếu chưa đăng nhập.
Để biết thêm thông tin về thiết bị Android ảo, hãy xem nội dung Tạo và quản lý thiết bị ảo.
Khám phá nhanh ứng dụng để biết những tính năng của ứng dụng. Ứng dụng điền sẵn 10 hoạt động tập thể dục và hiện thông tin này trong chế độ xem đầu tiên.
Dùng thử tiện ích hiện có
- Nhấn vào nút Home (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ữ vào 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 đến FitActions.
- Nhấn và giữ biểu tượng FitActions rồi đặt tiện ích của ứng dụng này lên màn hình chính.
4. Thêm Hành động trong ứng dụng
Ở bước này, bạn thêm chức 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 trong shortcuts.xml
. Khả 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 Android nào cần gọi để thực hiện yêu cầu.
- Thêm một phần tử
capability
mới vào tài nguyênshortcuts.xml
của dự án mẫu bằng cấu hình này:
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_HERE
) bằngapplicationId
của riêng bạn.
Chức năng này ánh xạ BII GET_EXERCISE_OBSERVATION
với ý định app-widget
để khi BII được kích hoạt, tiện ích này sẽ tạo thực thể 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 thể dục mà người dùng yêu cầu. Ứng dụng hỗ trợ 3 loại bài tập thể dục: "chạy", "đ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ề các 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 tình huống không thể thực hiện truy vấn của người dùng vì truy vấn thiếu tham số mà chức năng yêu cầu. Chức năng GET_EXERCISE_OBSERVATION
yêu cầu tham số exerciseObservation.aboutExercise.name
, do thuộc tính android:required="true"
chỉ định. Đối với những trường hợp này, Trợ lý sẽ 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 khả năngGET_EXERCISE_OBSERVATION
bằng cách sử dụ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 tính năng GET_EXERCISE_OBSERVATION
, hãy cập nhật lớp tiện ích để hỗ trợ lời gọi thoại cho Hành động trong ứng dụng.
Thêm thư viện mở rộng tiện ích
Thư viện mở rộng tiện ích Hành động trong ứng dụng giúp cải thiện các tiện ích để mang đến trải nghiệm sử dụng Trợ lý cho tính năng chuyển tiếp bằng giọng nói. Cụ thể, nó cho phép bạn cung cấp phần giới thiệu TTS tùy chỉnh cho các tiện ích của bạn.
- Thêm phần phụ thuộc Thư viện mở rộng tiện ích vào tài nguyên
/app/build.gradle
của ứng dụng mẫu:
Nhấp vào Sync Now (Đồ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 thay đổi của// app/build.gradle dependencies { //... implementation "com.google.assistant.appactions:widgets:0.0.1" }
build.gradle
giúp bạn tránh 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 diễn ra trong thời gian 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.xml
củ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 khi truy vấn bằng giọng nói kích hoạt phương thức thực hiện tiện ích, Trợ lý sẽ sử dụng dịch vụ này để gửi yêu cầu đến ứng dụng. Dịch vụ nhận được yêu cầu cùng với dữ liệu BII. Dịch vụ sử dụng dữ liệu này nhằm tạo một đối tượng tiện ích RemoteView
để 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 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 thực thể 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.kt
rồi 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ư sau đây. Bạn có thể dùng các biến này 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 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 ý định Android do tính năng GET_EXERCISE_OBSERVATION
tạo:
optionsBundle
= Gói- Gói là các đối tượng dùng để vượt qua các ranh giới của 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 vào tiện ích.
- Gói là các đối tượng dùng để vượt qua các ranh giới của 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ó sẵn trong Gói bằng cách sử dụng
AppActionsWidgetExtension
.
- Tên của BII có sẵn 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 Gói đặc biệt do Hành động trong ứng dụng tạo ra sẽ được lồng bên trong các tuỳ chọn tiện ích
Bundle
. Lớp này 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ừ truy vấn 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 Gói đặc biệt do Hành động trong ứng dụng tạo ra sẽ được lồng bên trong các tuỳ chọn 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
Extras
choaboutExerciseName
.
- Nhận giá trị ý định
exerciseType
=RUNNING
- Sử dụng
aboutExerciseName
để tra cứu đối tượng kiểu cơ sở dữ liệu tương ứng.
- Sử dụng
Hiện tại, lớp StatsWidget
có thể xử lý dữ liệu ý định gọi đến về Hành động trong ứng dụng trên Android, hãy cập nhật logic quy trình tạo tiện ích để kiểm tra xem tiện ích đó có được Hành động trong ứng dụng kích hoạt hay không.
- Trong
StatsWidget.kt
, hãy thay thế hàmupdateAppWidget()
bằng 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 là 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
được truyền qua ý định trên Android cho Hành động trong ứng dụng.
- Thêm hàm
observeAndUpdateRequestedExercise
bằng mã này:// 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ên, hãy sử dụng một lớp kho lưu trữ có trong ứng dụng để truy xuất dữ liệu thể dục từ cơ sở dữ liệu cục bộ của ứng dụng. Lớp này cung cấp API đơn giản hoá quyền truy cập vào cơ sở dữ liệu. Kho lưu trữ hoạt động bằng cách hiển thị đối tượng LiveData khi thực hiện các truy vấn dựa trên cơ sở dữ liệu. Trong mã của mình, 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 tính năng này để cung cấp ngữ cảnh âm thanh cho tiện ích của mình. Chức năng này do Thư viện mở rộng tiện ích Hành động trong ứng dụng cung cấp. Thư viện này cho phép bạn thiết lập văn bản và phần giới thiệu TTS đi kèm với các tiện ích của bạn trong Trợ lý.
Bạn nên giới thiệu TTS 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. Xem phần Đề xuất kiểu chuyển văn bản sang lời nói trong video về tiện ích của chúng tôi cho các đề xuất 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 thực thể của tiện ích.
- Thêm hàm
setTts
mới này vàoStatsWidget.kt
bằng mã này:// 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 thiện 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 thể dục được yêu cầu.
- Cập nhật hàm
setNoActivityDataWidget()
trongStatsWidget.kt
bằng mã này:// 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 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ý các cách mà người dùng có thể yêu cầu Trợ lý chạy 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 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 lại và chấp nhận các chính sách cũng như điều khoản dịch vụ về Hành động trong ứng dụng.
Thử nghiệm một loại bài tập thể dục dự kiến
Trả về một tiện ích cho thấy 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 BII, hãy chọn
actions.intent.GET_EXERCISE_OBSERVATION
. - Trong hộp exerciseObservation (Quan sát bài tập), hãy cập nhật tên mặc định của Bài tập thể dục từ
climbing
thànhrun
. - Nhấp vào Run App Action (Chạy Hành động trong ứng dụng).
Thử nghiệm một loại bài tập thể dục ngoài dự kiến
Cách kiểm thử một loại bài tập không mong muốn trong công cụ kiểm thử:
- Trong hộp exerciseObservation, hãy cập nhật giá trị
name
từRun
thànhClimbing
. - Nhấp vào Run App Action (Chạy Hành động trong ứng dụng).
Trợ lý sẽ trả về một tiện ích hiển thị thông báo "Không tìm thấy hoạt động nào" của bạn.
Kiểm thử ý định dự phòng
Các truy vấn kích hoạt ý định dự phòng phải trả về một tiện ích hiển thị thông tin về hoạt động được ghi lại gần đây nhất thuộc mọi loại bài tập thể dục.
Cách kiểm tra ý định dự phòng:
- Trong hộp exerciseObservation, hãy xoá đối tượng
aboutExercise
. - Nhấp vào Run App Action (Chạy Hành động trong ứng dụng).
Trợ lý sẽ trả về một tiện ích hiển thị thông tin cho bài tập thể dục hoàn thành gần nhất.
7. Các bước tiếp theo
Xin chúc mừng!
Giờ đây, bạn có thể đáp ứng yêu cầu bằng cách sử dụng Tiện ích Android có 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 tiện ích để truy cập vào các tham số từ Android Extras.
Các bước tiếp theo
Từ đây, bạn có thể thử cải tiến thêm ứng dụng thể dục của mình. Để tham chiếu dự án đã hoàn tất, hãy xem kho lưu trữ chính trên GitHub.
Dưới đây là một số đề xuất để bạn tìm hiểu thêm về cách mở rộng ứng dụng này bằng Hành động trong ứng dụng:
- Hãy xem tài liệu tham khảo về các ý định tích hợp sẵn cho 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 sang Trợ lý.
Để tiếp tục hành trình Actions on Google, hãy khám phá các 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 của Hành động trong ứng dụng: Các ứ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 GitHub: Mã và thư viện mẫu.
- 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.
Hãy theo dõi chúng tôi trên Twitter @ActionsOnGoogle để luôn cập nhật những thông báo mới nhất của chúng tôi và đăng bài trên Twitter #appactions để chia sẻ những gì bạn đã xây dựng được!
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 khi tham gia lớp học lập trình này.