2012-08-14 21 views
7

की 'तैयार' ध्वनि अक्षम करें मैं एक टैबड खंड गतिविधि के अंदर RecognitionListener लागू करता हूं। क्या होता है कि उपयोगकर्ता के आसपास स्क्रॉल होता है, श्रोता जो लागू होता है वह टुकड़ा बनाया/नष्ट हो जाता है और मेरे नेक्सस 7 और गैलेक्सी नेक्सस पर आप रेगोनिशन लिस्टर से जुड़ी ध्वनि सुनते हैं, या शायद इसका उपयोग SpeechRecognizer, उपयोग के लिए तैयार हो रहा है। जो भी कक्षा ध्वनि का कारण है, मैं उपयोगकर्ता को इसे अक्षम करने की अनुमति देना चाहता हूं। मुझे पता है कि वर्तमान में मेरा मुद्दा यह है कि मैं उपयोगकर्ताओं के ध्यान के बिना सुन रहा हूं जिसे मैं हल कर रहा हूं; हालांकि, मैं अभी भी डिफ़ॉल्ट रूप से ध्वनि नहीं सुनना चाहता हूं और उपयोगकर्ता को अधिसूचना ध्वनि में चुनने देना पसंद करता हूं।मान्यता श्रोता

तो मेरा सवाल यह है कि श्रोता से संबंधित अधिसूचना ध्वनि को अक्षम करना संभव है? मैं दस्तावेज़ों में इसे खोजने में असमर्थ हूं।

+2

मुझे लगता है कि ध्वनि भाषण मान्यता सेवा द्वारा उत्पन्न होता है, जिसका अर्थ यह है कि आपका ऐप बदल सकता है, खासकर जब से मुझे सिस्टम सेटिंग्स या आधिकारिक आवाज खोज पॉपअप में उस ध्वनि के लिए कोई विकल्प नहीं दिखता है। आप भाषण मान्यता के दौरान वॉल्यूम को म्यूट करने का प्रयास कर सकते हैं, लेकिन यह चल रहे किसी भी पृष्ठभूमि संगीत को भी म्यूट करेगा। – zapl

+0

पहचान श्रोता शुरू होने पर पृष्ठभूमि संगीत किसी भी तरह से कट जाता है। यदि संभव हो तो मैं एक हैक का उपयोग करने से बचना पसंद करूंगा। विचार के लिए प्रॉप्स! –

उत्तर

14

जैसा कि ज़ैप्पल ने कहा कि ऐसा करने के लिए कोई सीधी विधि नहीं है लेकिन आप सिस्टम वॉल्यूम को म्यूट करने का प्रयास कर सकते हैं और जैसा कि, टेनेंट ने कहा था कि आप किसी भी प्रकार की हैक से परहेज कर रहे हैं। तो मुझे कहना होगा कि ऐसा करने के लिए कोई रास्ता नहीं है, लेकिन फिर भी मैं उन लोगों के लिए यह चाल समाधान साझा कर रहा हूं जो एक ही मुद्दे से पीड़ित हैं और "हैक" चाल को ध्यान में रख सकते हैं। बस निराशा के अपने घंटों को बचाओ।

उस विशेष समय के लिए सिस्टम वॉल्यूम म्यूट करें और उसके बाद अन-म्यूट करें। यह करने के लिए कैसे:

अपनी कक्षा में, निम्न वस्तुओं

private AudioManager mAudioManager; 
private int mStreamVolume = 0; 

बनाने अपने onCreate विधि में निम्नलिखित है।

mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 

जब आप वाक् पहचान के लिए सुन शुरू,

speechRecognizer.startListening(intent); // this method make that annoying sound 
mStreamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); // getting system volume into var for later un-muting 
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0); // setting system volume to zero, muting 

निम्न उपाय अपनाते हैं अपने भाषण में RecognitionListener इंटरफ़ेस एक विधि onReadyForSpeech होना चाहिए।

class MyRecognitionListener implements RecognitionListener   
{ 
    public void onReadyForSpeech(Bundle params) 
    { 
    // this methods called when Speech Recognition is ready 
    // also this is the right time to un-mute system volume because the annoying sound played already 
    mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mStreamVolume, 0); // again setting the system volume back to the original, un-mutting 
    } 
} 

इस तरह आप इस कष्टप्रद ध्वनि के साथ एक चाल खेल सकते हैं। जाहिर है कि किसी भी अन्य ध्वनि भी एक सेकंड के लिए म्यूट होगा।

+1

मैं फ़ंक्शन 'सार्वजनिक शून्य पर परिणाम (बंडल परिणाम)' में वॉल्यूम को रीसेट करता हूं। क्योंकि भाषण मान्यता के बाद एक और आवाज है। – William

3

पिछला उत्तर ठीक है सिवाय इसके कि यह एक नल पॉइंटर अपवाद (getStreamVolume को शून्य ऑब्जेक्ट पर कॉल किया जा रहा है) के कारण दुर्घटनाग्रस्त हो जाएगा। कि ठीक करने के लिए, getStreamVolume लाइन जोड़ने से पहले:

AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

0

आप stop the end sound चाहते हैं और साथ ही, आप onResults में ध्वनि अनम्यूट और onReadyForSpeech के बजाय onError कर सकते हैं।

private Handler mHandler = new Handler(); 

RecognitionListener तरीके::

@Override 
public void onResults(Bundle results) { 
    // Your logic here 
    startAudioSound(); 
} 

@Override 
public void onError(int errorCode) { 
    // Your logic here 
    startAudioSound(); 
} 

private void startAudioSound(long delay) { 
    mHandler.postDelayed(() -> { 
     mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mStreamVolume, 0); // again setting the system volume back to the original, un-mutting 
    }, 300); 
} 

मैं एक 300 मिलीसेकंड देरी के साथ परीक्षण किया है और यह काम करता

एक सदस्य चर के रूप में एक हैंडलर बनाएँ। छोटी देरी भी काम कर सकती है।

संबंधित मुद्दे