2015-06-18 62 views
1

我創建了一個按鈕,點擊它時的活動,開始一個Intent如下推出語音輸入:如何覆蓋Android鍵盤上的語音輸入鍵?

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speak Now"); 
startActivityForResult(intent, SPEECH_REQUEST_CODE); 

然後,我得到的結果,並在對話框中顯示它們,使用戶可以選擇最接近的匹配。

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == SPEECH_REQUEST_CODE && resultCode == RESULT_OK && data != null) { 
     final ArrayList<String> list_voice_input = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); 
     // I use this ArrayList to create a dialog. 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
} 

所以活動的工作方式如下:單擊按鈕,說話,然後彈出一個對話框,列出最接近的匹配,你可以選擇一個。

我已經使用了一個按鈕來實現這一點。但Android的鍵盤已經內置了語音輸入。當我用它說話時,它會輸出我正在說的內容,並自動檢測最接近的匹配。

我需要什麼:

我希望使用默認的鍵盤,而不是一個按鈕,當檢測到用戶選擇的話語,而不是類型(文本字段),並顯示一個對話框與最接近的匹配的框。

關於如何做到這一點的任何想法?

編輯:

我的問題被標記爲重複的,但我沒有試圖擺脫當你記錄你的聲音自帶彈出對話框。我的問題是不同的。

當您鍵入文本時,在Android鍵盤中,已經有內置的語音輸入選項。你可以用它來說文字。所以,我的問題是,不是自動打印出最接近的匹配,而是可以向用戶顯示對話框中最接近匹配的列表,並讓他們選擇一個?

+0

您想要檢測語音鍵是否被按下?所以當有人按下那個按鈕時,你可以做你的事情嗎? – Strider

+0

@Strider不,我想知道如何繼續下去。我想獲得最接近的匹配列表,而不是直接獲取打印的口頭文本,這是默認情況下發生的情況。 – Kajal

+0

@ kv.333然後你需要重寫這個鍵,並且創建一個你想要的方法。因爲我認爲你不能編輯它的當前方法。 – Strider

回答

2

不,您不能更改默認鍵盤的行爲。沒有API可以覆蓋單個密鑰的功能。如果你想這樣做,你需要自己與語音API交互,而不使用鍵盤。這是內置於Android的(假設手機已經下載了語音提供者),並且API允許語音提供者返回多個可能的結果。無論給定的語音提供商是否做(記住用戶和OEM可以安裝任何他們想要的文本提供者的語音),你必須試驗和發現。

+0

謝謝。在接受你的答案之前,我只想澄清一點。根據你的回答,獲得結果列表的唯一方法是使用我上面發佈的代碼,對嗎? – Kajal

+2

是的,假設您希望代碼可以在安裝有文本服務的任何設備上運行。也可以選擇包含你自己的(比如獅身人面像庫),或者假設有一個特定的選項(可能是Google的),這可能會允許更多選項。但是那個代碼是最一般的方法.. –