2015-02-09 91 views
10

我正在嘗試在我的應用程序中添加一個啓動Google Voice打字(或默認語音識別)的按鈕。我試過以下this tutorial。本教程令我難以置信的困惑。我導入了.jar,並將必要的權限,服務和活動添加到了我的Manifest中。但我似乎無法弄清楚如何「把它放在一起」。我想知道:如何在我的應用程序中實現Google語音輸入?

  1. 我應該從我的按鈕點擊我的主要活動調用inputMethodService?或者我的inputMethodService本質上成爲我的主要活動?
  2. IME是什麼意思?我試圖谷歌它,但它給了我的定義並沒有幫助我的理解。
  3. 當我嘗試將整個DemoInputMethodService代碼複製並粘貼到當前活動中時,出現錯誤,說我無法在此活動中擴展InputMethodService。 (導致回答問題一)

我該如何得到這個工作?

+0

只是做一個文字輸入區域的佈局。當IME鍵盤出現時,如果您已將手機配置爲「languange並輸入//語音//語音輸入」,則鍵盤將包含麥克風圖標。點擊那個....否則你可以使用SpeechRecognizer意圖。 – 2015-02-09 16:02:02

+0

我試圖擺脫這樣做。就我而言,使用自動啓動Google Voice Typing的按鈕將是一個更好的選擇,可以改善外觀和易用性。當使用SpeechRecognizer Intent時,我的手機是否會打開此Google功能? – Ethan 2015-02-09 16:57:52

+1

好的名字!無論如何,就Android而言,IME是一種輸入法編輯器。 – Ethan 2015-02-09 17:23:11

回答

0

語音識別樣本被發現,你必須在Android SDK ..

例如:

$ find $SDK_ROOT/samples -name *recogni* 


./android-19/legacy/VoiceRecognitionService/res/xml/recognizer.xml 
./android-19/legacy/VoiceRecognitionService/src/com/example/android/voicerecognitionservice 
./android-19/legacy/ApiDemos/res/layout/voice_recognition.xml 
./android-18/legacy/VoiceRecognitionService/res/xml/recognizer.xml 
./android-18/legacy/VoiceRecognitionService/src/com/example/android/voicerecognitionservice 
./android-18/legacy/ApiDemos/res/layout/voice_recognition.xml 
./android-21/legacy/VoiceRecognitionService/res/xml/recognizer.xml 
./android-21/legacy/VoiceRecognitionService/src/com/example/android/voicerecognitionservice 
./android-21/legacy/ApiDemos/res/layout/voice_recognition.xml 

任何服務應該有助於展示瞭如何做一個RecognizerIntent

的「APIDemo 「似乎包括使用RecognizerIntent。檢查那個來源。否則,請查看服務並將其刻成意圖。

+0

RecognizerIntent是否意味着它會打開並啓動Google-Voice-Typing?或者它會打開一個只能記錄幾秒鐘然後停止的語音識別器? – Ethan 2015-02-09 18:16:24

3

如果你想追隨你提到,你首先需要實現的IME(輸入法編輯器)的教程,請參閱http://developer.android.com/guide/topics/text/creating-input-method.html

這IME可以有一個普通鍵盤的外觀和感覺或只包含一個麥克風按鈕。

您的應用的用戶首先必須點擊文本字段才能啓動IME。 (請注意,設備上可能安裝了多個IME,並且必須在「設置」中明確啓用它們。)然後,用戶必須單擊麥克風按鈕才能觸發語音識別。

本教程提供了一個jar,可讓您直接調用Google的識別器。如果你通過SpeechRecognizer接口(http://developer.android.com/reference/android/speech/SpeechRecognizer.html)調用識別器,這樣用戶可以決定是使用Google還是其他的東西,這樣會更好。

SpeechRecognizer給出了一個支持方法onPartialResults的監聽器,它允許您在用戶說話時監聽識別假設。這取決於你如何展示它們。但請注意,SpeechRecognizer的規範並不保證此方法被調用。這取決於識別器服務的實施。關於谷歌的實施:它支持的內容不斷變化,它沒有公開API,甚至沒有發佈說明。

您可能可以重新使用我的項目Kõnele(http://kaljurand.github.io/K6nele/about/),其中包含SpeechRecognizer的兩個實現和使用它們的IME。其中一個實現使用Kaldi GStreamer服務器(https://github.com/alumae/kaldi-gstreamer-server)提供對任意長音頻輸入的連續識別。您需要設置您自己的服務器實例,將其移植到您想要識別的語言(除非您想使用Kõnele默認使用的愛沙尼亞語服務器)。

+0

好的,IME不適合我。我現在將檢查ApeechRecognizer接口。 – Ethan 2015-02-09 21:11:52

+0

如果我使用此接口,SpeechRecognizer會在識別它時顯示文本?與Google的語音輸入類似?或者它會記錄幾秒鐘然後關閉? – Ethan 2015-02-09 21:14:09

+0

@Ethan查看已更新的答案 – Kaarel 2015-02-10 21:14:32

0

我有同樣的問題,但經過很長時間尋找活動的連續語音聽寫,我使用pocketsphinx解決了這個問題。

我無法找到將Google Voice鍵入整合到活動上的方法,只需按照輸入方法tutorial即可。如果它讓你感到困惑,只需下載這個demo並修改它。 祝你好運!

+0

我從來沒有找到答案。我做出的決定是,大多數運行我的應用的手機都會內置某種語音識別功能。 – Ethan 2015-02-27 20:21:01

0

您可以從一個按鈕偵聽

Intent checkIntent = new Intent(); 
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); 
startActivityForResult(checkIntent, MY_DATA_CHECK_CODE); 

觸發意圖和結果可以得到

private TextToSpeech mTts; 
protected void onActivityResult(
     int requestCode, int resultCode, Intent data) { 
    if (requestCode == MY_DATA_CHECK_CODE) { 
     if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) { 
      // success, create the TTS instance 
      mTts = new TextToSpeech(this, this); 
     } else { 
      // missing data, install it 
      Intent installIntent = new Intent(); 
      installIntent.setAction(
       TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); 
      startActivity(installIntent); 
     } 
    } 
} 

參考this鏈接獲取更多信息。

相關問題