2012-05-10 6 views
14

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

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "en-US"); 

लेकिन यह अप्रभावी था

+0

intent.putExtra (RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, लोकेल।getDefault()); ..it चला जाएगा अगर gooogle उस भाषा का समर्थन करता है .. – Nepster

+0

उस उद्देश्य को पूरा करने के लिए अतिरिक्त अतिरिक्त EXTRA_LANGUAGE है, EXTRA_LANGUAGE_PREFERENCE नहीं। हालांकि, कुछ कारणों से LANGUAGE_EXTRA केवल 4.3 तक काम करता है। 4.4 से शुरू, एंड्रॉइड सेटिंग्स में कई भाषाओं का चयन करने की अनुमति देता है, और हमेशा सिस्टम सेटिंग्स के अनुसार भाषा को "अनुमान लगाने" का प्रयास करेगा और पूरी तरह से EXTRA_LANGUAGE अतिरिक्त को अनदेखा कर देगा। तो, कोई भी? – matteo

उत्तर

39

परगट कहते हैं, यह करना होगा:

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US"); 

इसके अलावा, आपका ऐप समर्थित langu की सूची के लिए क्वेरी कर सकता है एक RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS भेजकर युग इतने की तरह प्रसारित आदेश दिया:

public class LanguageDetailsChecker extends BroadcastReceiver 
{ 
    private List<String> supportedLanguages; 

    private String languagePreference; 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Bundle results = getResultExtras(true); 
     if (results.containsKey(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE)) 
     { 
      languagePreference = 
        results.getString(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE); 
     } 
     if (results.containsKey(RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES)) 
     { 
      supportedLanguages = 
        results.getStringArrayList(
          RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES); 
     } 
    } 
} 

पूरा कोड बाहर की जांच इस GitHub परियोजना के लिए: https://github.com/gast-lib

+0

पूर्ण पैकेज –

+0

के लिए धन्यवाद मुझे लगता है कि यह आसान बनाने के लिए आशय RecognizerIntent विधि का उपयोग करने: 'वैल detailsIntent = RecognizerIntent.getVoiceDetailsIntent (संदर्भ) activity.sendOrderedBroadcast (detailsIntent, अशक्त, LanguageDetailsChecker ({languages.accept (यह)}, शून्य, गतिविधि .RESULT_OK, शून्य, शून्य) ' उपरोक्त नमूने से इरादा मेरे लिए काम नहीं करता है :( getVoiceDetailsIntent() ने किया :) – Aetherna

8

आप इस प्रयास किया है:

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US"); 
6

यह काम करेंगे

Intent detailsIntent = new Intent(RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS); 
    sendOrderedBroadcast(
      detailsIntent, null, new LanguageDetailsChecker(), null, Activity.RESULT_OK, null, null); 

जहां LanguageDetailsChecker कुछ इस तरह है :

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en_US"); 

आपको "एन-यूएस" के बजाय "en_US" का उपयोग करना होगा। पूर्व जावा लोकेल टैग का सही प्रारूप है।

यह सुझाव दिया है कि आप

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.US.toString()); 

का उपयोग इस तरह के विस्तार को याद से बचने के लिए।

5

मैं अंत में मिला किसी विशेष भाषा इनपुट करने के लिए ध्वनि पहचान परिणामों को प्रतिबंधित करने मेरे ऐप (यह सौंपने, जैसे, "जा" जापानी या "fr" के लिए फ्रेंच के लिए) के बाद एक्स्ट्रा कलाकार के सभी 3 जोड़कर:

String languagePref = "de";//or, whatever iso code... 
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, languagePref); 
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, languagePref); 
intent.putExtra(RecognizerIntent.EXTRA_ONLY_RETURN_LANGUAGE_PREFERENCE, languagePref); 

उम्मीद है कि यह किसी की मदद करेगा।

+2

क्या आपने वास्तव में उन सभी उद्देश्यों को जो आपने पास किया था शुरू करने के लिए ?? क्या यह वास्तव में काम करता था? और क्या यह अकेले EXTRA_LANGUAGE के साथ नहीं था? आपने एंड्रॉइड संस्करणों का परीक्षण किया था? EXTRA_LANGUAGE केवल एकमात्र ऐसा है जिसे यहां प्रासंगिक माना जाना चाहिए। दस्तावेज के अनुसार, अन्य दो, समर्थित भाषा के लिए सिस्टम से पूछताछ के लिए हैं, मान्यता के लिए नहीं। तो वे यहाँ पूरी तरह से अर्थहीन होना चाहिए। मेरे लिए, यह 4.3 तक अकेले EXTRA_LANGUAGE के साथ काम करता है, तो अतिरिक्त 4.4 से शुरू होने पर पूरी तरह से अनदेखा किया जाता है। – matteo

+1

@matteo सही ... 4.4 पर काम नहीं कर रहा है ... –

11

वहाँ कोई समाधान नहीं है, लेकिन एक hackaround है ...

intent.putExtra("android.speech.extra.EXTRA_ADDITIONAL_LANGUAGES", new String[]{"en"}); 

check here पूरी कहानी।

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "en-US"); 

आशा है कि आप अब अपने अनुप्रयोग चला सकते हैं:

+2

दोस्त मुझे नहीं पता कि आपके पास केवल 1 बिंदु क्यों था लेकिन यह निश्चित रूप से एक सही उत्तर है। बहुत बहुत धन्यवाद। – TacB0sS

+1

@ TacB0sS लोग लंबे उत्तरों की तरह ... अच्छी तरह से मुझे खुशी है कि यह आपकी मदद करता है। –

+1

सबसे उपयोगी उत्तर मुझे कभी मिलता है! वास्तव में। –

0

मैं

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault()); 

उपयोग करने के लिए कोशिश की, लेकिन मुझे (सिस्टम भाषा नहीं लिया) के लिए यह काम नहीं किया। इस तरह यहाँ मदद की:

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault().toString());