वॉइस इंटरैक्शन ऐप्लिकेशन (वीआईए) लागू करने के लिए, यह तरीका अपनाएं:
- वीआईए स्केलेटन बनाएं.
- (ज़रूरी नहीं) सेटअप/साइन-इन करने की प्रोसेस लागू करें.
- (ज़रूरी नहीं) सेटिंग वाली स्क्रीन लागू करें.
- मेनिफ़ेस्ट फ़ाइल में, ज़रूरी अनुमतियों का एलान करें.
- वॉइस प्लेट यूज़र इंटरफ़ेस (यूआई) लागू करें.
- आवाज़ पहचानने की सुविधा लागू करें. इसमें RecognitionService API को लागू करना ज़रूरी है.
- उच्चारण को लागू करें (इसकी जगह TextToSpeech API को भी लागू करने का विकल्प है).
- कमांड पूरा करने की सुविधा लागू करें. यह कॉन्टेंट, कमांड पूरा करना में देखें.
यहां दिए गए सेक्शन में, ऊपर बताए गए हर चरण को पूरा करने का तरीका बताया गया है.
वीआईए स्केलेटन बनाना
मेनिफ़ेस्ट
किसी ऐप्लिकेशन में वॉइस इंटरैक्शन है या नहीं, यह मेनिफ़ेस्ट में मौजूद इन चीज़ों से पता चलता है:
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>
इस उदाहरण में:
- वीआईए को ऐसी सेवा एक्सपोज़ करनी चाहिए जो
VoiceInteractionServiceको बढ़ाती हो. साथ ही, इसमें कार्रवाई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 देखें.
सभी वीआईए में वॉइस पहचानने वाली सेवाएं भी होती हैं, इसलिए आपको मेनिफ़ेस्ट में ये चीज़ें भी शामिल करनी होंगी:
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
यहां दिए गए डायग्राम में, इन तीनों इकाइयों के लाइफ़-साइकल की जानकारी दी गई है:

पहली इमेज. लाइफ़साइकल
जैसा कि पहले बताया गया है, VoiceInteractionService किसी वीआईए का एंट्रीपॉइंट होता है. इस सेवा की मुख्य ज़िम्मेदारियां ये हैं:
- ऐसी सभी प्रोसेस शुरू करना जिनका इस वीआईए के चालू रहने तक चलना ज़रूरी है. उदाहरण के लिए, हॉटवर्ड की पहचान.
- साथ काम करने वाली, बोलकर की जाने वाली कार्रवाइयों की रिपोर्ट करना (वॉइस असिस्टेंट की 'टैप करके सुनें' सुविधा देखें).
- लॉक स्क्रीन (कीगार्ड) से, वॉइस इंटरैक्शन सेशन लॉन्च करना.
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() को लागू करना ज़रूरी है.
सिस्टम, VoiceInteractionSession बनाने और उससे इंटरैक्ट करने के लिए, VoiceInteractionSessionService का इस्तेमाल करता है. इसकी सिर्फ़ एक ज़िम्मेदारी है,
अनुरोध मिलने पर नए सेशन शुरू करना.
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 का दस्तावेज़ देखें.
सेटअप/साइन-इन करने की प्रोसेस लागू करना
सेटअप और साइन-इन कई जगह किया जा सकता है:
- डिवाइस की ऑनबोर्डिंग के दौरान (सेटअप विज़र्ड).
- वॉइस इंटरैक्शन सेवा बदलने के दौरान (सेटिंग).
- ऐप्लिकेशन चुने जाने पर, पहली बार लॉन्च करने के दौरान.
सुझाए गए उपयोगकर्ता अनुभव और विज़ुअल निर्देश के बारे में ज़्यादा जानने के लिए, पहले से लोड की गई असिस्टेंट: उपयोगकर्ता अनुभव से जुड़े दिशा-निर्देश देखें.
वॉइस सेवा बदलने के दौरान सेटअप करना
उपयोगकर्ता के पास हमेशा ऐसा वीआईए चुनने का विकल्प होता है जिसे सही तरीके से कॉन्फ़िगर नहीं किया गया है. ऐसा इन वजहों से हो सकता है:
- उपयोगकर्ता ने सेटअप विज़र्ड को पूरी तरह से छोड़ दिया हो या उसने वॉइस इंटरैक्शन कॉन्फ़िगरेशन का चरण छोड़ दिया हो.
- उपयोगकर्ता ने डिवाइस को शामिल करने के दौरान कॉन्फ़िगर किए गए वीआईए से अलग वीआईए चुना हो.
किसी भी मामले में, VoiceInteractionService के पास उपयोगकर्ता से सेटअप पूरा करवाने के कई तरीके हैं:
- सूचना के तौर पर रिमाइंडर.
- इसके इस्तेमाल की कोशिश पर, अपने-आप बोलकर दिया गया जवाब.
ध्यान दें: हमारा सुझाव है कि उपयोगकर्ता के अनुरोध के बिना, वीआईए सेटअप फ़्लो को न दिखाएं. इसका मतलब है कि डिवाइस के बूट होने के दौरान, वीआईए को एचयू पर कॉन्टेंट अपने-आप दिखने से रोकना चाहिए. ऐसा तब भी किया जाना चाहिए जब उपयोगकर्ता डिवाइस को स्विच या अनलॉक करे.
सूचना के तौर पर रिमाइंडर
सूचना के तौर पर रिमाइंडर भेजने से, उपयोगकर्ता अनुभव में किसी रूकावट के बिना उन्हें सेटअप की ज़रूरत के बारे में पता चलता है. साथ ही, वे Assistant के सेटअप फ़्लो पर आसानी से जा सकते हैं.

दूसरी इमेज. सूचना के तौर पर रिमाइंडर
यह फ़्लो इस तरह काम करेगा:

तीसरी इमेज. सूचना के तौर पर रिमाइंडर का फ़्लो
बोलकर दिया गया जवाब
यह सबसे आसान फ़्लो है. इसमें VoiceInteractionSession#onShow() कॉलबैक पर बोलकर निर्देश दिया जाता है. साथ ही, उपयोगकर्ता को बताया जाता है कि उसे क्या करना है. इसके बाद, उपयोगकर्ता से पूछा जाता है कि क्या उसे सेटअप फ़्लो शुरू करना है. हालांकि, यह पूछने के लिए ज़रूरी है कि उपयोगकर्ता अनुभव की पाबंदी की स्थिति के हिसाब से सेटअप की अनुमति हो. अगर उस समय सेटअप नहीं किया जा सकता, तो इस स्थिति के बारे में भी बताएं.
पहली बार इस्तेमाल करने पर सेटअप करना
उपयोगकर्ता के पास हमेशा ऐसा वीआईए ट्रिगर करने का विकल्प होता है जिसे सही तरीके से कॉन्फ़िगर नहीं किया गया है. ऐसे मामलों में:
- उपयोगकर्ता को इस स्थिति के बारे में बोलकर बताएं. उदाहरण के लिए, "ठीक से काम करने के लिए, आपको कुछ चरण पूरे करने होंगे … ".
- अगर उपयोगकर्ता अनुभव की पाबंदियों वाला इंजन अनुमति देता है (UX_RESTRICTIONS_NO_SETUP देखें), तो उपयोगकर्ता से पूछें कि क्या उसे सेटअप की प्रोसेस शुरू करनी है. इसके बाद, वीआईए के लिए सेटिंग स्क्रीन खोलें.
- अगर उपयोगकर्ता ड्राइविंग कर रहा है या किसी अन्य वजह से सेटअप शुरू नहीं कर सकता, तो उसे सूचना दें कि सुरक्षित होने पर, वह विकल्प पर क्लिक कर सकता है.
वॉइस इंटरैक्शन सेटअप स्क्रीन बनाना
सेटअप और साइन-इन स्क्रीन को सामान्य गतिविधियों के तौर पर डेवलप किया जाना चाहिए. यूज़र इंटरफ़ेस (यूआई) डेवलपमेंट के लिए, उपयोगकर्ता अनुभव और विज़ुअल से जुड़े दिशा-निर्देश पहले से लोड की गई असिस्टेंट: उपयोगकर्ता अनुभव (यूएक्स) के दिशा-निर्देश में मौजूद हैं.
सामान्य दिशा-निर्देश:
- वीआईए में उपयोगकर्ताओं को किसी भी समय सेटअप में रुकावट डालने और उसे फिर से शुरू करने की अनुमति मिलनी चाहिए.
- अगर
UX_RESTRICTIONS_NO_SETUPपाबंदी लगी हुई है, तो सेटअप की अनुमति नहीं दी जानी चाहिए. ज़्यादा जानकारी के लिए, ड्राइवर का ध्यान भटकाने वाले ऐप्लिकेशन के लिए बने दिशा-निर्देश देखें. - सेटअप स्क्रीन, हर वाहन के डिज़ाइन सिस्टम से मेल खानी चाहिए. स्क्रीन का सामान्य लेआउट, आइकॉन, रंग, और अन्य चीज़ें, बाकी यूज़र इंटरफ़ेस (यूआई) से मेल खानी चाहिए. ज़्यादा जानकारी के लिए, पसंद के मुताबिक बनाना लेख पढ़ें.
सेटिंग वाली स्क्रीन लागू करना

चौथी इमेज. सेटिंग इंटिग्रेशन
सेटिंग स्क्रीन, Android की सामान्य गतिविधियां होती हैं. अगर इसे लागू किया जाता है, तो वीआईए मेनिफ़ेस्ट के हिस्से के तौर पर, res/xml/interaction_service.xml में उनके एंट्री पॉइंट का एलान करना ज़रूरी है (मेनिफ़ेस्ट देखें).
सेटिंग सेक्शन में, सेटअप जारी रखने और साइन इन करने (अगर उपयोगकर्ता ने इसे पूरा नहीं किया है) के लिए एक अच्छा विकल्प मिलता है. इसके अलावा, ज़रूरत पड़ने पर साइन-आउट या उपयोगकर्ता बदलें विकल्प भी दिया जा सकता है. ऊपर बताई गई सेटअप स्क्रीन की तरह ही, इन स्क्रीन पर ये चीज़ें दिखनी चाहिए:
- स्क्रीन स्टैक में पिछली स्क्रीन पर वापस जाने का विकल्प होना चाहिए. उदाहरण के लिए, कार की सेटिंग पर वापस जाने का विकल्प.
- गाड़ी चलाते समय यह अनुमति नहीं दी जाती. ज़्यादा जानकारी के लिए, ड्राइवर का ध्यान भटकाने वाले ऐप्लिकेशन से जुड़े दिशा-निर्देश देखें.
- हर वाहन के डिज़ाइन सिस्टम से मेल खानी चाहिए. ज़्यादा जानकारी के लिए, पसंद के मुताबिक बनाना लेख पढ़ें.
मेनिफ़ेस्ट फ़ाइल में, ज़रूरी अनुमतियों का एलान करना
वीआईए के लिए ज़रूरी अनुमतियों को तीन कैटगरी में बांटा जा सकता है:
- सिस्टम हस्ताक्षर की अनुमतियां. ये अनुमतियां सिर्फ़ पहले से इंस्टॉल किए गए और सिस्टम से साइन किए गए APK को दी जाती हैं. उपयोगकर्ता ये अनुमतियां नहीं दे सकते. ये अनुमतियां सिर्फ़ ओईएम, सिस्टम इमेज बनाते समय दे सकते हैं. हस्ताक्षर की अनुमतियां पाने के बारे में ज़्यादा जानने के लिए, सिस्टम से जुड़ी खास अनुमतियां देना लेख पढ़ें.
- खतरनाक अनुमतियां. ये ऐसी अनुमतियां हैं जिन्हें उपयोगकर्ता को PermissionsController डायलॉग का इस्तेमाल करके देना होगा. ओईएम, डिफ़ॉल्ट VoiceInteractionService को इनमें से कुछ अनुमतियां पहले से दे सकते हैं. हालांकि, यह डिफ़ॉल्ट सेटिंग हर डिवाइस के हिसाब से अलग-अलग हो सकती है. इसलिए, ज़रूरत पड़ने पर ऐप्लिकेशन को इन अनुमतियों का अनुरोध करना चाहिए.
- अन्य अनुमतियां. ये वे सभी अन्य अनुमतियां हैं जिनके लिए उपयोगकर्ता की अनुमति की ज़रूरत नहीं होती. ये अनुमतियां, सिस्टम अपने-आप देता है.
ऊपर दी गई जानकारी के मुताबिक, इस सेक्शन में सिर्फ़ खतरनाक अनुमतियों का अनुरोध करने के बारे में बताया गया है. अनुमतियों का अनुरोध सिर्फ़ तब किया जाना चाहिए, जब उपयोगकर्ता साइन-इन या सेटिंग वाली स्क्रीन पर हो.
अगर ऐप्लिकेशन के पास काम करने के लिए ज़रूरी अनुमतियां नहीं हैं, तो हमारा सुझाव है कि उपयोगकर्ता को स्थिति के बारे में बताने के लिए, बोलकर निर्देश देने की सुविधा का इस्तेमाल करें. साथ ही, सूचना की मदद से उपयोगकर्ता को यह बताएं कि वह वीआईए की सेटिंग स्क्रीन पर वापस कैसे जा सकता है. ज़्यादा जानकारी के लिए, 1. सूचना के तौर पर रिमाइंडर देखें.
सेटिंग स्क्रीन पर अनुमतियों का अनुरोध दिखाना
खतरनाक अनुमतियों का अनुरोध, सामान्य ActivityCompat#requestPermission() (या इसके बराबर) तरीके से किया जाता है. अनुमतियों का अनुरोध करने के तरीके के बारे में जानने के लिए, ऐप्लिकेशन की अनुमतियों का अनुरोध करना लेख पढ़ें.

पांचवीं इमेज. अनुमतियों का अनुरोध करें
सूचना सुनने वाले की अनुमति
टीटीआर फ़्लो लागू करने के लिए, वीआईए को सूचना सुनने वाले के तौर पर तय किया जाना चाहिए. यह असल में अनुमति नहीं है, बल्कि एक ऐसा कॉन्फ़िगरेशन है जिसकी मदद से सिस्टम, रजिस्टर किए गए दर्शकों को सूचनाएं भेज सकता है. यह जानने के लिए कि वीआईए को इस जानकारी का ऐक्सेस दिया गया है या नहीं, ऐप्लिकेशन ये काम कर सकते हैं:
- (ज़रूरी नहीं)
CarAssistUtils#assistantIsNotificationListener()का इस्तेमाल करके, पहले से यह जांचना कि सूचना सुनने वाले मौजूद हैं या नहीं. उदाहरण के लिए, यह काम सेटअप फ़्लो के दौरान किया जा सकता है. - (ज़रूरी है)
CarVoiceInteractionSession#onShow()को मैनेज करने के लिए, कार्रवाईVOICE_ACTION_HANDLE_EXCEPTIONऔर अपवादEXCEPTION_NOTIFICATION_LISTENER_PERMISSIONS_MISSINGके साथ जवाब देना.
अगर यह ऐक्सेस पहले से नहीं दिया गया है, तो वीआईए को उपयोगकर्ता को कार की सेटिंग के सूचना ऐक्सेस सेक्शन पर ले जाना चाहिए. इसके लिए, उसे निर्देश बोलने होंगे और सूचनाएं भेजनी होंगी. सेटिंग ऐप्लिकेशन का सही सेक्शन खोलने के लिए, यहां दिए गए कोड का इस्तेमाल किया जा सकता है:
private void requestNotificationListenerAccess() {
Intent intent = new Intent(Settings
.ACTION_NOTIFICATION_LISTENER_SETTINGS);
intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
startActivity(intent);
}वॉइस प्लेट यूज़र इंटरफ़ेस (यूआई) लागू करना
जब किसी VoiceInteractionSession को onShow() कॉलबैक मिलता है, तो वह वॉइस प्लेट यूज़र इंटरफ़ेस (यूआई) दिखा सकता है. वॉइस प्लेट लागू करने के लिए विज़ुअल और यूज़र एक्सपीरियंस (यूएक्स) से जुड़े दिशा-निर्देश पहले से लोड की गई असिस्टेंट: यूज़र एक्सपीरियंस से जुड़े दिशा-निर्देश में मौजूद हैं.

छठी इमेज. वॉइस प्लेट दिखाना
इस यूज़र इंटरफ़ेस (यूआई) को लागू करने के दो विकल्प हैं:
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()
को अडजस्ट करना पड़ सकता है.
startAssistantActivity() का इस्तेमाल करना
इस मामले में, VoiceInteractionSession वॉइस प्लैटफ़ॉर्म के यूज़र इंटरफ़ेस (यूआई) को मैनेज करने का काम, किसी सामान्य ऐक्टिविटी को सौंपता है. इस विकल्प का इस्तेमाल करने पर, लागू किए गए VoiceInteractionSession को onPrepareShow()
कॉलबैक पर अपनी डिफ़ॉल्ट कॉन्टेंट विंडो बनाने की सुविधा बंद करनी होगी. इसके लिए, onCreateContentView() का इस्तेमाल करना देखें. VoiceInteractionSession#onShow() पर, सेशन VoiceInteractionSession#startAssistantActivity() का इस्तेमाल करके वॉइस प्लैटफ़ॉर्म गतिविधि शुरू करेगा. यह तरीका, सही विंडो सेटिंग और गतिविधि फ़्लैग के साथ यूज़र इंटरफ़ेस (यूआई) को शुरू करता है.
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); } … }
इस ऐक्टिविटी और VoiceInteractionSession के बीच बातचीत बनाए रखने के लिए, इंटरनल इंटेंट या सेवा बाइंडिंग के सेट की ज़रूरत पड़ सकती है. उदाहरण के लिए, जब VoiceInteractionSession#onHide() को लागू किया जाता है, तो सेशन के पास इस अनुरोध को ऐक्टिविटी को पास करने की सुविधा होनी चाहिए.
अहम जानकारी. Automotive में, ड्राइविंग के दौरान सिर्फ़ खास तौर पर एनोटेट की गई गतिविधियां या UXR की "अनुमति वाली सूची" में शामिल गतिविधियां ही दिखाई जा सकती हैं. यह VoiceInteractionSession#startAssistantActivity() से शुरू की गई गतिविधियों पर भी लागू होता है. अपनी गतिविधि के लिए <meta-data
android:name="distractionOptimized" android:value="true"/> का इस्तेमाल करके एनोटेट करना न भूलें या इस गतिविधि को /packages/services/Car/service/res/values/config.xml फ़ाइल की systemActivityWhitelist कुंजी में शामिल करें. ज़्यादा जानकारी के लिए, ड्राइवर को ध्यान भटकाने वाले ऐप्लिकेशन के इस्तेमाल से रोकने के लिए बने दिशा-निर्देश देखें.
आवाज़ पहचानने की सुविधा लागू करना
इस सेक्शन में, आपको हॉटवर्ड का पता लगाने और उन्हें पहचानने की सुविधा की मदद से, आवाज़ पहचानने की सुविधा को लागू करने का तरीका बताया गया है. हॉटवर्ड, ट्रिगर करने वाला कोई शब्द होता है जिसे बोलकर कोई नई क्वेरी या कार्रवाई शुरू की जाती है. उदाहरण के लिए, "Ok Google" या "Hey Google".
डीएसपी हॉटवर्ड की पहचान करने की सुविधा
Android, AlwaysOnHotwordDetector की मदद से डीएसपी लेवल पर, हमेशा चालू हॉटवर्ड डिटेक्टर का ऐक्सेस देता है.
सीपीयू के कम इस्तेमाल के साथ हॉटवर्ड की पहचान करने की सुविधा लागू करने का तरीका. इस सुविधा के इस्तेमाल को दो हिस्सों में बांटा गया है:
AlwaysOnHotwordDetectorको इंस्टैंशिएट करना.- हॉटवर्ड की पहचान करने वाले साउंड मॉडल को रजिस्टर करना.
VoiceInteractionService को लागू करने पर, VoiceInteractionService#createAlwaysOnHotwordDetector() का इस्तेमाल करके हॉटवर्ड डिटेक्टर बनाया जा सकता है. इसके लिए, आपको वह कीवर्ड और स्थानीय भाषा देनी होगी जिसका इस्तेमाल आपको हॉटवर्ड की पहचान करने के लिए करना है. इस वजह से, ऐप्लिकेशन को इनमें से किसी एक वैल्यू के साथ onAvailabilityChanged() कॉलबैक मिलता है:
STATE_HARDWARE_UNAVAILABLE. डिवाइस पर डीएसपी की सुविधा उपलब्ध नहीं है. इस मामले में, सॉफ़्टवेयर हॉटवर्ड की पहचान करने की सुविधा का इस्तेमाल किया जाता है.STATE_HARDWARE_UNSUPPORTED. आम तौर पर, डीएसपी की सुविधा उपलब्ध नहीं होती. हालांकि, डीएसपी, दिए गए कीवर्ड और स्थानीय भाषा के कॉम्बिनेशन के साथ काम नहीं करता. ऐप्लिकेशन, सॉफ़्टवेयर हॉटवर्ड की पहचान करने की सुविधा का इस्तेमाल कर सकता है.STATE_HARDWARE_ENROLLED. हॉटवर्ड की पहचान करने की सुविधा अब इस्तेमाल की जा सकती है. इसेstartRecognition()तरीके का इस्तेमाल करके शुरू किया जा सकता है.STATE_HARDWARE_UNENROLLED. अनुरोध किए गए कीवर्ड के लिए कोई साउंड मॉडल उपलब्ध नहीं है. हालांकि, इसे रजिस्टर किया जा सकता है.
IVoiceInteractionManagerService#updateKeyphraseSoundModel() का इस्तेमाल करके, हॉटवर्ड की पहचान करने वाले साउंड मॉडल को रजिस्टर किया जा सकता है.
एक समय पर सिस्टम में कई मॉडल रजिस्टर किए जा सकते हैं. हालांकि, किसी AlwaysOnHotwordDetector से सिर्फ़ एक मॉडल जुड़ा होता है.
ऐसा हो सकता है कि डीएसपी हॉटवर्ड की सुविधा, सभी डिवाइसों पर उपलब्ध न हो. वीआईए डेवलपर को getDspModuleProperties()
तरीके का इस्तेमाल करके, हार्डवेयर की क्षमताओं की जांच करनी चाहिए. साउंड मॉडल को रजिस्टर करने का तरीका बताने वाला सैंपल कोड देखने के लिए, VoiceEnrollment/src/com/android/test/voiceenrollment/EnrollmentUtil.java देखें.
एक साथ कई हॉटवर्ड पहचानने की सुविधा के बारे में जानने के लिए, एक साथ कई ऑडियो कैप्चर करना लेख पढ़ें.
सॉफ़्टवेयर हॉटवर्ड की पहचान करने की सुविधा
जैसा कि ऊपर बताया गया है, हो सकता है कि डीएसपी हॉटवर्ड की पहचान करने की सुविधा सभी डिवाइसों में उपलब्ध न हो. उदाहरण के लिए, Android Emulator में डीएसपी एमुलेटर की सुविधा उपलब्ध नहीं होती. इस मामले में, आवाज़ पहचानने वाला सॉफ़्टवेयर ही एक विकल्प होता है. माइक्रोफ़ोन का ऐक्सेस कई ऐप्लिकेशन को चाहिए हो सकता है. ऐसे में, उनके काम में दखल देने से बचने के लिए, वीआईए को ऑडियो इनपुट ऐक्सेस करने के लिए इनका इस्तेमाल करना चाहिए:
- ऑडियो कैप्चर करने के लिए, MediaRecorder.AudioSource.HOTWORD का इस्तेमाल करना ज़रूरी है.
android.Manifest.permission.CAPTURE_AUDIO_HOTWORDअनुमति होनी चाहिए.
ये दोनों कॉन्स्टैंट @hide हैं और सिर्फ़ बंडल किए गए ऐप्लिकेशन के लिए उपलब्ध हैं.
ऑडियो इनपुट और आवाज़ पहचानने की सुविधा मैनेज करना
ऑडियो इनपुट को MediaRecorder क्लास का इस्तेमाल करके लागू किया जाएगा.
इस एपीआई को इस्तेमाल करने के तरीके के बारे में ज़्यादा जानने के लिए, MediaRecorder के बारे में खास जानकारी देखें. वॉइस इंटरैक्शन की सेवाओं को भी RecognitionService
क्लास का इस्तेमाल करके लागू किया जाना चाहिए. सिस्टम में मौजूद कोई भी ऐप्लिकेशन, आवाज़ की पहचान करने की सुविधा का इस्तेमाल करने के लिए, इस एपीआई का इस्तेमाल करता है. बोलकर कमांड देने की सुविधा का इस्तेमाल करने और माइक्रोफ़ोन का ऐक्सेस पाने के लिए, वीआईए के पास android.permission.RECORD_AUDIO अनुमति होनी चाहिए.
RecognitionService को लागू करने वाले ऐप्लिकेशन के पास भी यह अनुमति होनी चाहिए.
Android 10 से पहले, माइक्रोफ़ोन का ऐक्सेस एक बार में सिर्फ़ एक ऐप्लिकेशन को दिया जाता था. हालांकि, हॉटवर्ड की पहचान करने की सुविधा के लिए, यह नियम लागू नहीं होता था. इसके बारे में ऊपर बताया गया है. Android 10 से, माइक्रोफ़ोन का ऐक्सेस शेयर किया जा सकता है. ज़्यादा जानकारी के लिए, ऑडियो इनपुट शेयर करना लेख पढ़ें.
ऑडियो आउटपुट ऐक्सेस करना
जब वीआईए, बोलकर जवाब देने के लिए तैयार हो, तो इन दिशा-निर्देशों का पालन करना ज़रूरी है:
- ऑडियो फ़ोकस का अनुरोध करते समय या ऑडियो आउटपुट मैनेज करते समय, ऐप्लिकेशन को ऑडियो एट्रिब्यूट के तौर पर
AudioAttributes#USAGE_ASSISTANTऔरAudioAttributes#CONTENT_TYPE_SPEECHका इस्तेमाल करना चाहिए. - बोली पहचानने की सुविधा के दौरान,
AudioManage#AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVEका इस्तेमाल करके ऑडियो फ़ोकस का अनुरोध करना ज़रूरी है. ध्यान रखें कि जब ऑडियो फ़ोकस हटाया जाता है, तो हो सकता है कि कुछ मीडिया ऐप्लिकेशन, मीडिया निर्देशों का ठीक से जवाब न दें (मीडिया निर्देशों को पूरा करना देखें).