使用语音命令在android中打开另一个应用程序

时间:2016-11-09 15:23:11

标签: android voice-recognition

因此,我正在尝试开发一个应用程序,该应用程序使用语音识别来处理许多事件,例如拨打任何电话号码,打开其他应用程序,切换设置等。

到目前为止我所做的是实现调用功能,我被困的地方是如何打开另一个应用程序

我的代码到现在为止:

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":


                }

            }
        }
    }
}

现在您可以看到我可以使用“开放”作为第一个单词,然后继续使用它。但我不知道如何获取当前安装在手机上的所有应用程序的列表。 请帮助?

2 个答案:

答案 0 :(得分:0)

相关问题:How to enable Android Open Application voice interaction

从那里引用:“据我所知,谷歌只是迭代已安装的应用程序列表,并在找到完全匹配时打开相应的应用程序。”

此致

答案 1 :(得分: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