Hành động trong ứng dụng cho phép người dùng nói chuyện với Trợ lý Google và chuyển đến các đích cụ thể trong ứng dụng khi họ nói những câu chẳng hạn như: "Ok Google, hãy đặt xe trên ứng dụng Example App". Với lệnh gọi ứng dụng trên nền trước, bạn có thể cải thiện trải nghiệm sử dụng ngay cả khi người dùng đã mở ứng dụng.
Lệnh gọi ứng dụng trên nền trước hỗ trợ đối sánh ý định tích hợp (BII) mà không yêu cầu đề cập đến tên ứng dụng trong khi một hoạt động cụ thể diễn ra trên nền trước của thiết bị.
Ví dụ: một người dùng mở ứng dụng có dịch vụ đi chung xe ở chế độ nền trước và nói hoặc nhập: "Hãy đặt cho tôi một chuyến xe đến Mountain View" để yêu cầu Trợ lý Google. Ứng dụng sử dụng thông tin đầu vào này để đặt trường đích đến thành Mountain View. Sau đó, khi người dùng nói hoặc nhập: "Hãy đặt cho tôi một chuyến xe từ SFO", ứng dụng có thể thiết lập vị trí đón khách mà vẫn giữ nguyên trạng thái ứng dụng.
Hạn chế
Lệnh gọi ứng dụng trên nền trước chỉ dành cho các BII sau:
actions.intent.CREATE_MONEY_TRANSFER
actions.intent.CREATE_TAXI_RESERVATION
actions.intent.OPEN_APP_FEATURE
actions.intent.ORDER_MENU_ITEM
actions.intent.PAUSE_EXERCISE
actions.intent.RECORD_EXERCISE
actions.intent.RECORD_FOOD_OBSERVATION
actions.intent.RESUME_EXERCISE
actions.intent.START_EXERCISE
actions.intent.STOP_EXERCISE
Để nhận hỗ trợ ngôn ngữ và truy vấn mẫu liên quan đến lệnh gọi ứng dụng trên nền trước cho một BII cụ thể, vui lòng xem phần tham chiếu ý định tích hợp sẵn.
Hỗ trợ gọi ứng dụng trên nền trước
Để tăng cường hỗ trợ việc gọi ứng dụng trên nền trước, bạn cần thêm phương thức thực hiện dựa vào hoạt động trên nền trước mà bạn muốn. Khi hoạt động đó ở nền trước và Hành động trong ứng dụng được gọi, Trợ lý sẽ chuyển ý định trong liên kết sâu bằng một lá cờ bổ sung để ứng dụng có thể cập nhật trạng thái của hoạt động đó.
Để triển khai lệnh gọi ứng dụng trên nền trước cho BII, hãy làm như sau:
- Trong tệp
shortcuts.xml
, hãy thêm thẻ<intent>
vào BII<capability>
mà bạn muốn hỗ trợ lệnh gọi ứng dụng trên nền trước. - Trong thẻ
<intent>
, hãy thêm một thẻ<extra>
. - Trong thẻ
<extra>
, hãy đặtandroid:key
thành"requiredForegroundActivity"
, và đặtandroid:value
thành hoạt động bạn yêu cầu ở nền trước. Chỉ định hoạt động mà không cần bất kỳ chữ viết tắt nào của lớp bằng cách dùng tên gói ứng dụng, theo sau là dấu gạch chéo lên (/), kế tiếp là tên của hoạt động:APP_PACKAGE_NAME/ACTIVITY_NAME
- Trong hoạt động ở nền trước mà bạn đã chỉ định cho
"requiredForegroundActivity"
, hãy triển khai phương thứconNewIntent()
để xử lý ý định liên kết sâu bằng tập hợp cờSINGLE_TOP
. Trợ lý sẽ chuyển ý định liên kết sâu bằng cách gắn cờ này làm phương thức thực hiện khi hoạt động được chỉ định ở nền trước. - Coi các lệnh gọi đến
onNewIntent()
dưới dạng nội dung cập nhật cho hoạt động trên nền trước và quản lý trạng thái trong hoạt động đó bằng cách sử dụng các tham số trích xuất từ liên kết sâu.
Nếu ứng dụng dùng hoạt động liên quan đến bộ định tuyến để cho phép tất cả đường liên kết sâu bên ngoài kích hoạt một hoạt động của bộ định tuyến có cổng bảo vệ, vui lòng xem phần Xử lý hoạt động liên quan đến bộ định tuyến.
Ví dụ
Đoạn mã sau của một tệp shortcuts.xml
ví dụ cho biết cách thêm thuộc tính requiredForegroundActivity
:
<capability name="actions.intent.CREATE_TAXI_RESERVATION"> <!-- Trigger with foreground app invocation if MainActivity is in the foreground. --> <intent android:targetClass="com.example.app.MainActivity" android:targetPackage="com.example.app"> <parameter android:name="taxiReservation.dropoffLocation.name" android:key="dropoff" /> <extra android:key="requiredForegroundActivity" android:value="com.example.app/com.example.app.MainActivity" /> </intent> <!-- This won't trigger if MainActivity is in the foreground. --> <intent android:targetClass="com.example.app.MainActivity" android:targetPackage="com.example.app"> <parameter android:name="taxiReservation.dropoffLocation.name" android:key="dropoff" /> </intent> </capability>
Quyền của người dùng
![Trong chế độ cài đặt thiết bị, người dùng phải bật chế độ "Use text from screen" ("Sử dụng văn bản trên màn hình") để lệnh gọi ứng dụng trên nền trước có thể hoạt động.](https://developer.android.google.cn/static/guide/app-actions/images/device-setting-assist-screen.png?authuser=9&hl=vi)
Để lệnh gọi ứng dụng trên nền trước hoạt động, người dùng phải bật chế độ cài đặt Sử dụng văn bản trên màn hình. Vị trí và tên chính xác của chế độ cài đặt này có thể khác nhau tuỳ theo Nhà sản xuất thiết bị gốc (OEM) hoặc nhà sản xuất thiết bị. Ví dụ: chế độ cài đặt thiết bị này có thể được gọi là Sử dụng ngữ cảnh trên màn hình.
Để truy cập vào phần cài đặt Android này trên điện thoại Pixel, trước tiên, hãy chuyển đến phần Cài đặt > Ứng dụng và thông báo > Ứng dụng mặc định > Hỗ trợ ứng dụng . Sau đó, trên màn hình Hỗ trợ và nhập bằng giọng nói, hãy bật lựa chọn Sử dụng văn bản trên màn hình.
Kiểm thử lệnh gọi
Để kiểm thử lệnh gọi ứng dụng trên nền trước, hãy làm theo các bước sau:
- Làm theo hướng dẫn trong phần Quyền của người dùng để bật chế độ cài đặt Sử dụng văn bản trên màn hình cho thiết bị.
- Mở ứng dụng theo hoạt động bạn đã liệt kê là hoạt động trên nền trước bắt buộc.
- Nhấn và giữ nút màn hình chính để mở Trợ lý dưới dạng một lớp phủ trên ứng dụng hiện tại. Cung cấp truy vấn tương ứng với BII bạn đã triển khai mà không đề cập đến chính tên ứng dụng. Khi thành công, ứng dụng sẽ tự cập nhật dựa trên truy vấn của bạn trong khi vẫn duy trì trạng thái không cần bắt đầu lại hoạt động.
Xử lý các hoạt động liên quan đến bộ định tuyến
Một số ứng dụng xử lý tất cả các liên kết sâu bên ngoài bằng một hoạt động của bộ định tuyến có cổng bảo vệ. Sau đó, hoạt động liên quan đến bộ định tuyến sẽ bắt đầu hoạt động logic của kinh doanh (sau khi kiểm tra và xác thực) rồi trả về hoạt động logic của kinh doanh ở nền trước.
Việc kích hoạt một liên kết sâu có thể khiến hoạt động liên quan đến bộ định tuyến được thêm vào đầu ngăn xếp tác vụ phía trên hoạt động ở nền trước. Đối với các ứng dụng dùng hoạt động liên quan đến bộ định tuyến, bạn phải đảm bảo rằng hoạt động của bộ định tuyến phân phối ý định do Trợ lý Google gửi đến thực thể hiện đang hoạt động ở nền trước. Cách bạn đáp ứng yêu cầu này sẽ thay đổi tùy thuộc vào nơi bắt đầu hoạt động liên quan đến bộ định tuyến.
Nếu bộ định tuyến của bạn bắt đầu ở cùng một ngăn xếp tác vụ như hoạt động logic của kinh doanh, hãy chuyển tiếp ý định bằng cách sử dụng bitwise HOẶC SINGLE_TOP
, CLEAR_TOP
và NEW_TASK
:
Kotlin
Intent.FLAG_ACTIVITY_SINGLE_TOP or Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK
Java
Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK
Nếu bộ định tuyến bắt đầu trong một ngăn xếp tác vụ riêng biệt với hoạt động logic của kinh doanh, hãy chuyển tiếp ý định có gắn cờ SINGLE_TOP
sang hoạt động logic kinh doanh.