หากต้องการติดตั้งใช้งานแอปพลิเคชันการโต้ตอบด้วยเสียง (VIA) ให้ทำตามขั้นตอนต่อไปนี้
- สร้างโครงสร้างพื้นฐานของ VIA
- (ไม่บังคับ) ติดตั้งใช้งานขั้นตอนการตั้งค่า/ลงชื่อเข้าใช้
- (ไม่บังคับ) ติดตั้งใช้งานหน้าจอการตั้งค่า
- ประกาศสิทธิ์ที่จำเป็นในไฟล์ Manifest
- ติดตั้งใช้งาน UI ของแผ่นเสียง
- ติดตั้งใช้งานการจดจำเสียงพูด (ต้องมีการติดตั้งใช้งาน RecognitionService API)
- ติดตั้งใช้งานคำพูด (คุณสามารถติดตั้งใช้งาน TextToSpeech API ได้)
- ติดตั้งใช้งานการดำเนินการตามคำสั่ง ดูเนื้อหานี้ใน หัวข้อการดำเนินการตามคำสั่ง.
ส่วนต่อไปนี้จะอธิบายวิธีทำตามแต่ละขั้นตอนที่กล่าวถึงข้างต้น
สร้างโครงสร้างพื้นฐานของ VIA
Manifest
ระบบจะตรวจหาว่าแอปเป็นแอปที่มีการโต้ตอบด้วยเสียงเมื่อมีข้อมูลต่อไปนี้รวมอยู่ใน Manifest
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>
ในตัวอย่างนี้
- VIA ต้องแสดงบริการที่ขยาย
VoiceInteractionServiceพร้อม ตัวกรอง Intent สำหรับการดำเนินการVoiceInteractionService.SERVICE_INTERFACE ("android.service.voice.VoiceInteractionService") - บริการนี้ต้องมีสิทธิ์ลายเซ็นระบบ
BIND_VOICE_INTERACTION - บริการนี้ควรรวมไฟล์ข้อมูลเมตา
android.voice_interactionเพื่อเก็บข้อมูลต่อไปนี้res/xml/interaction_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" />
ดูรายละเอียดเกี่ยวกับแต่ละช่องได้ที่ R.styleable#VoiceInteractionService
เนื่องจาก VIA ทั้งหมดเป็นบริการจดจำเสียงพูดด้วย คุณจึงต้องใส่ข้อมูลต่อไปนี้ใน Manifest ด้วย
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>
บริการจดจำเสียงพูดต้องมีข้อมูลเมตาต่อไปนี้ด้วย
res/xml/recognition_service.xml
<recognition-service
xmlns:android="http://schemas.android.com/apk/res/android"
android:settingsActivity="com.example.MyRecognizerSettingsActivity" />VoiceInteractionService, VoiceInteractionSessionService และ VoiceInteractionSession
แผนภาพต่อไปนี้แสดงวงจรชีวิตของแต่ละเอนทิตี

รูปที่ 1 วงจรชีวิต
ดังที่กล่าวไว้ก่อนหน้านี้ VoiceInteractionService เป็นจุดเริ่มต้นของ VIA หน้าที่หลักของบริการนี้คือ
- เริ่มต้นกระบวนการที่ควรทำงานต่อไปตราบใดที่ VIA นี้เป็น VIA ที่ใช้งานอยู่ เช่น การตรวจหาคำที่นิยม
- รายงานการสั่งงานด้วยเสียงที่รองรับ (ดู การแตะเพื่ออ่านของผู้ช่วยแบบเสียง)
- เปิดเซสชันการโต้ตอบด้วยเสียงจากหน้าจอล็อก (Keyguard)
การติดตั้งใช้งาน VoiceInteractionService ในรูปแบบที่ง่ายที่สุดจะมีลักษณะดังนี้
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; } ... }
ต้องมีการติดตั้งใช้งาน VoiceInteractionService#onGetSupportedVoiceActions() เพื่อจัดการ
การแตะเพื่ออ่านของผู้ช่วยแบบเสียง
ระบบใช้ VoiceInteractionSessionService เพื่อสร้างและโต้ตอบกับ VoiceInteractionSession โดยมีหน้าที่เดียวคือเริ่มเซสชันใหม่เมื่อมีการร้องขอ
public class MyVoiceInteractionSessionService extends VoiceInteractionSessionService { @Override public VoiceInteractionSession onNewSession(Bundle args) { return new MyVoiceInteractionSession(this); } }
สุดท้ายนี้ VoiceInteractionSession จะเป็นที่ที่งานส่วนใหญ่จะดำเนินการ ระบบอาจนำอินสแตนซ์เซสชันเดียวกลับมาใช้ซ้ำเพื่อดำเนินการโต้ตอบของผู้ใช้หลายรายการ ใน AAOS มี CarVoiceInteractionSession ซึ่งเป็นตัวช่วยที่ช่วยติดตั้งใช้งานฟังก์ชันการทำงานเฉพาะของยานยนต์บางอย่าง
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 มีเมธอดเรียกกลับจำนวนมากซึ่ง
อธิบายไว้ในส่วนต่อไปนี้ ดูเอกสารประกอบสำหรับ VoiceInteractionSession เพื่อดูรายการทั้งหมด
ติดตั้งใช้งานขั้นตอนการตั้งค่า/ลงชื่อเข้าใช้
การตั้งค่าและการลงชื่อเข้าใช้สามารถเกิดขึ้นได้ในกรณีต่อไปนี้
- ระหว่างการเริ่มต้นใช้งานอุปกรณ์ (ตัวช่วยการตั้งค่า)
- ระหว่างการสลับบริการการโต้ตอบด้วยเสียง (การตั้งค่า)
- เมื่อเปิดแอปเป็นครั้งแรกเมื่อมีการเลือกแอป
ดูรายละเอียดเกี่ยวกับประสบการณ์ของผู้ใช้และคำแนะนำด้านภาพที่แนะนำได้ที่ คำแนะนำ UX สำหรับผู้ช่วยที่โหลดไว้ล่วงหน้า
การตั้งค่าระหว่างการสลับบริการเสียง
ผู้ใช้สามารถเลือก VIA ที่ยังไม่ได้กำหนดค่าอย่างถูกต้องได้เสมอ ซึ่งอาจเกิดขึ้นได้เนื่องจากสาเหตุต่อไปนี้
- ผู้ใช้ข้ามตัวช่วยการตั้งค่าทั้งหมดหรือข้ามขั้นตอนการกำหนดค่าการโต้ตอบด้วยเสียง
- ผู้ใช้เลือก VIA อื่นที่ไม่ใช่ VIA ที่กำหนดค่าไว้ระหว่างการเริ่มต้นใช้งานอุปกรณ์
ไม่ว่าในกรณีใด VoiceInteractionService มีหลายวิธีในการกระตุ้นให้ผู้ใช้ทำการตั้งค่าให้เสร็จสมบูรณ์
- การช่วยเตือนแบบการแจ้งเตือน
- การตอบกลับด้วยเสียงอัตโนมัติเมื่อผู้ใช้พยายามใช้
หมายเหตุ: เราไม่แนะนำอย่างยิ่งให้แสดงขั้นตอนการตั้งค่า VIA โดยไม่มีคำขอที่ชัดเจนจากผู้ใช้ ซึ่งหมายความว่า VIA ควรหลีกเลี่ยงการแสดงเนื้อหาบน HU โดยอัตโนมัติระหว่างการบูตอุปกรณ์หรือเป็นผลมาจากการสลับหรือปลดล็อกของผู้ใช้
การช่วยเตือนแบบการแจ้งเตือน
การช่วยเตือนแบบการแจ้งเตือนเป็นวิธีที่ไม่รบกวนในการระบุความจำเป็นในการตั้งค่า และให้ผู้ใช้มีโอกาสไปยังขั้นตอนการตั้งค่าผู้ช่วย

รูปที่ 2 การช่วยเตือนแบบการแจ้งเตือน
ขั้นตอนการทำงานจะเป็นดังนี้

รูปที่ 3 ขั้นตอนการช่วยเตือนแบบการแจ้งเตือน
การตอบกลับด้วยเสียง
นี่เป็นขั้นตอนที่ง่ายที่สุดในการติดตั้งใช้งาน โดยเริ่มคำพูดในการเรียกกลับ VoiceInteractionSession#onShow() อธิบายให้ผู้ใช้ทราบสิ่งที่ต้องทำ แล้วถามผู้ใช้ (หากได้รับอนุญาตให้ตั้งค่าตามสถานะการจำกัด UX) ว่าต้องการเริ่มขั้นตอนการตั้งค่าหรือไม่ หากตั้งค่าไม่ได้ในขณะนั้น ให้แจ้งสถานการณ์นี้ด้วย
การตั้งค่าเมื่อใช้งานครั้งแรก
ผู้ใช้สามารถทริกเกอร์ VIA ที่ยังไม่ได้กำหนดค่าอย่างถูกต้องได้เสมอ ในกรณีดังกล่าว ให้ทำดังนี้
- แจ้งให้ผู้ใช้ทราบสถานการณ์นี้ด้วยวาจา (เช่น "ฉันต้องให้คุณทำตามขั้นตอน 2-3 ขั้นตอนเพื่อให้ทำงานได้อย่างถูกต้อง…")
- หากเครื่องมือการจำกัด UX อนุญาต (ดู UX_RESTRICTIONS_NO_SETUP) ให้ถามผู้ใช้ว่าต้องการเริ่ม กระบวนการตั้งค่าหรือไม่ แล้วเปิดหน้าจอการตั้งค่าสำหรับ VIA
- หากไม่ได้รับอนุญาต (เช่น หากผู้ใช้กำลังขับรถ) ให้แสดงการแจ้งเตือนเพื่อให้ผู้ใช้คลิกตัวเลือกเมื่อปลอดภัยที่จะทำ
สร้างหน้าจอการตั้งค่าการโต้ตอบด้วยเสียง
คุณควรพัฒนาหน้าจอการตั้งค่าและการลงชื่อเข้าใช้เป็น กิจกรรมปกติ ดูหลักเกณฑ์ด้าน UX และภาพสำหรับการพัฒนา UI ได้ที่ คำแนะนำ UX สำหรับผู้ช่วยที่โหลดไว้ล่วงหน้า
หลักเกณฑ์ทั่วไป
- VIA ควรอนุญาตให้ผู้ใช้ขัดจังหวะและดำเนินการตั้งค่าต่อได้ทุกเมื่อ
- ไม่ควรอนุญาตให้ตั้งค่าหากมีการจำกัด
UX_RESTRICTIONS_NO_SETUPดูรายละเอียดได้ที่ หลักเกณฑ์การเสียสมาธิของผู้ขับ - หน้าจอการตั้งค่าควรเป็นไปตามระบบการออกแบบของรถแต่ละรุ่น เลย์เอาต์หน้าจอทั่วไป ไอคอน สี และลักษณะอื่นๆ ควรสอดคล้องกับ UI ส่วนอื่นๆ ดูรายละเอียดได้ที่ การปรับแต่ง
ติดตั้งใช้งานหน้าจอการตั้งค่า

รูปที่ 4 การผสานรวมการตั้งค่า
หน้าจอการตั้งค่าเป็นกิจกรรม Android ปกติ หากมีการติดตั้งใช้งาน จุดเริ่มต้นของหน้าจอการตั้งค่า
ต้องประกาศไว้ใน res/xml/interaction_service.xml ซึ่งเป็นส่วนหนึ่งของ Manifest ของ VIA (ดู
Manifest)
ส่วนการตั้งค่าเป็นตำแหน่งที่เหมาะสมในการตั้งค่าและลงชื่อเข้าใช้ต่อ (หากผู้ใช้ยังไม่ได้ดำเนินการให้เสร็จสมบูรณ์) หรือเสนอตัวเลือก ลงชื่อออก หรือ เปลี่ยนผู้ใช้ หากจำเป็น หน้าจอเหล่านี้ควรมีลักษณะดังนี้
- มีตัวเลือกให้ออกจากหน้าจอปัจจุบันกลับไปยังหน้าจอก่อนหน้าในสแต็กหน้าจอ (เช่น ไปที่การตั้งค่ารถ)
- ไม่ได้รับอนุญาตขณะขับรถ ดูรายละเอียดได้ที่ หลักเกณฑ์การเสียสมาธิของผู้ขับ
- เป็นไปตามระบบการออกแบบของรถแต่ละรุ่น ดูรายละเอียดได้ที่ การปรับแต่ง
ประกาศสิทธิ์ที่จำเป็นในไฟล์ Manifest
สิทธิ์ที่ VIA ต้องใช้สามารถแบ่งออกเป็น 3 หมวดหมู่
- สิทธิ์ลายเซ็นระบบ สิทธิ์เหล่านี้จะมอบให้เฉพาะ APK ที่ติดตั้งไว้ล่วงหน้าและลงนามโดยระบบเท่านั้น ผู้ใช้ไม่สามารถให้สิทธิ์เหล่านี้ได้ มีเพียง OEM เท่านั้นที่ให้สิทธิ์ได้เมื่อสร้างอิมเมจระบบ ดูข้อมูลเพิ่มเติมเกี่ยวกับการขอสิทธิ์ลายเซ็นได้ที่ ให้สิทธิ์ที่มีสิทธิพิเศษของระบบ
- สิทธิ์ที่เป็นอันตราย สิทธิ์เหล่านี้เป็นสิทธิ์ที่ผู้ใช้ต้องให้โดยใช้กล่องโต้ตอบ PermissionsController OEM สามารถให้สิทธิ์บางอย่างเหล่านี้ล่วงหน้าแก่ VoiceInteractionService เริ่มต้นได้ แต่เนื่องจากค่าเริ่มต้นนี้อาจเปลี่ยนแปลงไปในอุปกรณ์แต่ละเครื่อง แอปจึงควรขอสิทธิ์เหล่านี้ได้เมื่อจำเป็น
- สิทธิ์อื่นๆ สิทธิ์เหล่านี้เป็นสิทธิ์อื่นๆ ทั้งหมดที่ไม่ต้องมีการดำเนินการจากผู้ใช้ ระบบจะให้สิทธิ์เหล่านี้โดยอัตโนมัติ
จากข้อมูลข้างต้น ส่วนต่อไปนี้จะเน้นเฉพาะการขอสิทธิ์ที่เป็นอันตราย ควรขอสิทธิ์เฉพาะในขณะที่ผู้ใช้อยู่ในหน้าจอการลงชื่อเข้าใช้หรือการตั้งค่า
หากแอปไม่มีสิทธิ์ที่จำเป็นในการทำงาน ขั้นตอนที่แนะนำคือใช้คำพูดเพื่ออธิบายสถานการณ์ให้ผู้ใช้ทราบ และใช้การแจ้งเตือนเพื่อให้ผู้ใช้มีโอกาสกลับไปที่หน้าจอการตั้งค่า VIA ดูรายละเอียดได้ที่ 1. การช่วยเตือนแบบการแจ้งเตือน
ขอสิทธิ์เป็นส่วนหนึ่งของหน้าจอการตั้งค่า
คุณขอสิทธิ์ที่เป็นอันตรายได้โดยใช้เมธอด ActivityCompat#requestPermission() ปกติ (หรือเมธอดที่เทียบเท่า) ดูรายละเอียดเกี่ยวกับวิธีขอสิทธิ์ได้ที่
ขอสิทธิ์ของแอป

รูปที่ 5 ขอสิทธิ์
สิทธิ์ผู้ฟังการแจ้งเตือน
หากต้องการติดตั้งใช้งานขั้นตอน TTR นั้น VIA ต้องได้รับการกำหนดให้เป็นผู้ฟังการแจ้งเตือน ซึ่งไม่ใช่สิทธิ์โดยตัวมันเอง แต่เป็นการกำหนดค่าที่อนุญาตให้ระบบส่งการแจ้งเตือนไปยังผู้ฟังที่ลงทะเบียนไว้ หากต้องการทราบว่า VIA ได้รับสิทธิ์เข้าถึงข้อมูลนี้หรือไม่ แอปสามารถทำดังนี้
- (ไม่บังคับ) ตรวจสอบว่ามีผู้ฟังการแจ้งเตือนล่วงหน้าหรือไม่โดยใช้
CarAssistUtils#assistantIsNotificationListener()ซึ่งสามารถทำได้ เช่น ระหว่างขั้นตอนการตั้งค่า - (บังคับ) ตอบสนองต่อการจัดการ
CarVoiceInteractionSession#onShow()ด้วยการดำเนินการVOICE_ACTION_HANDLE_EXCEPTIONและข้อยกเว้นEXCEPTION_NOTIFICATION_LISTENER_PERMISSIONS_MISSING
หากไม่ได้ให้สิทธิ์เข้าถึงนี้ล่วงหน้า VIA ควรนำผู้ใช้ไปยังส่วนการเข้าถึงการแจ้งเตือนของการตั้งค่ารถ โดยใช้คำพูดและการแจ้งเตือนร่วมกัน คุณสามารถใช้โค้ดต่อไปนี้เพื่อเปิดส่วนที่เหมาะสมของแอปการตั้งค่า
private void requestNotificationListenerAccess() {
Intent intent = new Intent(Settings
.ACTION_NOTIFICATION_LISTENER_SETTINGS);
intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
startActivity(intent);
}ติดตั้งใช้งาน UI ของแผ่นเสียง
เมื่อ VoiceInteractionSession ได้รับการเรียกกลับ onShow() ก็จะแสดง UI ของแผ่นเสียงได้ ดูหลักเกณฑ์ด้านภาพและ UX เกี่ยวกับการติดตั้งใช้งานแผ่นเสียงได้ที่
คำแนะนำ UX สำหรับผู้ช่วยที่โหลดไว้ล่วงหน้า

รูปที่ 6 การแสดงแผ่นเสียง
คุณมีตัวเลือก 2 ตัวเลือกในการติดตั้งใช้งาน UI นี้
- ลบล้าง
VoiceInteractionSession#onCreateContentView() - เปิดกิจกรรมโดยใช้
VoiceInteractionSession#startAssistantActivity()
ใช้ onCreateContentView()
นี่เป็นวิธีเริ่มต้นในการแสดงแผ่นเสียง คลาสพื้นฐาน VoiceInteractionSession จะสร้างหน้าต่างและจัดการวงจรชีวิตของหน้าต่างตราบใดที่เซสชันเสียงยังคงอยู่ แอปต้องลบล้าง VoiceInteractionSession#onCreateContentView() และแสดงผลมุมมองที่แนบกับหน้าต่างนั้นทันทีที่สร้างเซสชัน มุมมองนี้ควรไม่ปรากฏในตอนแรก เมื่อการโต้ตอบด้วยเสียงเริ่มต้นขึ้น มุมมองนี้ควรปรากฏใน VoiceInteractionSession#onShow() แล้วกลับไปไม่ปรากฏอีกครั้งใน 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); } … }
เมื่อใช้วิธีนี้ คุณอาจต้องปรับ VoiceInteractionSession#onComputeInsets()
เพื่อพิจารณาพื้นที่ที่ถูกบดบังของ UI
ใช้ startAssistantActivity()
ในกรณีนี้ VoiceInteractionSession จะมอบหมายการจัดการ UI ของแผ่นเสียงให้กับกิจกรรมปกติ เมื่อใช้ตัวเลือกนี้ การติดตั้งใช้งาน VoiceInteractionSession
ต้องปิดใช้การสร้างหน้าต่างเนื้อหาเริ่มต้น (ดู การใช้ onCreateContentView()) ในการเรียกกลับ onPrepareShow()
ใน VoiceInteractionSession#onShow() เซสชันจะเริ่มกิจกรรมแผ่นเสียงโดยใช้ VoiceInteractionSession#startAssistantActivity() เมธอดนี้จะเริ่มต้น UI ด้วยการตั้งค่าหน้าต่างและแฟล็กกิจกรรมที่เหมาะสม
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); } … }
คุณอาจต้องใช้ชุด Intent ภายในหรือการผูกบริการเพื่อรักษาการสื่อสารระหว่างกิจกรรมนี้กับ VoiceInteractionSession เช่น เมื่อมีการเรียกใช้ VoiceInteractionSession#onHide() เซสชันต้องส่งคำขอนี้ไปยังกิจกรรมได้
สำคัญ ในยานยนต์ เฉพาะกิจกรรมที่มีคำอธิบายประกอบพิเศษหรือกิจกรรมที่แสดงอยู่ใน "รายการที่อนุญาต" ของ UXR เท่านั้นที่จะแสดงขณะขับรถ ซึ่งใช้กับกิจกรรมที่เริ่มด้วย VoiceInteractionSession#startAssistantActivity() ด้วย อย่าลืม
ใส่คำอธิบายประกอบกิจกรรมด้วย <meta-data
android:name="distractionOptimized" android:value="true"/> หรือรวมกิจกรรมนี้
ไว้ในคีย์ systemActivityWhitelist ของ /packages/services/Car/service/res/values/config.xml
ไฟล์ ดูข้อมูลเพิ่มเติมได้ที่ หลักเกณฑ์การรบกวน
ผู้ขับขี่
ติดตั้งใช้งานการจดจำเสียงพูด
ในส่วนนี้ คุณจะได้เรียนรู้วิธีติดตั้งใช้งานการจดจำเสียงพูดผ่านการตรวจหาและการจดจำคำที่นิยม คำที่นิยม คือคำทริกเกอร์ที่ใช้เพื่อเริ่มคำค้นหาหรือการดำเนินการใหม่ด้วยเสียง เช่น "Ok Google"
การตรวจหาคำที่นิยมของ DSP
Android ให้สิทธิ์เข้าถึงตัวตรวจหาคำที่นิยม แบบเปิดตลอดเวลา ที่ระดับ DSP ผ่าน
AlwaysOnHotwordDetector
วิธีติดตั้งใช้งานการตรวจหาคำที่นิยมโดยใช้ CPU ต่ำ การใช้ฟังก์ชันนี้แบ่งออกเป็น 2 ส่วน
- การสร้างอินสแตนซ์ของ
AlwaysOnHotwordDetector - การลงทะเบียนโมเดลเสียงสำหรับการตรวจหาคำที่นิยม
การติดตั้งใช้งาน VoiceInteractionService สามารถสร้างตัวตรวจหาคำที่นิยมได้โดยใช้
VoiceInteractionService#createAlwaysOnHotwordDetector(),
โดยส่งวลีสำคัญและภาษาที่ต้องการใช้ในการตรวจหา ด้วยเหตุนี้ แอปจึงได้รับการเรียกกลับพร้อมค่าที่เป็นไปได้ค่าใดค่าหนึ่งต่อไปนี้onAvailabilityChanged()
STATE_HARDWARE_UNAVAILABLE. ความสามารถของ DSP ไม่พร้อมใช้งานในอุปกรณ์ ในกรณีนี้ ระบบจะใช้การตรวจหาคำที่นิยมของซอฟต์แวร์STATE_HARDWARE_UNSUPPORTED. โดยทั่วไปแล้ว DSP ไม่พร้อมใช้งาน แต่ DSP ไม่รองรับวลีสำคัญและภาษาที่ระบุ แอปสามารถเลือกใช้ การตรวจหาคำที่นิยมของซอฟต์แวร์ได้STATE_HARDWARE_ENROLLED. การตรวจหาคำที่นิยมพร้อมใช้งานและสามารถเริ่มได้โดยการเรียกใช้เมธอดstartRecognition()STATE_HARDWARE_UNENROLLED. โมเดลเสียงสำหรับวลีสำคัญที่ขอไม่พร้อมใช้งาน แต่ลงทะเบียนได้
คุณลงทะเบียนโมเดลเสียงสำหรับการตรวจหาคำที่นิยมได้โดยใช้ IVoiceInteractionManagerService#updateKeyphraseSoundModel()
คุณลงทะเบียนโมเดลหลายรายการในระบบได้ในเวลาที่กำหนด แต่
โมเดลจะเชื่อมโยงกับAlwaysOnHotwordDetectorเพียงรายการเดียว
การตรวจหาคำที่นิยมของ DSP อาจไม่พร้อมใช้งานในอุปกรณ์บางเครื่อง นักพัฒนา VIA
ควรตรวจสอบความสามารถของฮาร์ดแวร์โดยใช้getDspModuleProperties()
เมธอด ดูโค้ดตัวอย่างที่แสดง
วิธีลงทะเบียนโมเดลเสียงได้ที่ VoiceEnrollment/src/com/android/test/voiceenrollment/EnrollmentUtil.java
ดูการบันทึกพร้อมกันเกี่ยวกับ
การจดจำคำที่นิยมพร้อมกัน
การตรวจหาคำที่นิยมของซอฟต์แวร์
ดังที่ระบุไว้ข้างต้น การตรวจหาคำที่นิยมของ DSP อาจไม่พร้อมใช้งานในอุปกรณ์บางเครื่อง (เช่น โปรแกรมจำลอง Android ไม่มีการจำลอง DSP) ในกรณีนี้ การจดจำเสียงพูดของซอฟต์แวร์เป็นทางเลือกเดียว VIA ต้องเข้าถึงอินพุตเสียงโดยใช้ข้อมูลต่อไปนี้เพื่อหลีกเลี่ยงการรบกวนแอปอื่นๆ ที่อาจต้องเข้าถึงไมโครโฟน
- การบันทึกเสียงต้องใช้ MediaRecorder.AudioSource.HOTWORD
- มีสิทธิ์
android.Manifest.permission.CAPTURE_AUDIO_HOTWORD
ค่าคงที่ทั้ง 2 รายการนี้เป็น @hide และใช้ได้เฉพาะกับแอปที่มาพร้อมกับระบบเท่านั้น
จัดการอินพุตเสียงและการจดจำเสียงพูด
คุณจะติดตั้งใช้งานอินพุตเสียงโดยใช้คลาส MediaRecorder
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้ API นี้ได้ที่ภาพรวม
ของ MediaRecorder นอกจากนี้ บริการการโต้ตอบด้วยเสียงควรเป็นการติดตั้งใช้งานคลาส RecognitionService
ด้วย แอปใดก็ตามในระบบที่ต้องใช้การจดจำเสียงพูดจะใช้ `[SpeechRecognizer](https://developer.android.com/reference/android/speech/SpeechRecognizer)` เพื่อเข้าถึงความสามารถนี้ หากต้องการจดจำเสียงพูดและเข้าถึงไมโครโฟนได้ VIAs
ต้องมีสิทธิ์ android.permission.RECORD_AUDIO
แอปที่เข้าถึงการติดตั้งใช้งาน RecognitionService
ควรมีสิทธิ์นี้ด้วย
ก่อน Android 10 ระบบจะให้สิทธิ์เข้าถึงไมโครโฟนแก่แอปเพียงแอปเดียวในแต่ละครั้ง (ยกเว้นการตรวจหาคำที่นิยม ดูด้านบน) ตั้งแต่ Android 10 เป็นต้นไป คุณจะแชร์สิทธิ์เข้าถึงไมโครโฟนได้ ดูข้อมูลเพิ่มเติมได้ที่ การแชร์ อินพุตเสียง
เข้าถึงเอาต์พุตเสียง
เมื่อ VIA พร้อมที่จะให้การตอบกลับด้วยวาจา คุณควรทำตามหลักเกณฑ์ชุดต่อไปนี้
- เมื่อขอโฟกัสเสียงหรือจัดการเอาต์พุตเสียง แอป
ต้องใช้
AudioAttributes#USAGE_ASSISTANTและAudioAttributes#CONTENT_TYPE_SPEECHเป็นแอตทริบิวต์เสียง - ระหว่างการจดจำเสียงพูด คุณต้องขอโฟกัสเสียงด้วย
AudioManage#AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVEโปรดทราบว่าแอปสื่อบางแอปอาจตอบสนองต่อคำสั่งสื่อไม่ถูกต้อง (ดู การดำเนินการตามคำสั่งสื่อ) ขณะที่ระบบนำโฟกัสเสียง ออก