Để triển khai Ứng dụng tương tác bằng giọng nói (VIA), bạn cần hoàn tất các bước sau:
- Tạo bộ xương VIA.
- (không bắt buộc) Triển khai quy trình thiết lập/đăng nhập.
- (không bắt buộc) Triển khai màn hình Cài đặt.
- Khai báo các quyền cần thiết trong tệp kê khai.
- Triển khai giao diện người dùng bản ghi giọng nói.
- Triển khai tính năng nhận dạng giọng nói (phải bao gồm triển khai RecognitionService API).
- Triển khai cách phát âm (không bắt buộc, bạn có thể triển khai API TextTospeech).
- Triển khai phương thức thực hiện lệnh. Xem nội dung này bằng Thực hiện lệnh.
Các phần sau đây mô tả cách hoàn thành từng bước nêu trên.
Tạo bộ xương VIA
Tệp kê khai
Một ứng dụng được phát hiện là ứng dụng có tính năng Tương tác bằng giọng nói khi: có trong tệp kê khai:
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myvoicecontrol"> ... <application ... > <service android:name=".MyInteractionService" android:label="@string/app_name" android:permission="android.permission.BIND_VOICE_INTERACTION" android:process=":interactor"> <meta-data android:name="android.voice_interaction" android:resource="@xml/interaction_service" /> <intent-filter> <action android:name= "android.service.voice.VoiceInteractionService" /> </intent-filter> </service> </application> </manifest>
Trong ví dụ này:
- VIA phải hiển thị một dịch vụ mở rộng
VoiceInteractionService
, với bộ lọc ý định cho thao tácVoiceInteractionService.SERVICE_INTERFACE ("android.service.voice.VoiceInteractionService")
. - Dịch vụ này phải có quyền chữ ký hệ thống
BIND_VOICE_INTERACTION
. - Dịch vụ này phải bao gồm một tệp siêu dữ liệu
android.voice_interaction
chứa những thông tin sau:res/xml/tương tác_service.xml
<voice-interaction-service xmlns:android="http://schemas.android.com/apk/res/android" android:sessionService= "com.example.MyInteractionSessionService" android:recognitionService= "com.example.MyRecognitionService" android:settingsActivity= "com.example.MySettingsActivity" android:supportsAssist="true" android:supportsLaunchVoiceAssistFromKeyguard="true" android:supportsLocalInteraction="true" />
Để biết thông tin chi tiết về từng trường, hãy xem R.styleable#VoiceInteractionService
.
Vì tất cả các VIA đều là dịch vụ nhận dạng giọng nói, bạn cũng phải
đưa nội dung sau vào tệp kê khai:
AndroidManifest.xml
<manifest ...> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <application ...> ... <service android:name=".RecognitionService" ...> <intent-filter> <action android:name="android.speech.RecognitionService" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <meta-data android:name="android.speech" android:resource="@xml/recognition_service" /> </service> </application> </manifest>
Các dịch vụ nhận dạng giọng nói cũng yêu cầu phần siêu dữ liệu sau:
res/xml/recognition_service.xml
<recognition-service xmlns:android="http://schemas.android.com/apk/res/android" android:settingsActivity="com.example.MyRecognizerSettingsActivity" />
VoiceInteractionsService, VoiceVisibilitySessionService và Voice mạoSession
Sơ đồ dưới đây mô tả vòng đời của từng thực thể:
Hình 1. Lifecycles
Như đã đề cập trước đó, VoiceInteractionService
là điểm truy cập
thành VIA. Trách nhiệm chính của dịch vụ này là:
- Khởi chạy mọi quy trình sẽ tiếp tục chạy miễn là VIA này là mã đang hoạt động. Ví dụ: phát hiện cụm từ kích hoạt.
- Báo cáo thao tác bằng giọng nói được hỗ trợ (xem phần Nhấn để đọc của Trợ lý thoại).
- Khởi chạy các phiên tương tác bằng giọng nói từ màn hình khoá (bảo vệ bàn phím).
Trong hình thức đơn giản nhất, việc triển khai Voice chìService sẽ trông như sau:
public class MyVoiceInteractionService extends VoiceInteractionService { private static final List<String> SUPPORTED_VOICE_ACTIONS = Arrays.asList( CarVoiceInteractionSession.VOICE_ACTION_READ_NOTIFICATION, CarVoiceInteractionSession.VOICE_ACTION_REPLY_NOTIFICATION, CarVoiceInteractionSession.VOICE_ACTION_HANDLE_EXCEPTION ); @Override public void onReady() { super.onReady(); // TODO: Setup hotword detector } @NonNull @Override public Set<String> onGetSupportedVoiceActions( @NonNull Set<String> voiceActions) { Set<String> result = new HashSet<>(voiceActions); result.retainAll(SUPPORTED_VOICE_ACTIONS); return result; } ... }
Việc triển khai VoiceInteractionService#onGetSupportedVoiceActions()
là
cần thiết để xử lý
Nhấn để đọc của Trợ lý thoại.
Hệ thống dùng VoiceVoiceSessionService để tạo và
tương tác với một VoiceShareSession. Chiến dịch chỉ có một trách nhiệm,
để bắt đầu các phiên mới khi được yêu cầu.
public class MyVoiceInteractionSessionService extends VoiceInteractionSessionService { @Override public VoiceInteractionSession onNewSession(Bundle args) { return new MyVoiceInteractionSession(this); } }
Cuối cùng, VoiceVoiceSession là nơi hầu hết hoạt động
sẽ hoàn thành. Một phiên bản duy nhất có thể được sử dụng lại để hoàn tất nhiều phiên
tương tác của người dùng. Trong AAOS, có một trình trợ giúp CarVoiceInteractionSession
,
hỗ trợ triển khai một số chức năng độc đáo trên ô tô.
public class MyVoiceInteractionSession extends CarVoiceInteractionSession { public InteractionSession(Context context) { super(context); } @Override protected void onShow(String action, Bundle args, int showFlags) { closeSystemDialogs(); // TODO: Unhide UI and update UI state // TODO: Start processing audio input } ... }
VoiceInteractionSession
có một tập hợp lớn các phương thức gọi lại
được giải thích trong các phần sau. hãy xem danh sách đầy đủ trong tài liệu VoiceInteractionSession
.
Triển khai quy trình thiết lập/đăng nhập
Quá trình thiết lập và đăng nhập có thể diễn ra:
- Trong quá trình làm quen với thiết bị (Trình hướng dẫn thiết lập).
- Trong quá trình hoán đổi dịch vụ tương tác bằng giọng nói (Cài đặt).
- Vào lần khởi chạy đầu tiên khi ứng dụng được chọn.
Để biết thông tin chi tiết về trải nghiệm người dùng được đề xuất và hướng dẫn bằng hình ảnh, hãy xem Các Trợ lý có sẵn: Hướng dẫn về trải nghiệm người dùng.
Thiết lập trong khi hoán đổi dịch vụ thoại
Người dùng luôn có thể chọn VIA không đúng cách đã định cấu hình. Điều này có thể xảy ra do:
- Người dùng đã bỏ qua hoàn toàn Trình hướng dẫn thiết lập hoặc bỏ qua giọng nói bước định cấu hình tương tác.
- Người dùng đã chọn VIA khác với chế độ được định cấu hình trong thiết bị làm quen với ứng dụng.
Trong mọi trường hợp, VoiceInteractionService
vẫn có một số cách để khuyến khích người dùng
để hoàn tất quá trình thiết lập:
- Lời nhắc thông báo.
- Trả lời tự động bằng giọng nói khi người dùng cố gắng sử dụng tính năng này.
Lưu ý: Bạn không nên trình bày quy trình thiết lập VIA mà không có yêu cầu rõ ràng của người dùng. Điều này có nghĩa là VIA nên tránh tự động hiển thị nội dung trên HU trong khi khởi động thiết bị hoặc do việc chuyển đổi của người dùng hoặc mở khóa.
Lời nhắc về thông báo
Lời nhắc thông báo là một cách không xâm phạm để cho biết nhu cầu thiết lập, và cung cấp cho người dùng một thuộc tính tương tác để chuyển đến phần thiết lập Trợ lý luồng.
Hình 2. Lời nhắc về thông báo
Dưới đây là cách quy trình này hoạt động:
Hình 3. Quy trình nhắc nhở về thông báo
Trả lời bằng giọng nói
Đây là quy trình đơn giản nhất để thực hiện, bắt đầu phát âm trên
lệnh gọi lại VoiceInteractionSession#onShow()
, giải thích cho người dùng những gì
cần thực hiện, sau đó yêu cầu họ (nếu được thiết lập nhờ trạng thái Hạn chế trải nghiệm người dùng)
nếu họ muốn bắt đầu quy trình thiết lập. Nếu bạn không thể thiết lập vào lúc này, hãy giải thích điều này
trong tình huống cụ thể.
Thiết lập trong lần sử dụng đầu tiên
Người dùng luôn có thể kích hoạt VIA không đúng cách đã định cấu hình. Trong những trường hợp như vậy:
- Thông báo cho người dùng về tình huống này (ví dụ: "Để làm việc đúng cách, Tôi cần bạn hoàn thành một vài bước ... ").
- Nếu công cụ hạn chế trải nghiệm người dùng cho phép (xem UX_RestrictS_NO_setup), hãy hỏi xem người dùng có muốn khởi động quá trình thiết lập rồi mở màn hình Cài đặt cho VIA.
- Nếu không (ví dụ: nếu người dùng đang lái xe), hãy để lại thông báo để người dùng hãy nhấp vào tuỳ chọn đó khi thấy an toàn.
Tạo màn hình thiết lập tương tác bằng giọng nói
Màn hình thiết lập và đăng nhập nên được phát triển dưới dạng hoạt động thông thường. Xem nguyên tắc về trải nghiệm người dùng và hình ảnh để phát triển giao diện người dùng trong Các Trợ lý có sẵn: Hướng dẫn về trải nghiệm người dùng.
Nguyên tắc chung:
- VIA phải cho phép người dùng gián đoạn và tiếp tục thiết lập bất cứ lúc nào.
- Bạn không được phép thiết lập nếu quy định hạn chế về
UX_RESTRICTIONS_NO_SETUP
đang có hiệu lực. Để biết thông tin chi tiết, hãy xem Nguyên tắc để mất sự phân tâm của người lái xe. - Màn hình thiết lập phải khớp với hệ thống thiết kế của từng chiếc xe. Màn hình chung bố cục, biểu tượng, màu sắc và các thành phần khác phải nhất quán với phần còn lại của giao diện người dùng. Xem Tuỳ chỉnh để biết thông tin chi tiết.
Triển khai màn hình cài đặt
Hình 4. Tích hợp chế độ cài đặt
Màn hình Cài đặt là các hoạt động thông thường trên Android. Nếu được triển khai, điểm truy cập của người dùng
phải được khai báo trong res/xml/interaction_service.xml
như một phần của VIA
tệp kê khai (xem
Tệp kê khai).
Phần Cài đặt là nơi tốt để tiếp tục quá trình thiết lập và đăng nhập (nếu người dùng chưa hoàn tất
đăng xuất) hoặc cung cấp tuỳ chọn đăng xuất hay chuyển đổi người dùng nếu cần. Tương tự như thiết lập
các màn hình được mô tả ở trên, những màn hình này sẽ:
- Cung cấp tuỳ chọn để quay lại màn hình trước trong ngăn xếp màn hình (ví dụ: trong phần Cài đặt trên ô tô).
- Không được phép lái xe. Để biết thêm chi tiết, hãy xem Nguyên tắc đối với sự phân tâm của người lái xe.
- So khớp từng hệ thống thiết kế của xe. Để biết thông tin chi tiết, hãy xem Tuỳ chỉnh.
Khai báo các quyền bắt buộc trong tệp kê khai
Các quyền mà VIA yêu cầu có thể được chia thành 3 loại:
- Quyền chữ ký hệ thống. Đây là các quyền chỉ được cấp cho APK được cài đặt trước, do hệ thống ký. Người dùng không thể cấp quyền những quyền này, thì chỉ OEM mới có thể cấp những quyền đó khi xây dựng hình ảnh hệ thống. Để biết thêm thông tin về cách có được quyền chữ ký, hãy xem Cấp quyền đặc quyền của hệ thống.
- Các quyền nguy hiểm. Đây là những quyền mà người dùng phải có cấp quyền thông qua hộp thoại PermissionsController. OEM có thể cấp trước một số thuộc tính này các quyền đối với VoiceShareService mặc định. Nhưng với điều kiện là chế độ mặc định này có thể thay đổi giữa các thiết bị, các ứng dụng sẽ có thể yêu cầu những điều này khi cần.
- Các quyền khác. Đây là tất cả các quyền khác không cần sự can thiệp của người dùng. Các quyền này được cấp tự động bị hệ thống tạo ra.
Do đó, phần sau chỉ tập trung vào việc yêu cầu quyền nguy hiểm. Bạn chỉ nên yêu cầu cấp quyền khi người dùng trên màn hình đăng nhập hoặc màn hình cài đặt.
Nếu ứng dụng không có các quyền cần thiết để hoạt động, quy trình nên dùng là sử dụng giọng nói để giải thích tình huống cho người dùng và một thông báo cung cấp một thuộc tính tương tác mà người dùng có thể sử dụng hãy quay lại màn hình cài đặt VIA. Để biết chi tiết, hãy xem 1. Lời nhắc nhận thông báo.
Yêu cầu cấp quyền trong màn hình cài đặt
Các quyền nguy hiểm được yêu cầu bằng phương thức ActivityCompat#requestPermission()
thông thường (hoặc tương đương). Để biết thông tin chi tiết về cách yêu cầu cấp quyền, hãy xem
Yêu cầu quyền cho ứng dụng.
Hình 5. Yêu cầu cấp quyền
Quyền trình nghe thông báo
Để triển khai quy trình TTR, VIA phải được chỉ định là trình nghe thông báo. Đây không phải là một quyền riêng, mà là cho phép hệ thống gửi thông báo đến những người dùng đã đăng ký người nghe. Để tìm hiểu xem VIA có được cấp quyền truy cập vào thông tin này hay không, các ứng dụng có thể:
- (Không bắt buộc) Kiểm tra xem có trình nghe thông báo trước hay không bằng cách sử dụng
CarAssistUtils#assistantIsNotificationListener()
. Bạn có thể thực hiện điều này, chẳng hạn như trong quá trình thiết lập. - (Bắt buộc) Phản ứng bằng cách xử lý
CarVoiceInteractionSession#onShow()
VOICE_ACTION_HANDLE_EXCEPTION
và ngoại lệEXCEPTION_NOTIFICATION_LISTENER_PERMISSIONS_MISSING
.
Nếu quyền truy cập này không được cấp trước, VIA phải chuyển hướng người dùng đến Mục Quyền truy cập vào thông báo trong phần Cài đặt ô tô, sử dụng kết hợp các cách phát âm và thông báo. Bạn có thể dùng mã sau để mở phần thích hợp của ứng dụng cài đặt:
private void requestNotificationListenerAccess() { Intent intent = new Intent(Settings .ACTION_NOTIFICATION_LISTENER_SETTINGS); intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName()); startActivity(intent); }
Triển khai giao diện người dùng mảng giọng nói
Khi một VoiceInteractionSession
nhận được lệnh gọi lại onShow()
,
có thể trình bày giao diện người dùng bảng điều khiển giọng nói. Để biết các nguyên tắc về hình ảnh và trải nghiệm người dùng khi triển khai mẫu giọng nói,hãy xem
Các Trợ lý có sẵn: Hướng dẫn về trải nghiệm người dùng.
Hình 6. Đang hiện tấm giọng nói
Có hai cách để triển khai giao diện người dùng này:
- Ghi đè
VoiceInteractionSession#onCreateContentView()
- Chạy một hoạt động bằng
VoiceInteractionSession#startAssistantActivity()
Sử dụng onCreateContentView()
Đây là cách mặc định để trình bày bảng âm thanh. VoiceInteractionSession
lớp cơ sở sẽ tạo một cửa sổ và quản lý vòng đời của cửa sổ đó miễn là một giọng nói
phiên hoạt động vẫn đang diễn ra. Ứng dụng phải ghi đè VoiceInteractionSession#onCreateContentView()
và trả về một khung hiển thị được đính kèm vào cửa sổ đó ngay khi phiên hoạt động bắt đầu
đã tạo. Chế độ xem này ban đầu sẽ không hiển thị. Khi một tương tác bằng giọng nói bắt đầu,
chế độ xem này sẽ được hiển thị trên VoiceInteractionSession#onShow()
sau đó lại ẩn đi vào VoiceInteractionSession#onHide()
.
public class MyVoiceInteractionSession extends CarVoiceInteractionSession { private View mVoicePlate; … @Override public View onCreateContentView() { mVoicePlate = inflater.inflate(R.layout.voice_plate, null); … } @Override protected void onShow(String action, Bundle args, int showFlags) { // TODO: Update UI state to "listening" mVoicePlate.setVisibility(View.VISIBLE); } @Override public void onHide() { mVoicePlate.setVisibility(View.GONE); } … }
Khi sử dụng phương thức này, bạn nên điều chỉnh VoiceInteractionSession#onComputeInsets()
để tính đến các vùng bị che khuất trên giao diện người dùng.
Sử dụng startAssistantActivity()
Trong trường hợp này, VoiceInteractionSession
uỷ quyền xử lý giọng nói
chuyển giao diện người dùng thành một hoạt động thông thường. Khi bạn sử dụng tuỳ chọn này, VoiceInteractionSession
Phải tắt tính năng tạo cửa sổ nội dung mặc định (xem phần Sử dụng onCreateContentView()) trên onPrepareShow()
. Lúc VoiceInteractionSession#onShow()
, phiên sẽ bắt đầu giọng nói
hoạt động của mảng bằng VoiceInteractionSession#startAssistantActivity()
. Chiến dịch này
sẽ bắt đầu giao diện người dùng với các cờ hoạt động và chế độ cài đặt cửa sổ thích hợp.
public class MyVoiceInteractionSession extends CarVoiceInteractionSession { … @Override public void onPrepareShow(Bundle args, int showFlags) { super.onPrepareShow(args, showFlags); setUiEnabled(false); } @Override protected void onShow(String action, Bundle args, int showFlags) { closeSystemDialogs(); Intent intent = new Intent(getContext(), VoicePlateActivity.class); intent.putExtra(VoicePlateActivity.EXTRA_ACTION, action); intent.putExtra(VoicePlateActivity.EXTRA_ARGS, args); startAssistantActivity(intent); } … }
Để duy trì liên lạc giữa hoạt động này và
VoiceInteractionSession
, một tập hợp các Ý định nội bộ hoặc liên kết dịch vụ có thể
là bắt buộc. Ví dụ: khi VoiceInteractionSession#onHide()
được gọi,
phải có thể chuyển yêu cầu này đến hoạt động.
Lưu ý quan trọng. Trong Automotive, chỉ được chú thích đặc biệt
hoạt động hoặc các hoạt động được liệt kê trong "danh sách cho phép" về trải nghiệm người dùng có thể hiển thị trong khi
lái xe. Điều này áp dụng cho các hoạt động bắt đầu bằng
VoiceInteractionSession#startAssistantActivity()
. Nhớ
chú thích hoạt động của bạn với <meta-data
android:name="distractionOptimized" android:value="true"/>
hoặc đưa nội dung này vào
hoạt động trong khoá systemActivityWhitelist
của /packages/services/Car/service/res/values/config.xml
. Để biết thêm thông tin, hãy xem phần Tài xế
Nguyên tắc chống phân tâm.
Triển khai tính năng nhận dạng giọng nói
Trong phần này, bạn tìm hiểu cách triển khai tính năng nhận dạng giọng nói thông qua tính năng phát hiện và nhận dạng cụm từ kích hoạt. Từ kích hoạt là từ kích hoạt được dùng để bắt đầu một truy vấn mới hoặc hành động bằng giọng nói. Ví dụ: "Ok Google" hoặc "Ok Google".
Phát hiện cụm từ kích hoạt DSP
Android cung cấp quyền truy cập vào trình phát hiện từ nóng luôn bật ở cấp DSP bằng cách
trung bình của AlwaysOnHotwordDetector
.
để triển khai phát hiện cụm từ kích hoạt với CPU thấp. Việc sử dụng chức năng này
được chia thành hai phần:
- Tạo thực thể của
AlwaysOnHotwordDetector
. - Đăng ký mô hình âm thanh phát hiện cụm từ kích hoạt.
Quá trình triển khai VoiceShareService có thể tạo trình phát hiện cụm từ kích hoạt bằng cách sử dụng
VoiceInteractionService#createAlwaysOnHotwordDetector()
,
truyền cụm từ khoá và ngôn ngữ mà họ muốn dùng để phát hiện. Do đó,
ứng dụng nhận được một onAvailabilityChanged()
bằng một trong các giá trị sau đây:
STATE_HARDWARE_UNAVAILABLE
. Chức năng DSP không khả dụng trên thiết bị. Trong trường hợp này, hệ thống sẽ sử dụng tính năng Phát hiện cụm từ kích hoạt bằng phần mềm.STATE_HARDWARE_UNSUPPORTED
. Hỗ trợ DSP không có sẵn nói chung, nhưng DSP không hỗ trợ tổ hợp cụm từ khoá và ngôn ngữ đã cho. Ứng dụng có thể chọn sử dụng Phát hiện cụm từ kích hoạt phần mềm.STATE_HARDWARE_ENROLLED
. Tính năng phát hiện từ nóng đã sẵn sàng và có thể bắt đầu bằng gọi phương thứcstartRecognition()
.STATE_HARDWARE_UNENROLLED
. Mô hình âm thanh cho cụm từ khoá được yêu cầu không phải có sẵn, nhưng có thể đăng ký.
Bạn có thể đăng ký mô hình âm thanh phát hiện cụm từ kích hoạt bằng cách sử dụng IVoiceInteractionManagerService#updateKeyphraseSoundModel()
.
Bạn có thể đăng ký nhiều mô hình trên hệ thống tại một thời điểm, nhưng chỉ một mô hình
mô hình được liên kết với AlwaysOnHotwordDetector
.
Tính năng phát hiện cụm từ kích hoạt DSP có thể không hoạt động trên một số thiết bị. Qua các nhà phát triển
cần kiểm tra chức năng phần cứng bằng cách sử dụng getDspModuleProperties()
. Để hiển thị mã mẫu
cách đăng ký mẫu âm thanh, hãy xem VoiceEnrollment/src/com/android/test/voiceenrollment/EnrollmentUtil.java
.
Xem phần Chụp đồng thời về
nhận dạng cụm từ kích hoạt đồng thời.
Phát hiện cụm từ kích hoạt phần mềm
Như đã chỉ ra ở trên, tính năng phát hiện cụm từ kích hoạt DSP có thể không sử dụng được ở tất cả các khu vực trên thiết bị (ví dụ: Trình mô phỏng Android không cung cấp chế độ mô phỏng DSP). Trong trường hợp này, phần mềm nhận dạng giọng nói là lựa chọn thay thế duy nhất. Để tránh gây ảnh hưởng đến các dịch vụ khác những ứng dụng có thể cần quyền truy cập vào micrô, VIA phải truy cập vào đầu vào âm thanh thông qua:
- Bản ghi âm phải sử dụng MediaRecorder.AudioSource.đủ.
- Duy trì quyền
android.Manifest.permission.CAPTURE_AUDIO_HOTWORD
.
Cả hai hằng số này đều là @hide
và chỉ dùng được cho các ứng dụng đi kèm.
Quản lý đầu vào âm thanh và nhận dạng giọng nói
Đầu vào âm thanh sẽ được triển khai bằng lớp MediaRecorder.
Để biết thêm thông tin về cách sử dụng API này, hãy xem phần MediaRecorder
Tổng quan. Dịch vụ tương tác bằng giọng nói cũng dự kiến sẽ là RecognitionService
triển khai lớp. Bất kỳ ứng dụng nào trong hệ thống yêu cầu nhận dạng giọng nói sẽ sử dụng
để truy cập vào tính năng này. Để nhận dạng giọng nói và có quyền sử dụng micrô, VIA
phải có android.permission.RECORD_AUDIO
.
Các ứng dụng truy cập vào một RecognitionService
dự kiến cũng sẽ giữ quyền này.
Trước Android 10, quyền truy cập micrô chỉ được cấp cho một ứng dụng tại mỗi thời gian (ngoại trừ việc phát hiện cụm từ kích hoạt, xem ở trên). Kể từ Android 10, quyền truy cập micrô. Để biết thêm thông tin, hãy xem bài viết Chia sẻ Đầu vào âm thanh.
Truy cập vào thiết bị ra âm thanh
Khi VIA sẵn sàng đưa ra phản hồi bằng lời nói, bạn cần hãy làm theo bộ nguyên tắc tiếp theo sau đây:
- Khi yêu cầu quyền phát âm thanh hoặc quản lý đầu ra âm thanh, ứng dụng
phải sử dụng
AudioAttributes#USAGE_ASSISTANT
vàAudioAttributes#CONTENT_TYPE_SPEECH
làm thuộc tính âm thanh. - Trong khi nhận dạng lời nói, bạn phải yêu cầu quyền phát âm thanh bằng
AudioManage#AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE
. Lưu ý rằng một số ứng dụng đa phương tiện có thể không phản ứng đúng cách với các lệnh đa phương tiện (xem Thực hiện lệnh phương tiện) trong khi âm thanh tiêu điểm sẽ bị xoá.