2015-06-07 21 views
17

有沒有辦法發出語音命令是這樣的:Android應用程序集成與OK谷歌

OK GOOGLE ASK XXX一些應用程序特定的問題或指令

,並將它推出「APP」與識別的文本:「一些應用程序特定的問題或指令」

我的應用程序有語音識別作爲一種服務......但我用我的APP不能問OK谷歌可以處理的問題...

+0

是語音識別作爲服務降低電池壽命?你能解釋一下這種情況嗎? –

回答

14

當通過Voice Actions API ,你的應用程序可以註冊system actions,其中之一是'搜索'(所以你可以'搜索一些問題或命令在APP')。

過去,一些開發人員能夠submit a custom voice action request。經批准後,用戶可以通過語音與您的應用進行特定操作。這不再是一個選項。

+0

非常好......我以前沒有看過這個API ......這看起來是我需要的。 –

+0

@ r.t.s.-如果有效,請接受答案 – ianhanniballake

+0

我應該在之前發表評論...我提交了自定義語音請求......從未得到過任何反饋。 –

8

這實際上很簡單,使用內置的語音操作API您可以在線和離線模式下執行此操作。這裏一個簡短的演示給你,

首先提示用戶輸入一些聲音,

private void promptSpeechInput() { 
     Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
     intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
       RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
     intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault()); 
     intent.putExtra(RecognizerIntent.EXTRA_PROMPT, 
       getString(R.string.speech_prompt)); 
     try { 
      startActivityForResult(intent, REQ_CODE_SPEECH_INPUT); 
     } catch (ActivityNotFoundException a) { 
      Toast.makeText(getApplicationContext(), 
        getString(R.string.speech_not_supported), 
        Toast.LENGTH_SHORT).show(); 
     } 
    } 

這將打開內置的谷歌語音輸入屏幕,將採取語音輸入。現在,語音輸入後檢查結果,並獲得語音轉換成經轉換的字符串,

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     switch (requestCode) { 
     case REQ_CODE_SPEECH_INPUT: { 
      if (resultCode == RESULT_OK && null != data) { 

       ArrayList<String> result = data 
         .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); 
       // here the string converted from your voice 
      String converted_text = (result.get(0); 
      } 
      break; 
     } 

     } 
    } 

現在你可以以你想要的任何方式的字符串或將它們與預先定義的操作字符串進行比較,以執行特定的動作和更多....

UPDATE:

爲了讓應用程序說具體的命令後,如在工作「OK Google」,只需定義一個名爲「OK Google」的靜態字符串,並將每個語音輸入與此預定義的字符串進行比較。如果匹配「OK Google」字符串,則轉到下一個世界並執行說明。例如,

「OK谷歌說話的當前時間。」

在這裏,你可以比較的前兩個單詞「確定谷歌」如果你預先限定的字符串移動到下一個單詞匹配其是「說當前時間」。爲此,您可以保存一組包含您的命令的數組,如「說當前時間」會說出來的時間。

爲了讓它看起來更加智能,您可以實施後臺服務並不斷收聽用戶的語音輸入。 PS:我不確定這是否是一種有效的方式,但它只是另一種做法。

+5

雖然這適合接收應用程序請求的語音輸入,但最初的問題是讓'OK google'觸發應用程序打開,這並不是這樣做的 – ianhanniballake

+0

如果我沒有錯,「OK Google」只是一個pre谷歌用來識別命令的定義文本。這可以通過定義一個名爲「OK Google」的靜態字符串並將其與用戶的語音輸入進行比較來輕鬆完成。它匹配字符串,我們可以比較下一條指令。爲了讓它更有趣,我們可以在後臺服務中實現這個功能,以便在後臺保持對用戶的監聽。如果我的想法有任何問題,請糾正我。 @ianhanniballake –

+1

當然,您的答案依賴於活動,並且不會進行任何實時處理,因此可以使用它來觸發您通過Google應用的[語音操作API]獲得的系統範圍'ok google'樣式檢測( https://developers.google.com/voice-actions/)完全不適合,您的代碼也不能用作後臺服務。再次,不是一個錯誤的答案 - 只是不是對問題的回答。 – ianhanniballake

2

要將「OK Google」整合到您的應用中很容易,請按以下兩步操作。

首先,我們需要在manifest文件

<activity.. 
<intent-filter> 
       <action android:name="com.google.android.gms.actions.SEARCH_ACTION" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
/> 

現在我們需要在活動的onCreate

if (getIntent().getAction() != null && getIntent().getAction().equals("com.google.android.gms.actions.SEARCH_ACTION")) { 
      query = getIntent().getStringExtra(SearchManager.QUERY); 
      Log.e("Query:",query); //query is the search word    
     } 

用戶應遵循的語法來聲明由「好的,Google」檢測申報,當一位用戶說:「好的谷歌,搜索短語應用程序名稱」,谷歌首先檢查是否有一個應用程序稱爲應用程序名稱安裝已宣佈自己能夠handlin g這樣的查詢。

+2

您還需要將您的應用發佈到谷歌Play商店,否則Google Now將無法識別「應用名稱」,在「我應該注意什麼?」下看到這個傢伙的體驗。 http://blog.prolificinteractive.com/2015/11/06/implementing-google-voice-actions-into-your-android-app/ –