Android 6.0 Marshmallow giới thiệu một cách mới để người dùng tương tác với ứng dụng thông qua trợ lý ứng dụng, chẳng hạn như Google Trợ lý Google. Trợ lý là cửa sổ cấp cao nhất mà người dùng có thể xem để nhận theo ngữ cảnh hành động liên quan đối với hoạt động hiện tại. Những hành động này có thể bao gồm đường liên kết sâu đến các ứng dụng khác trên thiết bị.
Người dùng kích hoạt trợ lý bằng cách nhấn và giữ nút Màn hình chính hoặc bằng cách nói cụm từ khoá. Khi phản hồi, hệ thống sẽ mở một cửa sổ cấp cao nhất hiển thị theo ngữ cảnh hành động liên quan.
Ứng dụng trợ lý, chẳng hạn như Trợ lý Google, triển khai cửa sổ lớp phủ của trợ lý thông qua một có tên Now on Tap, hoạt động với chức năng cấp nền tảng Android. Hệ thống cho phép người dùng chọn một ứng dụng trợ lý. Ứng dụng này sẽ lấy thông tin theo bối cảnh từ ứng dụng của bạn bằng cách sử dụng API Hỗ trợ của Android.
Hướng dẫn này giải thích cách các ứng dụng Android sử dụng API Hỗ trợ của Android để cải thiện trợ lý trải nghiệm người dùng. Tìm hiểu cách tạo một ứng dụng đa phương tiện để Trợ lý có thể chạy và điều khiển, hãy xem phần Trợ lý Google và ứng dụng đa phương tiện.
Sử dụng Trợ lý
Hình 1 minh hoạ một hoạt động tương tác thông thường của người dùng với trợ lý. Khi người dùng nhấn và giữ nút Home (Màn hình chính), các lệnh gọi lại Assist API (API Hỗ trợ) sẽ được gọi trong ứng dụng nguồn (bước 1). Trợ lý kết xuất cửa sổ lớp phủ (bước 2 và 3), rồi người dùng chọn hành động cần thực hiện. Trợ lý thực thi hành động đã chọn, chẳng hạn như kích hoạt ý định bằng đường liên kết sâu đến ứng dụng nhà hàng (destination) (bước 4).
![](https://developer.android.com/static/images/training/assistant/image01.png?authuser=19&hl=vi)
Hình 1. Ví dụ về hoạt động tương tác của Trợ lý với tính năng Now on Tap của ứng dụng Google
Người dùng có thể định cấu hình trợ lý bằng cách chọn Cài đặt > Ứng dụng > Ứng dụng mặc định > Hỗ trợ và nhập bằng giọng nói. Người dùng có thể thay đổi các tuỳ chọn hệ thống như truy cập nội dung màn hình dưới dạng văn bản và truy cập vào ảnh chụp màn hình, như trong Hình 2.
![](https://developer.android.com/static/images/training/assistant/image02.png?authuser=19&hl=vi)
Hình 2. Hỗ trợ và cài đặt nhập bằng giọng nói
Ứng dụng nguồn
Để đảm bảo rằng ứng dụng của bạn hoạt động với trợ lý như một nguồn thông tin cho người dùng, bạn chỉ cần theo dõi giải pháp hỗ trợ tiếp cận . Phần này mô tả cách cung cấp thêm thông tin để giúp cải thiện trải nghiệm người dùng của Trợ lý cũng như các tình huống cần xử lý đặc biệt, chẳng hạn như Thành phần hiển thị tuỳ chỉnh.
Chia sẻ thông tin bổ sung với Trợ lý
Ngoài văn bản và ảnh chụp màn hình, ứng dụng của bạn có thể chia sẻ các thông tin khác mà Trợ lý tìm được. Ví dụ: nhạc của bạn ứng dụng có thể chọn truyền thông tin album hiện tại để trợ lý có thể đề xuất các hành động thông minh hơn phù hợp với hoạt động hiện tại. Lưu ý rằng API Hỗ trợ không cung cấp chức năng điều khiển nội dung nghe nhìn. Để thêm các chế độ điều khiển nội dung nghe nhìn, hãy xem Trợ lý Google và các ứng dụng nghe nhìn.
Để cung cấp thêm thông tin cho trợ lý, ứng dụng của bạn sẽ cung cấp ngữ cảnh ứng dụng chung bằng cách đăng ký trình nghe ứng dụng và cung cấp thông tin cụ thể về hoạt động thông qua các lệnh gọi lại hoạt động như minh hoạ trong Hình 3:
![](https://developer.android.com/static/images/training/assistant/image03.png?authuser=19&hl=vi)
Hình 3. Sơ đồ trình tự vòng đời của API Hỗ trợ
Để cung cấp ngữ cảnh ứng dụng chung, ứng dụng sẽ tạo một phương thức triển khai
Application.OnProvideAssistDataListener
và đăng ký miền này
đang sử dụng registerOnProvideAssistDataListener()
.
Để cung cấp thông tin theo bối cảnh theo hoạt động cụ thể, hoạt động
ghi đè onProvideAssistData()
và onProvideAssistContent()
.
Hai phương thức hoạt động này được gọi sau lệnh thoại toàn cục không bắt buộc
hệ thống sẽ thực hiện lệnh gọi lại. Vì các lệnh gọi lại thực thi trên luồng chính, nên chúng phải
hoàn tất một cách kịp thời.
Các lệnh gọi lại chỉ được gọi khi hoạt động đang chạy.
Cung cấp bối cảnh
Khi người dùng kích hoạt trợ lý,
onProvideAssistData()
được gọi để tạo phiên bản đầy đủ
Ý định ACTION_ASSIST
với tất cả ngữ cảnh của
ứng dụng hiện tại được biểu thị dưới dạng một thực thể của AssistStructure
. Bạn có thể ghi đè phương pháp này để đặt
bất kỳ thứ gì bạn thích trong gói để xuất hiện trong
EXTRA_ASSIST_CONTEXT
của ý định hỗ trợ.
Mô tả nội dung
Ứng dụng của bạn có thể triển khai onProvideAssistContent()
để cải thiện trải nghiệm người dùng của Trợ lý bằng cách cung cấp các tài liệu tham khảo liên quan đến nội dung
liên quan đến hoạt động hiện tại. Bạn có thể mô tả nội dung ứng dụng bằng
từ vựng phổ biến do Schema.org xác định
thông qua đối tượng JSON-LD. Trong ví dụ dưới đây, ứng dụng âm nhạc cung cấp
dữ liệu có cấu trúc để mô tả đĩa nhạc mà người dùng đang lưu trữ
đang xem:
Kotlin
override fun onProvideAssistContent(assistContent: AssistContent) { super.onProvideAssistContent(assistContent) val structuredJson: String = JSONObject() .put("@type", "MusicRecording") .put("@id", "https://example.com/music/recording") .put("name", "Album Title") .toString() assistContent.structuredData = structuredJson }
Java
@Override public void onProvideAssistContent(AssistContent assistContent) { super.onProvideAssistContent(assistContent); String structuredJson = new JSONObject() .put("@type", "MusicRecording") .put("@id", "https://example.com/music/recording") .put("name", "Album Title") .toString(); assistContent.setStructuredData(structuredJson); }
Bạn cũng có thể cải thiện trải nghiệm người dùng bằng cách triển khai tuỳ chỉnh
onProvideAssistContent()
,
có thể mang lại các lợi ích sau:
- Điều chỉnh nội dung đã cung cấp ý định thành phản ánh chính xác hơn bối cảnh cấp cao nhất của hoạt động.
- Cung cấp URI của nội dung hiển thị.
- Điền vào
setClipData()
bằng các mục bổ sung nội dung ưa thích mà người dùng đang xem.
Lưu ý: Các ứng dụng sử dụng cách triển khai lựa chọn văn bản tuỳ chỉnh có thể cần
để triển khai onProvideAssistContent()
và gọi setClipData()
.
Cách triển khai mặc định
Nếu không phải onProvideAssistData()
hoặc onProvideAssistContent()
được triển khai, hệ thống vẫn tiếp tục và truyền hàm
thông tin được thu thập tự động cho Trợ lý trừ phi
được gắn cờ là bảo mật.
Như trong Hình 3, hệ thống sử dụng cách triển khai mặc định của onProvideStructure()
và onProvideVirtualStructure()
để
thu thập thông tin văn bản và hệ phân cấp khung hiển thị. Nếu khung hiển thị của bạn triển khai chế độ xem tuỳ chỉnh
bản vẽ văn bản, hãy ghi đè onProvideStructure()
để cung cấp
trợ lý kèm theo văn bản hiển thị cho người dùng bằng cách gọi setText(CharSequence)
.
Trong hầu hết các trường hợp, việc triển khai hỗ trợ tiếp cận cho phép để có được thông tin cần thiết. Để triển khai tính năng hỗ trợ tiếp cận, thực hiện theo các phương pháp hay nhất được mô tả trong phần Tạo ứng dụng Có thể tiếp cận, bao gồm:
- Cung cấp thuộc tính
android:contentDescription
. - Điền vào
AccessibilityNodeInfo
cho khung hiển thị tuỳ chỉnh. - Nhãn hiệu
đảm bảo các đối tượng
ViewGroup
tuỳ chỉnh được chọn đúng cách phơi bày con cái họ.
Loại trừ lượt xem khỏi trợ lý
Để xử lý thông tin nhạy cảm, ứng dụng của bạn có thể loại trừ chế độ xem hiện tại khỏi trợ lý
bằng cách đặt tham số bố cục FLAG_SECURE
của WindowManager
. Bạn phải đặt FLAG_SECURE
một cách rõ ràng cho
mọi cửa sổ do hoạt động tạo ra, bao gồm cả hộp thoại. Ứng dụng của bạn cũng có thể sử dụng
setSecure()
để loại trừ
một nền tảng thông qua Trợ lý. Không có
cơ chế chung (cấp ứng dụng) để loại trừ tất cả chế độ xem khỏi trợ lý. Ghi chú
rằng FLAG_SECURE
không khiến lệnh gọi lại API hỗ trợ dừng
đang kích hoạt. Hoạt động sử dụng FLAG_SECURE
vẫn có thể vẫn rõ ràng
cung cấp thông tin cho ứng dụng trợ lý bằng lệnh gọi lại như mô tả trước đó
hướng dẫn này.
Lưu ý: Đối với tài khoản doanh nghiệp (Android for Work),
quản trị viên có thể tắt
thu thập dữ liệu trợ lý cho hồ sơ công việc bằng cách sử dụng phương thức setScreenCaptureDisabled()
của API DevicePolicyManager
.
Tương tác bằng giọng nói
Lệnh gọi lại API hỗ trợ cũng được gọi dựa trên cụm từ khoá . Để biết thêm thông tin, hãy xem Giọng nói Tài liệu về Thao tác.
Những điểm cần lưu ý về thứ tự Z
Trợ lý dùng một cửa sổ lớp phủ nhẹ hiển thị ở trên cùng hoạt động hiện tại. Vì người dùng có thể kích hoạt trợ lý bất cứ lúc nào, không tạo vĩnh viễn cửa sổ cảnh báo hệ thống gây trở ngại cho cửa sổ lớp phủ, như minh hoạ trong Hình 4.
![](https://developer.android.com/static/images/training/assistant/image04.png?authuser=19&hl=vi)
Hình 4. Hỗ trợ thứ tự Z của lớp
Nếu ứng dụng của bạn sử dụng cửa sổ cảnh báo hệ thống, hãy gỡ bỏ chúng ngay lập tức vì để chúng trên làm giảm trải nghiệm người dùng.
Ứng dụng đích
Các ứng dụng Trợ lý thường tận dụng tính năng liên kết sâu để tìm các ứng dụng đích. Để giúp một ứng dụng đích tiềm năng, hãy cân nhắc việc thêm tính năng hỗ trợ liên kết sâu. Kiểu khớp giữa ngữ cảnh người dùng hiện tại và các liên kết sâu hoặc các hành động tiềm năng khác được hiển thị trong cửa sổ lớp phủ (hiển thị trong bước 3 trong Hình 1) dành riêng cho việc triển khai Trợ lý Google. Cho ví dụ: Ứng dụng Trợ lý Google sử dụng tính năng liên kết sâu và Đường liên kết ứng dụng để tăng lưu lượng truy cập đến các ứng dụng đích.
Triển khai Trợ lý của riêng bạn
Bạn nên triển khai trợ lý của riêng mình. Như minh hoạ trong Hình
2, người dùng có thể chọn ứng dụng trợ lý đang hoạt động. Chiến lược phát hành đĩa đơn
ứng dụng trợ lý phải cung cấp cách triển khai VoiceInteractionSessionService
và VoiceInteractionSession
như minh hoạ trong
ví dụ về VoiceInteraction
này. Ứng dụng này cũng yêu cầu quyền BIND_VOICE_INTERACTION
. Sau đó, trợ lý có thể
nhận văn bản và hệ phân cấp khung hiển thị được biểu thị dưới dạng thực thể của AssistStructure
trong onHandleAssist()
.
Ứng dụng nhận được ảnh chụp màn hình thông qua onHandleScreenshot()
.