2016-11-09 67 views
1

所以我試圖開發一種使用語音識別處理很多的事件就像調用任何一個電話號碼的應用程序,打開其他應用程序,切換設置等使用語音命令在android中打開另一個應用程序?

我所做的到現在正在實施的呼叫特性,我在哪裏卡住的地方是如何打開另一個應用程序

我的代碼到目前爲止是:

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, "Speech Prompt"); 
    try { 
     startActivityForResult(intent, REQ_CODE_SPEECH_INPUT); 
    } catch (ActivityNotFoundException a) { 
     Toast.makeText(getApplicationContext(), "Error Occured Try again",Toast.LENGTH_SHORT).show(); 
    } 
} 

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); 
       txtSpeechInput.setText(result.get(0)); 
       String arr[] = result.get(0).split(" ",2); 
       String firstWord = arr[0]; 
       String secondWord = arr[1]; 
       switch(firstWord) { 
        case "call": 
         callPhone(secondWord); 
         break; 
        case "open": 


       } 

      } 
     } 
    } 
} 

現在,你可以看到,我可以使用情況下,「開放」作爲第一個字,然後用它繼續。但我不知道如何獲取手機上當前安裝的所有應用程序的列表。 請幫忙?

回答

0

安裝在設備上的所有應用程序/活動中獲取列表:

final Intent Intent = new Intent(Intent.ACTION_MAIN, null); 
Intent.addCategory(Intent.CATEGORY_LAUNCHER); 
final List<ResolveInfo> packageAppsList = context.getPackageManager().queryIntentActivities(Intent, 0); 

讓您的相關數據,打開ResolveInfo的應用程序,多讀一些下面:

for (ResolveInfo res : packageAppsList){ 
    //print it to logger etc. 
    res.loadLabel(getPackageManager().toString(); 

https://developer.android.com/reference/android/content/pm/ResolveInfo.html

+0

'ResolveInfo {151f1374 com.snapchat.android/.LandingPageActivity m = 0x108000}'。 List packageAppsList包含各種元組,如上面所引用的元組。我應該如何從這些信息中提取應用程序名稱。非常感謝。 –

+0

@XavierJacob查看我的編輯 – sup4eli

+0

非常感謝您的編輯。它完美地解決了我的問題。 –

0

相關問題:How to enable Android Open Application voice interaction

從那裏引:「據我所知,谷歌只是在安裝應用程序的列表進行迭代,並且打開相應的應用程序,如果它找到完全匹配。」

問候,

+0

感謝您的鏈接,雖然我已經看到了。我想要的是SearchManager的功能,但在我自己的應用程序中。現在它首先打開Goog​​le,然後顯示結果,然後詢問您是否要打開它。 –

相關問題