2010-09-12 28 views
3

我寫了一個小應用程序,允許用戶通過按鈕選擇他使用語音搜索的語言,而不是依靠用戶的語言偏好(有時您想用日語進行語音搜索,而無需將整個用戶界面切換爲日語)。調用android.speech.RecognizerIntent API導致連接錯誤對話框,在日誌中顯示'calling_package'警告

我正在測試我的HTC Desire/Android 2.1(Softbank-x06ht)上的應用程序。然而,當我打電話的聲音API,我得到一個「連接失敗」對話框[重試/取消],和logcat中顯示這樣的警告:

09-12 11:26:13.583: INFO/RecognitionService(545): ssfe url=http://www.google.com/m/voice-search 
09-12 10:49:45.683: WARN/RecognitionService(545): required parameter 'calling_package' is missing in IntentAPI request 

注意,我可以使用谷歌語音搜索應用程序,它的工作原理沒有問題。

根據API文檔http://developer.android.com/reference/android/speech/RecognizerIntent.html#EXTRA_CALLING_PACKAGE,calling_package參數不被開發人員使用。那麼,如果是這樣的話,爲什麼日誌會說它缺失?

我試圖自己提供參數,但它根本沒有改變結果。

private static final String TRIVOICE_CALLING_PACKAGE = "calling_package"; 
private void callSpeechWebSearch (String language) { 
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
      RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH); 
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, 
      language); 
    intent.putExtra(TRIVOICE_CALLING_PACKAGE, 
      "org.filsa.trivoice"); 

    //intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speech recognition demo"); 
    try { 
     startActivity(intent);   
    } catch (ActivityNotFoundException anfe) { 
    makeToast("ANFE:" +anfe.getMessage()); 
    } 
} 

回答

1

我有同樣的問題,並將調用包設置爲實際的調用包(不是類),然後事情工作正常。 Tmobile G2上的Android 2.2。

2

使用此代碼來獲取你的包名

intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, 
       context.getPackageName());