2012-05-10 144 views
14

我一直在android語音識別API上工作,發現當語言設置發生變化時,語音結果會發生變化,有沒有辦法以編程方式設置它?或者是否有意在午餐的語言語言設置屏幕?還是還有什麼? 注: 我試圖用這個意圖額外:如何在android上設置語音識別語言?

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

,但它是無效的

+0

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE,語言環境。getDefault());如果gooogle支持該語言,它將運行.. – Nepster

+0

應該用於此目的的額外內容是EXTRA_LANGUAGE,而不是EXTRA_LANGUAGE_PREFERENCE。 但是,由於某種原因,LANGUAGE_EXTRA只能運行到4.3。從4.4開始,Android允許在「設置」中選擇多種語言,並且會根據系統設置始終嘗試「猜測」該語言,並完全忽略EXTRA_LANGUAGE額外。那麼,有人嗎? – matteo

回答

39

由於pargat說,這將做到這一點:

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

此外,您的應用程序可以查詢支持的語言列表通過發送RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS年齡有序廣播,像這樣:

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

其中LanguageDetailsChecker是這樣的:

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方法創建的意圖: 'VAL detailsIntent = RecognizerIntent.getVoiceDetailsIntent(上下文) activity.sendOrderedBroadcast(detailsIntent,空,LanguageDetailsChecker({languages.accept(它)}),null,Activity.RESULT_OK,null,null)' 上述示例的含義對我無效:( getVoiceDetailsIntent()did :) – Aetherna

8

你有沒有嘗試過這樣的:

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

這將工作:

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

您必須使用「en_US」而不是「en-US」。前者是Java語言環境標籤的正確格式。

建議您使用

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

避免記住這些細節。

5

我終於得到了我的應用程序,以限制語音識別結果到指定的語言輸入中加入以下額外的所有3個(交作業,例如,「JA」日本或「FR」的法語):

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不是嗎?你測試了哪些Android版本? EXTRA_LANGUAGE是唯一一個應該在這裏相關的。根據文檔,另外兩個用於查詢系統是否支持語言,而不是用於識別。所以在這裏他們應該完全沒有意義。對於我來說,它只能使用EXTRA_LANGUAGE,直到4.3,那麼從4.4開始,完全忽略了額外的內容。 – matteo

+1

@matteo右...不工作4.4 ... –

11

有沒有解決辦法,但一個hackaround ...

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

check here完整的故事。

+2

老兄我不知道你爲什麼只有1點,但這絕對是一個正確的答案。非常感謝。 – TacB0sS

+1

@ TacB0sS人們喜歡長時間的回答......我很高興它幫助你。 –

+1

我得到的最有用的答案!真。 –

-1

我用這個代碼:

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

希望你現在可以運行你的應用程序。

0

我試圖用

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

但它並沒有爲我工作(沒有采取系統語言)。 這裏的幫助下是這樣的:

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