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

使用语音命令在android中打开另一个应用程序?,android,voice-recognition,Android,Voice Recognition,因此,我正在尝试开发一个应用程序,它使用语音识别来处理许多事件,如拨打任何电话号码、打开其他应用程序、切换设置等 到目前为止,我所做的是实现调用功能,我遇到的问题是如何打开另一个应用程序 到目前为止,我的代码是: private void promptSpeechInput() { Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerInte

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

到目前为止,我所做的是实现调用功能,我遇到的问题是如何打开另一个应用程序

到目前为止,我的代码是:

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


                }

            }
        }
    }
}
private void promptSpeechInput(){
意向意向=新意向(识别意向、行动、识别言语);
intent.putExtra(RecognizerIntent.EXTRA语言模型,RecognizerIntent.LANGUAGE模型自由形式);
intent.putExtra(RecognizerIntent.EXTRA_语言,Locale.getDefault());
intent.putExtra(RecognizerIntent.EXTRA_提示符,“语音提示符”);
试一试{
startActivityForResult(意图、请求代码、语音输入);
}捕获(ActivityNotFoundException a){
Toast.makeText(getApplicationContext(),“出错,请重试”,Toast.LENGTH\u SHORT.show();
}
}
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
开关(请求代码){
案例请求代码语音输入:{
if(resultCode==RESULT\u OK&&null!=数据){
ArrayList结果=data.getStringArrayListExtra(RecognizerIntent.EXTRA_结果);
txtSpeechInput.setText(result.get(0));
字符串arr[]=result.get(0.split(“,2”);
字符串firstWord=arr[0];
字符串secondWord=arr[1];
开关(第一个字){
案例“呼叫”:
呼叫电话(第二个字);
打破
案例“未结”:
}
}
}
}
}
现在你们可以看到,我可以使用case“open”作为第一个单词,然后继续使用它。但我不知道如何获取手机上当前安装的所有应用程序的列表。 请帮忙?

相关问题:

引用自该网站:“据我所知,谷歌只是在已安装的应用程序列表上迭代,如果找到完全匹配的应用程序,就会打开相应的应用程序。”


关于,获取设备上安装的所有应用程序/活动的列表:

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


谢谢你的链接,虽然我已经看到了。我想要的是SearchManager在我自己的应用程序中做的事情。现在它首先打开google now,然后显示结果,然后询问您是否要打开它。
ResolveInfo{151f1374 com.snapchat.android/.LandingPageActivity m=0x108000}
。List packageAppsList包含各种元组,如上面引用的元组。如何从这些信息中提取应用程序名称。非常感谢。非常感谢你的编辑。它完美地解决了我的疑问。
for (ResolveInfo res : packageAppsList ){
    //print it to logger etc.
    res.loadLabel(getPackageManager().toString();