如何通过编程方式启动Google Now语音搜索?

20

我想在用户按下按钮时启动Google Now语音搜索。然而,我在文档中找不到启动搜索的Intent。

有没有人知道如何启动Google Now语音搜索的活动?

3个回答

11

语音输入的呼叫活动:

/* Call Activity for Voice Input */
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "en-US");

try {
    startActivityForResult(intent, 1);
} catch (ActivityNotFoundException a) {
    Toast.makeText(context, "Oops! Your device doesn't support Speech to Text",Toast.LENGTH_SHORT).show();
}

以字符串形式获取输入:

(我用它来设置搜索视图中的文本,并搜索该值)

/* When Mic activity close */
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) {
    case 1: {
        if (resultCode == Activity.RESULT_OK && null != data) {
            String yourResult = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS).get(0);
        }
        break;
    }
    }
}

我可以在Service中使用Google语音命令吗?也就是说,无论用户何时说话,我都能够检测到,即使手机处于锁定模式下,我也能够检测到吗? - Umang Kothari

10

使用ACTION_RECOGNIZE_SPEECH

private static final int RECOGNIZER_REQ_CODE = 1234;

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
startActivityForResult(intent, RECOGNIZER_REQ_CODE);

请注意,您必须使用startActivityForResult()而不是startActivity(),因为后者不受支持。有关详细信息,请参阅上面链接的文档。


我正在测试这段代码,但它无法打开Google Now语音搜索,也无法处理任何语音操作。这是它应该做的吗? - lisovaccaro
我可以在Service中使用Google语音命令吗?也就是说,无论用户说什么,我都能够检测到手机是否处于锁定模式下? - Umang Kothari
这个不能像普通的语音搜索那样通过意图(但在onActivityResult中)处理吗? - User
@Ixx,没错。你需要在onActivityResult()中处理结果。 - ozbek
startActivityForResult()也已经被弃用了。 - Reza Saadati

8
您需要仅设置Action为android.intent.action.VOICE_ASSIST来启动一个Activity,然后Google Now语音识别器会弹出。您可以尝试使用开发者工具进行此操作:
adb shell am start -a android.intent.action.VOICE_ASSIST

3
根据这个代码,这是我使用的工作代码:Intent googleNowIntent = new Intent("android.intent.action.VOICE_ASSIST"); startActivity(googleNowIntent); - rob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接