बोलकर फ़ोन को निर्देश

बोलकर निर्देश देने की सुविधा का इंटरफ़ेस, बोलकर फ़ोन इस्तेमाल करने की सुविधा देता है. कांच में आपको वॉइस इनपुट का इस्तेमाल करने के तीन तरीके मिल सकते हैं.

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

बोलकर दिए जाने वाले मुख्य निर्देश

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

ok Glass वॉइस मुख्य मेन्यू में बोला गया निर्देश जोड़ने के लिए:

  1. बोलकर दिए जाने वाले निर्देश के लिए, एक्सएमएल में एक संसाधन बनाएं res/xml/<my_voice_trigger>.xml, जो मौजूदा बोले गए निर्देशों में से किसी एक का इस्तेमाल करता है इसमें परिभाषित किया गया है VoiceTriggers.Command. उदाहरण के लिए, यहां "दौड़ना शुरू करें" इस्तेमाल करने का तरीका बताया गया है.

    <?xml version="1.0" encoding="utf-8"?>
    <trigger command="START_A_RUN" />
    

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

    <?xml version="1.0" encoding="utf-8"?>
    <trigger command="POST_AN_UPDATE">
        <input prompt="@string/glass_voice_prompt" />
    </trigger>
    
  2. इंटेंट फ़िल्टर को रजिस्टर करने के लिए, com.google.android.glass.action.VOICE_TRIGGER कार्रवाई Android मेनिफ़ेस्ट. इंटेंट फ़िल्टर आपकी गतिविधि या सेवा को शुरू करता है अगर यह आपके बोले गए निर्देश को बोलने वाले उपयोगकर्ताओं का पता लगाता है.

    <?xml version="1.0" encoding="utf-8"?>
    <application ...>
        <activity | service ...>
            <intent-filter>
                <action android:name=
                        "com.google.android.glass.action.VOICE_TRIGGER" />
            </intent-filter>
            <meta-data android:name="com.google.android.glass.VoiceTrigger"
                android:resource="@xml/my_voice_trigger" />
        </activity | service>
        // ...
    </application>
    
  3. अपनी गतिविधि या सेवा के लिए, android:icon एट्रिब्यूट की जानकारी दें. इससे Glass, ठीक है, ग्लास टच मेन्यू.

    <activity |service
        android:icon="@drawable/my_icon" ...>
      ...
    </activity | service>
    
  4. अगर आपका बोला गया निर्देश, वॉइस प्रॉम्प्ट का इस्तेमाल करता है और कोई गतिविधि शुरू करता है, तो वीडियो में, नीचे दिए गए कोड के साथ बोले जा रहे शब्दों को टेक्स्ट में बदलने की सुविधा (जैसे, onResume()):

    ArrayList<String> voiceResults = getIntent().getExtras()
            .getStringArrayList(RecognizerIntent.EXTRA_RESULTS);
    

    अगर बोले गए निर्देश से कोई सेवा शुरू होती है, तो अतिरिक्त इंटेंट onStartCommand() कॉलबैक:

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        ArrayList<String> voiceResults = intent.getExtras()
                .getStringArrayList(RecognizerIntent.EXTRA_RESULTS);
        // ...
    }
    

पाबंदियां सेट करना

अगर आपको ग्लासवेयर चालू करने के लिए, इनमें से एक या सभी सुविधाओं की ज़रूरत है, तो इनकी जानकारी res/xml/<my_voice_trigger>.xml संसाधन में दें. यदि सुविधाएं उपलब्ध नहीं हैं, तो Glass ध्वनि आदेश को अक्षम कर देता है:

  • camera
  • network
  • microphone

    <trigger command="POST_AN_UPDATE">
        <constraints
            camera="true"
            network="true" />
    </trigger>
    

कॉन्टेक्स्ट के हिसाब से बोलकर दिए जाने वाले निर्देश

कॉन्टेक्स्ट के हिसाब से बोलकर दिए जाने वाले निर्देशों की मदद से उपयोगकर्ता, गतिविधियों में से किसी भी काम को पूरा कर सकते हैं. आपको स्टैंडर्ड Android मेन्यू एपीआई की मदद से, काम के हिसाब से बोलकर दिए जाने वाले निर्देश बनाने होते हैं. उपयोगकर्ता, मेन्यू में आइटम को टच करने के बजाय बोलकर निर्देश दे सकते हैं.

किसी खास गतिविधि के लिए, बोलकर दिए जाने वाले निर्देश चालू करने के लिए:

  1. getWindow().requestFeature(WindowUtils.FEATURE_VOICE_COMMANDS) पर कॉल करें बोलकर दिए जाने वाले निर्देशों को चालू करने के लिए, अपनी पसंद की गतिविधि में जाएँ. इस सुविधा के साथ इस सुविधा को चालू करने पर, स्क्रीन के फ़ुटर में "ok Glass" मेन्यू दिखता है इस गतिविधि पर फ़ोकस होता है.

  2. onCreatePanelMenu() बदलें और उस मामले को मैनेज करें जहां WindowUtils.FEATURE_VOICE_COMMANDS चालू है. अगर यह सुविधा चालू है, तो यहां एक बार के मेन्यू को सेटअप किया जा सकता है. जैसे, इनफ़्लेट करना मेन्यू का संसाधन या Menu.add() पर कॉल करें वॉइस मेन्यू सिस्टम बनाने का तरीका.

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

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

    public class ContextualMenuActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle bundle) {
            super.onCreate(bundle);
    
            // Requests a voice menu on this activity. As for any other
            // window feature, be sure to request this before
            // setContentView() is called
            getWindow().requestFeature(WindowUtils.FEATURE_VOICE_COMMANDS);
            setContentView(R.layout.activity_main);
        }
    
        @Override
        public boolean onCreatePanelMenu(int featureId, Menu menu) {
            if (featureId == WindowUtils.FEATURE_VOICE_COMMANDS) {
                getMenuInflater().inflate(R.menu.main, menu);
                return true;
            }
            // Pass through to super to setup touch menu.
            return super.onCreatePanelMenu(featureId, menu);
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
        @Override
        public boolean onMenuItemSelected(int featureId, MenuItem item) {
            if (featureId == WindowUtils.FEATURE_VOICE_COMMANDS) {
                switch (item.getItemId()) {
                    case R.id.dogs_menu_item:
                        // handle top-level dogs menu item
                        break;
                    case R.id.cats_menu_item:
                        // handle top-level cats menu item
                        break;
                    case R.id.lab_menu_item:
                        // handle second-level labrador menu item
                        break;
                    case R.id.golden_menu_item:
                        // handle second-level golden menu item
                        break;
                    case R.id.calico_menu_item:
                        // handle second-level calico menu item
                        break;
                    case R.id.cheshire_menu_item:
                        // handle second-level cheshire menu item
                        break;
                    default:
                        return true;
                }
                return true;
            }
            // Good practice to pass through to super if not handled
            return super.onMenuItemSelected(featureId, item);
        }
    }
    

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

    <menu xmlns:android="http://schemas.android.com/apk/res/android">
        <!-- Use the constants defined in the ContextualMenus.Command enum-->
        <item
            android:id="@+id/dogs_menu_item"
            android:title="@string/show_me_dogs">
            <menu>
                <item
                    android:id="@+id/lab_menu_item"
                    android:title="@string/labrador" />
                <item
                    android:id="@+id/golden_menu_item"
                    android:title="@string/golden" />
            </menu>
        </item>
        <item
            android:id="@+id/cats_menu_item"
            android:title="@string/show_me_cats">
            <menu>
                <item
                    android:id="@+id/cheshire_menu_item"
                    android:title="@string/cheshire" />
                <item
                    android:id="@+id/calico_menu_item"
                    android:title="@string/calico" />
            </menu>
        </item>
    </menu>
    
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
        <!-- Use the constants defined in the ContextualMenus.Command enum-->
        <item
            android:id="@+id/play_menu_item"
            android:title="PLAY_MUSIC" />
        <item
            android:id="@+id/pause_menu_item"
            android:title="PAUSE_MUSIC" />
    </menu>
    
  4. (ज़रूरी नहीं) बदलें onPreparePanel() यह जांच की जा रही है कि है या नहीं WindowUtils.FEATURE_VOICE_COMMANDS चालू है. अगर इस नीति को चालू किया जाता है, तो मेन्यू सिस्टम सेट अप करने के लिए, दूसरे तरीके का इस्तेमाल किया जा सकता है. जैसे, कुछ शर्तों के आधार पर कुछ मेन्यू आइटम जोड़ना और हटाना. आप संदर्भ के हिसाब से वॉइस मेन्यू को चालू या बंद करने के लिए true को टॉगल करें (वैल्यू false में दिखाई गई है). उदाहरण के लिए:

        private boolean mVoiceMenuEnabled;
        ...
        @Override
        public boolean onPreparePanel(int featureId, View view, Menu menu) {
            if (featureId == WindowUtils.FEATURE_VOICE_COMMANDS) {
            // toggle this boolean on and off based on some criteria
                return mVoiceMenuEnabled;
            }
            // Good practice to call through to super for other cases
            return super.onPreparePanel(featureId, view, menu);
        }
    

वॉइस और टच मेन्यू, दोनों एक साथ इस्तेमाल किए जा सकते हैं

कॉन्टेक्स्ट के हिसाब से बोलकर दिए जाने वाले निर्देश, मौजूदा Android मेन्यू के एपीआई का इस्तेमाल करते हैं. टच मेन्यू के लिए, आपके पास पहले से मौजूद कई कोड और संसाधनों का फिर से इस्तेमाल किया जा सकता है और साथ ही साथ दोनों तरह के मेन्यू काम करते हों.

आपको बस Window.FEATURE_OPTIONS_PANEL सुविधा की जांच करनी है WindowUtils.FEATURE_VOICE_COMMANDS सुविधा के अतिरिक्त कुछ तरीकों में जांच कर रहा है और फिर टच को खोलने के लिए तर्क जोड़ सकता है उपयोगकर्ता की कुछ कार्रवाइयों पर मेन्यू दिखता है, जैसे कि टैप करना.

उदाहरण के लिए, पिछली गतिविधि को बदला जा सकता है इस तरह के टच मेन्यू के लिए सहायता जोड़ने का उदाहरण (बदलावों पर टिप्पणी की जाती है):

// 1. Check for Window.FEATURE_OPTIONS_PANEL
// to inflate the same menu resource for touch menus.
@Override
public boolean onCreatePanelMenu(int featureId, Menu menu) {
    if (featureId == WindowUtils.FEATURE_VOICE_COMMANDS ||
            featureId == Window.FEATURE_OPTIONS_PANEL) {
    ...
}

// 2. Check for Window.FEATURE_OPTIONS_PANEL
// to handle touch menu item selections.
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
    if (featureId == WindowUtils.FEATURE_VOICE_COMMANDS ||
            featureId == Window.FEATURE_OPTIONS_PANEL) {
    ...
}

इन बदलावों के साथ, आप स्क्रीन पर दिखाने के लिए टैप कर सकते हैं या ok Glass कह सकते हैं आपका मेन्यू.

डेवलपमेंट के लिए, बोलकर दिए जाने वाले ऐसे निर्देशों का इस्तेमाल करना जो सबके लिए मौजूद नहीं हैं

आपको अपना ग्लासवेयर डिस्ट्रिब्यूट करने के लिए, मंज़ूरी पा चुके मुख्य ऐप्लिकेशन का इस्तेमाल करना होगा बोलकर निर्देश दें VoiceTriggers.Command और कॉन्टेक्स्ट के हिसाब से बोलकर दिए जाने वाले उन निर्देशों को ContextualMenus.Command.

अगर आपको ऐसे बोले गए निर्देशों का इस्तेमाल करना है जो GDK में उपलब्ध नहीं हैं, अपनी AndroidManifest.xml फ़ाइल में Android की अनुमति का अनुरोध किया जा सकता है:

<uses-permission
     android:name="com.google.android.glass.permission.DEVELOPMENT" />

बोलकर दिए जाने वाले ऐसे मुख्य निर्देशों का इस्तेमाल करना जो सबके लिए उपलब्ध नहीं हैं

  1. res/values/strings.xml में ऐसी स्ट्रिंग वैल्यू का एलान करें जो आपके वॉइस ट्रिगर का नाम है. इसके अलावा, वॉइस प्रॉम्प्ट का इस्तेमाल भी किया जा सकता है का इस्तेमाल करें.

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="glass_voice_trigger">read me a story</string>
        <string name="glass_voice_prompt">what story?</string>
    </resources>
    
  2. वॉइस ट्रिगर के लिए एक एक्सएमएल संसाधन बनाएं res/xml/<my_voice_trigger>.xml. बोलकर दिए जाने वाले उन निर्देशों के लिए जो सबके लिए मौजूद नहीं हैं, आपको स्वीकार किए जाने के लिए, command एट्रिब्यूट के बजाय keyword एट्रिब्यूट का इस्तेमाल किया गया बोले गए निर्देश. keyword एट्रिब्यूट, स्ट्रिंग का रेफ़रंस होना चाहिए बोलकर निर्देश देने की प्रोसेस के बारे में बता रहा है. आसान वॉइस ट्रिगर के लिए, जो गतिविधि या सेवा को तुरंत लागू करने के लिए, बस trigger एलिमेंट के बारे में बताएं:

    <?xml version="1.0" encoding="utf-8"?>
    <trigger keyword="@string/glass_voice_trigger" />
    

    एक ऐसा वॉइस ट्रिगर बनाने के लिए जो उपयोगकर्ता को अतिरिक्त वाक्य बोलने के लिए कहता है वाक्यांश शुरू करने से पहले, कोई इनपुट एलिमेंट शामिल करें साथ ही:

    <?xml version="1.0" encoding="utf-8"?>
    <trigger keyword="@string/glass_voice_trigger">
        <input prompt="@string/glass_voice_prompt" />
    </trigger>
    

कीवर्ड के हिसाब से बोलकर दिए जाने वाले ऐसे निर्देशों का इस्तेमाल करना जो सबके लिए उपलब्ध नहीं हैं

मेन्यू आइटम बनाते समय, मेन्यू आइटम के शीर्षक के लिए किसी भी टेक्स्ट का इस्तेमाल करें. उदाहरण के लिए:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Use the constants defined in the ContextualMenus.Command enum-->
    <item
        android:id="@+id/pizza_menu_item"
        android:title="@string/find_pizza" />
</menu>

बोली पहचान की सुविधा चालू की जा रही है


बोली पहचान ग्लासवेयर उपयोगकर्ताओं के बोलने का इंतज़ार करता है और टेक्स्ट को टेक्स्ट में बदलने के बाद उसे लेख में बदल दिया जाता है. गतिविधि शुरू करने के लिए:

  1. startActivityForResult() पर कॉल करें ACTION_RECOGNIZE_SPEECH इंटेंट के साथ. गतिविधि शुरू करते समय, इन इंटेंट की अतिरिक्त सुविधाओं का इस्तेमाल किया जा सकता है:
  2. onActivityResult() बोली को टेक्स्ट में बदलने की सुविधा की मदद से, EXTRA_RESULTS एक से ज़्यादा इंटेंट पर क्लिक करें. जब उपयोगकर्ता पूरी तरह बोल लेते हैं, तो इस कॉलबैक को कॉल किया जाता है.

    private static final int SPEECH_REQUEST = 0;
    
    private void displaySpeechRecognizer() {
        Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        startActivityForResult(intent, SPEECH_REQUEST);
    }
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode,
            Intent data) {
        if (requestCode == SPEECH_REQUEST && resultCode == RESULT_OK) {
            List<String> results = data.getStringArrayListExtra(
                    RecognizerIntent.EXTRA_RESULTS);
            String spokenText = results.get(0);
            // Do something with spokenText.
        }
        super.onActivityResult(requestCode, resultCode, data);
    }