ऐप्लिकेशन डेवलपमेंट

वॉइस इंटरैक्शन ऐप्लिकेशन (वीआईए) को लागू करने के लिए, आपको ये चरण पूरे करने होंगे:

  1. VIA स्केलेटन बनाएं.
  2. (ज़रूरी नहीं) सेटअप/साइन इन फ़्लो लागू करें.
  3. (ज़रूरी नहीं) सेटिंग स्क्रीन लागू करें.
  4. मेनिफ़ेस्ट फ़ाइल में ज़रूरी अनुमतियों का एलान करें.
  5. वॉइस प्लेट का यूज़र इंटरफ़ेस (यूआई) लागू करें.
  6. आवाज़ की पहचान करने की सुविधा लागू करें (इसमें RecognitionService API को लागू करना ज़रूरी है).
  7. उच्चारण लागू करें (वैकल्पिक रूप से, आप TextToSpeech API को लागू कर सकते हैं).
  8. निर्देशों को पूरा करने की सुविधा लागू करें. इस कॉन्टेंट को इसमें देखें निर्देशों को पूरा करना.

इन सेक्शन में, ऊपर बताए गए सभी चरणों को पूरा करने का तरीका बताया गया है.

VIA स्केलेटन बनाएं

मेनिफ़ेस्ट

वॉइस इंटरैक्शन वाले किसी ऐप्लिकेशन की पहचान तब की जाती है, जब: ये चीज़ें मेनिफ़ेस्ट में शामिल होती हैं:

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" />

Voiceइंटरैक्शनService, VoiceInteractionsessionService, और Voice कब-कब का है

यहां दिए गए डायग्राम में, इनमें से हर इकाई की लाइफ़-साइकल को दिखाया गया है:

लाइफ़साइकल

पहला डायग्राम. लाइफ़साइकल

जैसा कि पहले बताया गया है, VoiceInteractionService एंट्रीपॉइंट है VIA में बदल दिया गया है. इस सेवा के मुख्य उत्तर हैं:

  • ऐसी कोई भी प्रोसेस शुरू करें जिसे तब तक चलते रहना चाहिए यह VIA ऐक्टिव है. उदाहरण के लिए, हॉटवर्ड की पहचान करना.
  • यह रिपोर्ट, बोलकर फ़ोन का इस्तेमाल करने की सुविधा देती है (Voice Assistant पर टैप करके पढ़ने की सुविधा देखें).
  • लॉक स्क्रीन (कीगार्ड) से वॉइस इंटरैक्शन सेशन लॉन्च करें.

अपने सबसे आसान रूप में, VoiceInteractService लागू करने के बाद इस तरह:

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() को लागू किया गया है को मैनेज करना ज़रूरी है Voice Assistant, टैप-टू-रीड. सिस्टम एक VoiceVoice ट्रांसक्रिप्ट सेवा का इस्तेमाल करता है किसी VoiceInteractsession के साथ इंटरैक्ट करें. यह सिर्फ़ एक ज़िम्मेदारी है, का अनुरोध करने पर नए सेशन शुरू करें.

public class MyVoiceInteractionSessionService extends VoiceInteractionSessionService {
    @Override
    public VoiceInteractionSession onNewSession(Bundle args) {
        return new MyVoiceInteractionSession(this);
    }
}

आख़िर में, VoiceVoice Sessions का हिस्सा आपके काम आ सकते हैं. एक से ज़्यादा सेशन को पूरा करने के लिए, किसी एक सेशन के इंस्टेंस का फिर से इस्तेमाल किया जा सकता है उपयोगकर्ता इंटरैक्शन. 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 के लिए पूरी सूची देखें.

सेटअप/साइन-इन फ़्लो लागू करना

सेटअप और साइन-इन इन स्थितियों में हो सकता है:

  • डिवाइस शामिल करने के दौरान (सेटअप विज़र्ड).
  • वॉइस इंटरैक्शन सेवा को स्वैप करने (सेटिंग) के दौरान.
  • ऐप्लिकेशन चुनने के बाद, पहली बार लॉन्च किए जाने पर.

सुझाए गए उपयोगकर्ता अनुभव और विज़ुअल दिशा-निर्देशों के बारे में जानने के लिए, यहां देखें पहले से लोड की गई Assistant: उपयोगकर्ता अनुभव से जुड़े दिशा-निर्देश.

वॉइस सेवा की अदला-बदली करने के दौरान सेटअप करें

उपयोगकर्ता के लिए कोई भी ऐसा VIA चुना जाना हमेशा संभव होता है जो सही तरीके से न चुना गया हो कॉन्फ़िगर किया गया. ऐसा इन वजहों से हो सकता है:

  • उपयोगकर्ता ने सेटअप विज़र्ड को पूरी तरह से छोड़ दिया या उपयोगकर्ता ने आवाज़ को स्किप कर दिया इंटरैक्शन कॉन्फ़िगरेशन का चरण.
  • उपयोगकर्ता ने कोई ऐसा VIA चुना है जो डिवाइस के दौरान कॉन्फ़िगर किए गए वीआईए से अलग है शामिल होना.

किसी भी मामले में, VoiceInteractionService के पास उपयोगकर्ता को बढ़ावा देने के कई तरीके हैं सेटअप पूरा करने के लिए:

  • सूचना रिमाइंडर.
  • जब कोई व्यक्ति बोलकर जवाब देने की कोशिश करता है, तो उसे अपने-आप भेजा जाता है.

ध्यान दें: वीआईए सेटअप फ़्लो प्रज़ेंट करने की सलाह नहीं दी जाती है इसके लिए, उन्हें साफ़ तौर पर सूचना नहीं दी जाएगी. इसका मतलब है कि वीआईए को अपने-आप ऐसा नहीं करना चाहिए डिवाइस बूट के दौरान या उपयोगकर्ता के स्विच करने के बाद HU पर कॉन्टेंट दिखाना या अनलॉक करें.

सूचना रिमाइंडर

सूचना रिमाइंडर, सेटअप की ज़रूरत के बारे में बताने का एक रुकावट पैदा करने वाला तरीका नहीं है. साथ ही, लोगों को Assistant के सेटअप का इस्तेमाल करने की सुविधा फ़्लो.

सूचना रिमाइंडर

दूसरा डायग्राम. सूचना रिमाइंडर

यह फ़्लो इस तरह से काम करेगा:

सूचना रिमाइंडर फ़्लो

तीसरी इमेज. सूचना रिमाइंडर फ़्लो

बोलकर जवाब दें

यह लागू करने का सबसे आसान फ़्लो है. इसके आधार पर, वाक्य की शुरुआत VoiceInteractionSession#onShow() कॉलबैक, जो उपयोगकर्ता को यह बताता है कि क्या करना होगा. इसके बाद, उनसे पूछें (अगर उपयोगकर्ता अनुभव से जुड़ी पाबंदी की स्थिति को ध्यान में रखते हुए सेटअप की अनुमति दी गई है) अगर वे सेटअप फ़्लो शुरू करना चाहते हैं. अगर इस समय सेटअप नहीं किया जा सकता, तो इसे इसके बारे में बताएं भी पड़ सकती है.

पहली बार इस्तेमाल करने पर सेटअप करें

उपयोगकर्ता के लिए कभी भी ऐसा VIA ट्रिगर किया जा सकता है जो सही तरीके से न हुआ हो कॉन्फ़िगर किया गया. ऐसे मामलों में:

  1. उपयोगकर्ता को इस स्थिति के बारे में बोलकर बताएं. उदाहरण के लिए, "ठीक से काम करने के लिए, मैं चाहता हूं कि आप कुछ चरण पूरे करें ... ").
  2. अगर UX पाबंदी इंजन अनुमति देता है (UX_RESTRICTIONS_NO_setup देखें), तो उपयोगकर्ता से पूछें कि क्या वह VIA सेटअप प्रोसेस पूरी करें और फिर VIA की सेटिंग स्क्रीन खोलें.
  3. अगर ऐसा नहीं है, तो (उदाहरण के लिए, अगर उपयोगकर्ता गाड़ी चला रहा है), तो उपयोगकर्ता के लिए सूचना छोड़ें जब ऐसा करना सुरक्षित हो, तो विकल्प पर क्लिक करें.

वॉइस इंटरैक्शन सेटअप स्क्रीन बनाएं

सेटअप और साइन-इन स्क्रीन, नियमित गतिविधियों के तौर पर बनाई जानी चाहिए. ज़्यादा जानकारी के लिए, इसमें यूज़र इंटरफ़ेस (यूआई) डेवलपमेंट के लिए, उपयोगकर्ता अनुभव और विज़ुअल से जुड़े दिशा-निर्देश पहले से लोड की गई Assistant: उपयोगकर्ता अनुभव से जुड़े दिशा-निर्देश.

सामान्य दिशा-निर्देश:

  • वीआईए को सेटअप करने में उपयोगकर्ताओं को किसी भी समय रुकावट डालने और फिर से सेटअप करने की सुविधा मिलनी चाहिए.
  • अगर UX_RESTRICTIONS_NO_SETUP की पाबंदी लागू है, तो सेटअप की अनुमति नहीं दी जानी चाहिए. जानकारी के लिए, यह देखें ड्राइवर का ध्यान भटकने से रोकने के लिए बने दिशा-निर्देश.
  • सेटअप स्क्रीन, हर वाहन के डिज़ाइन सिस्टम से मेल खानी चाहिए. सामान्य स्क्रीन लेआउट, आइकॉन, रंग, और दूसरे पहलू, यूज़र इंटरफ़ेस (यूआई) के बाकी हिस्से से मेल खाने चाहिए. यहां जाएं: पसंद के मुताबिक बनाएं देखें.

सेटिंग स्क्रीन लागू करना

सेटिंग इंटिग्रेशन

चौथी इमेज. सेटिंग इंटिग्रेशन

सेटिंग स्क्रीन पर, Android की सामान्य गतिविधियां की जाती हैं. अगर लागू किया जाता है, तो उनका एंट्री पॉइंट VIA के हिस्से के रूप में res/xml/interaction_service.xml में बताया जाना चाहिए मेनिफ़ेस्ट (देखें मेनिफ़ेस्ट). सेटिंग सेक्शन, सेटअप और साइन-इन जारी रखने के लिए बेहतर जगह है (अगर उपयोगकर्ता ने साइन-इन नहीं किया हो इसे) या ज़रूरत के हिसाब से साइन-आउट करने या उपयोगकर्ता बदलने का विकल्प दें. सेटअप की तरह ऊपर बताई गई स्क्रीन के लिए, इन स्क्रीन पर ये चीज़ें होनी चाहिए:

मेनिफ़ेस्ट फ़ाइल में ज़रूरी अनुमतियों का एलान करें

वीआईए के लिए ज़रूरी अनुमतियों को तीन कैटगरी में बांटा जा सकता है:

  • सिस्टम सिग्नेचर की अनुमतियां. ये अनुमतियां हैं यह सिर्फ़ पहले से इंस्टॉल किए गए, सिस्टम से साइन किए गए APKs को दिया जाता है. उपयोगकर्ता अनुमति नहीं दे सकते ये अनुमतियां हैं, तो सिर्फ़ OEM अपने सिस्टम की इमेज बनाते समय यह अनुमति दे सकते हैं. हस्ताक्षर की अनुमतियां पाने के बारे में ज़्यादा जानकारी के लिए, सिस्टम से खास अनुमति मिलने वाली अनुमतियां दें लेख पढ़ें.
  • खतरनाक अनुमतियां. ये वे अनुमतियां हैं जिनके लिए उपयोगकर्ता को ज़रूरी शर्तें पूरी करनी होंगी अनुमतियां देने के लिए, अनुमतियां कंट्रोलर डायलॉग का इस्तेमाल करें. OEM इनमें से कुछ संसाधन पहले ही दे सकता है की अनुमतियां देनी होंगी. हालांकि, इस डिफ़ॉल्ट सेटिंग को देखते हुए एक डिवाइस से दूसरे डिवाइस पर स्विच हो सकता है. ऐप्लिकेशन के पास ये अनुरोध करने की अनुमति होनी चाहिए अनुमतियों की ज़रूरत पड़ेगी.
  • अन्य अनुमतियां. ये ऐसी सभी दूसरी अनुमतियां हैं उन्हें उपयोगकर्ता की अनुमति की ज़रूरत नहीं होती. ये अनुमतियां अपने-आप मिल जाती हैं को ट्रैक करने की सुविधा मिलती है.

जैसा कि ऊपर बताया गया है, नीचे दिया गया सेक्शन सिर्फ़ उन अनुरोधों पर फ़ोकस करता है जिनसे अनुरोध किया जा सकता है खतरनाक अनुमतियां हैं. अनुमतियों का अनुरोध सिर्फ़ तब किया जाना चाहिए, जब उपयोगकर्ता साइन-इन या सेटिंग स्क्रीन पर.

अगर ऐप्लिकेशन के पास ऑपरेट करने के लिए ज़रूरी अनुमतियां नहीं हैं, तो हमारा सुझाव है कि आप समस्या को ख़ास तौर पर और वह अधिकार उपलब्ध कराने के लिए सूचना जिसका इस्तेमाल उपयोगकर्ता कर सके VIA सेटिंग स्क्रीन पर वापस जाएँ. ज़्यादा जानकारी के लिए, 1. रिमाइंडर.

सेटिंग स्क्रीन पर जाकर अनुमतियों का अनुरोध करें

खतरनाक अनुमतियों का अनुरोध, सामान्य ActivityCompat#requestPermission() तरीके (या इसके बराबर के तरीके) का इस्तेमाल करके किया जाता है. अनुमतियों के लिए अनुरोध करने का तरीका जानने के लिए, यहां जाएं ऐप्लिकेशन अनुमतियों का अनुरोध करें.

अनुमतियां मांगें

पांचवी इमेज. अनुमतियां मांगें

सूचना लिसनर की अनुमति

टीटीआर फ़्लो को लागू करने के लिए, वीआईए को सूचना लिसनर. यह अनुमति नहीं है, बल्कि ऐसा कॉन्फ़िगरेशन जो सिस्टम को रजिस्टर किए गए उपयोगकर्ताओं को सूचनाएं भेजने की अनुमति देता है श्रोताओं के लिए. यह जानने के लिए कि VIA को इस जानकारी का ऐक्सेस दिया गया है या नहीं, ऐप्लिकेशन ये काम कर सकते हैं:

अगर यह ऐक्सेस पहले से नहीं दिया गया है, तो वीआईए को उपयोगकर्ता को उच्चारण के कॉम्बिनेशन का इस्तेमाल करके, कार की सेटिंग में सूचना के ऐक्सेस वाला सेक्शन और सूचनाएं पाएं. नीचे दिए गए कोड का इस्तेमाल, सेटिंग ऐप्लिकेशन:

private void requestNotificationListenerAccess() {
    Intent intent = new Intent(Settings
        .ACTION_NOTIFICATION_LISTENER_SETTINGS);
    intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
    startActivity(intent);
}

वॉइस प्लेट का यूज़र इंटरफ़ेस (यूआई) लागू करना

जब VoiceInteractionSession को onShow() कॉलबैक मिलता है, वॉइस प्लेट का यूज़र इंटरफ़ेस (यूआई) भी दिख सकता है. वॉइस प्लेट को लागू करने से जुड़े विज़ुअल और उपयोगकर्ता अनुभव से जुड़े दिशा-निर्देशों के लिए,यहां जाएं पहले से लोड की गई Assistant: उपयोगकर्ता अनुभव से जुड़े दिशा-निर्देश.

वॉइस प्लेट दिखाई जा रही है

छठी इमेज. वॉइस प्लेट दिखाई जा रही है

इस यूज़र इंटरफ़ेस (यूआई) को लागू करने के दो विकल्प हैं:

  • 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() को शुरू किया जाता है, तो सत्र के दौरान यह अनुरोध गतिविधि में भेजा जा सकता है.

अहम जानकारी. ऑटोमोटिव में, सिर्फ़ खास तौर पर एनोटेट किए गए यूएक्सआर "अनुमतियों की सूची" में शामिल गतिविधियां या गतिविधियां इस समय दिखाया जा सकता है ड्राइविंग. यह, इससे शुरू की गई गतिविधियों पर लागू होता है VoiceInteractionSession#startAssistantActivity() भी. इसे याद रखें <meta-data android:name="distractionOptimized" android:value="true"/> के साथ अपनी गतिविधि के बारे में जानकारी दें या इसे शामिल करें /packages/services/Car/service/res/values/config.xml की systemActivityWhitelist कुंजी में गतिविधि फ़ाइल से लिए जाते हैं. ज़्यादा जानकारी के लिए, Driver देखें ध्यान भटकने के बारे में दिशा-निर्देश.

आवाज़ पहचानने की सुविधा लागू करें

इस सेक्शन में, आपको आवाज़ पहचानने की सुविधा के ज़रिए आवाज़ पहचानने की सुविधा को लागू करने का तरीका पता चलेगा और हॉटवर्ड की पहचान करने की सुविधा मिलती है. हॉटवर्ड एक ऐसा ट्रिगर शब्द है जो नई क्वेरी शुरू करने के लिए इस्तेमाल किया जाता है आवाज़ का इस्तेमाल करें. उदाहरण के लिए, "Ok Google" या "Ok Google" कहें.

डीएसपी हॉटवर्ड पहचान

Android, डीएसपी लेवल पर हमेशा चालू हॉटवर्ड डिटेक्टर का ऐक्सेस देता है. इसके लिए AlwaysOnHotwordDetector का माध्य. कम सीपीयू के साथ हॉटवर्ड पहचान को लागू करने का तरीका बताया गया है. इस सुविधा का इस्तेमाल इन्हें दो भागों में बांटा गया है:

  • AlwaysOnHotwordDetector का इंस्टैंशिएट करना.
  • हॉटवर्ड का पता लगाने वाले साउंड मॉडल का नाम दर्ज करना.

Voiceइंटरैक्शनService लागू करने के विकल्प का इस्तेमाल करके, हॉटवर्ड डिटेक्टर बनाया जा सकता है VoiceInteractionService#createAlwaysOnHotwordDetector(), कोई कीफ़्रेज़ और स्थान-भाषा पास करना जिसे वे खोज के लिए इस्तेमाल करना चाहते हैं. इस वजह से, ऐप्लिकेशन को onAvailabilityChanged() मिलता है कॉलबैक के लिए, नीचे दी गई संभावित वैल्यू में से किसी एक का इस्तेमाल करें:

  • STATE_HARDWARE_UNAVAILABLE. इस पर DSP क्षमता उपलब्ध नहीं है डिवाइस. इस मामले में, सॉफ़्टवेयर हॉटवर्ड की पहचान करने का इस्तेमाल किया जाता है.
  • STATE_HARDWARE_UNSUPPORTED. DSP सहायता सामान्य रूप से उपलब्ध नहीं है, लेकिन DSP दिए गए कीफ़्रेज़ और स्थान संयोजन का समर्थन नहीं करता है. ऐप्लिकेशन, इस्तेमाल के लिए ऑप्ट-इन कर सकता है सॉफ़्टवेयर के हॉटवर्ड की पहचान.
  • STATE_HARDWARE_ENROLLED. हॉट वर्ड डिटेक्शन अब तैयार है और इसे ऐसे शुरू किया जा सकता है startRecognition() तरीके को कॉल करने का तरीका.
  • STATE_HARDWARE_UNENROLLED. अनुरोध किए गए कीफ़्रेज़ के लिए साउंड मॉडल नहीं है उपलब्ध है, लेकिन रजिस्टर किया जा सकता है.

हॉटवर्ड का पता लगाने वाले साउंड मॉडल रजिस्टर करने के लिए, IVoiceInteractionManagerService#updateKeyphraseSoundModel() का इस्तेमाल किया जा सकता है. सिस्टम में, एक समय पर एक से ज़्यादा मॉडल रजिस्टर किए जा सकते हैं. हालांकि, उनमें से सिर्फ़ एक को रजिस्टर किया जा सकता है मॉडल AlwaysOnHotwordDetector से जुड़ा हुआ है. ऐसा हो सकता है कि डीएसपी हॉटवर्ड की पहचान करने की सुविधा सभी डिवाइसों पर उपलब्ध न हो. वीआईए डेवलपर को getDspModuleProperties() का इस्तेमाल करके हार्डवेयर की क्षमताओं की जांच करनी चाहिए तरीका. सैंपल कोड को दिखाने के लिए साउंड मॉडल को रजिस्टर करने का तरीका जानने के लिए, VoiceEnrollment/src/com/android/test/voiceenrollment/EnrollmentUtil.java पर जाएं. इसके बारे में एक साथ कैप्चर देखें एक साथ कई हॉटवर्ड की पहचान करने की सुविधा.

सॉफ़्टवेयर हॉटवर्ड का पता लगाना

जैसा कि ऊपर बताया गया है, हो सकता है कि DSP हॉटवर्ड की पहचान करने की सुविधा सभी भाषाओं में उपलब्ध न हो डिवाइस (उदाहरण के लिए, Android एम्युलेटर, DSP एम्युलेशन उपलब्ध नहीं कराता). इस मामले में, इसका सिर्फ़ एक विकल्प है, सॉफ़्टवेयर की आवाज़ की पहचान करना. दूसरे लोगों के काम में दखल देने से बचने के लिए जिन ऐप्लिकेशन को माइक्रोफ़ोन के ऐक्सेस की ज़रूरत हो सकती है उन्हें वीआईए को ऑडियो इनपुट ऐक्सेस करने के लिए, इनका इस्तेमाल करना होगा:

ये दोनों कॉन्सटेंट @hide हैं और सिर्फ़ बंडल किए गए ऐप्लिकेशन के लिए उपलब्ध हैं.

ऑडियो इनपुट और आवाज़ पहचानने की सुविधा मैनेज करें

ऑडियो इनपुट को MediaRecorder क्लास का इस्तेमाल करके लागू किया जाएगा. इस एपीआई का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, MediaRecorder देखें खास जानकारी. वॉइस इंटरैक्शन सेवाएं भी RecognitionService हो सकती हैं क्लास लागू करना. सिस्टम में मौजूद जिस ऐप्लिकेशन को आवाज़ की पहचान करने की ज़रूरत होती है वह इन ऐप्लिकेशन का इस्तेमाल करता है: ऐक्सेस करना होगा. आवाज़ की पहचान करने और माइक्रोफ़ोन का ऐक्सेस पाने के लिए, वीआईए android.permission.RECORD_AUDIO होल्ड होना चाहिए. RecognitionService को ऐक्सेस करने वाले ऐप्लिकेशन लागू करने के बाद भी यह अनुमति बनी रहेगी.

Android 10 से पहले, माइक्रोफ़ोन का ऐक्सेस सिर्फ़ एक ऐप्लिकेशन को समय (हॉटवर्ड की पहचान को छोड़कर, ऊपर देखें). Android 10 और इसके बाद के वर्शन में, माइक्रोफ़ोन का ऐक्सेस शेयर किया जा सकता है. ज़्यादा जानकारी के लिए, शेयर करना देखें ऑडियो इनपुट.

ऑडियो आउटपुट ऐक्सेस करें

जब VIA बोलकर जवाब देने के लिए तैयार हो, तो यह ज़रूरी है कि दिशा-निर्देशों के इस अगले सेट का पालन करें:

  • ऑडियो फ़ोकस का अनुरोध करते समय या ऑडियो आउटपुट को मैनेज करते समय, ऐप्लिकेशन ऑडियो एट्रिब्यूट के तौर पर, AudioAttributes#USAGE_ASSISTANT और AudioAttributes#CONTENT_TYPE_SPEECH का इस्तेमाल करना चाहिए.
  • बोली की पहचान करने के दौरान, AudioManage#AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE के साथ ऑडियो फ़ोकस का अनुरोध करना ज़रूरी है. ध्यान रखें, हो सकता है कि कुछ मीडिया ऐप्लिकेशन, मीडिया के निर्देशों पर ठीक से प्रतिक्रिया न दें (मीडिया से जुड़े निर्देश पूरे करना देखें) फ़ोकस को हटा दिया जाता है.