如何使用语音搜索打开相机?

时间:2016-12-28 17:45:55

标签: java android android-studio

我是Android开发的新手。我正在尝试建立一个语音助手,我希望它在我说出特定的单词时打开相机。我知道如何将语音转换为文本,但我仍然坚持打开相机。

if (Text.getText().toString().equals("Launch camera")){
  saySomething("Launching camera");
  // How do I make it launch the camera?
}

编辑:

到目前为止,我的应用程序将语音转换为文本,然后查找是否等于命令并以此方式响应。我有两个问题。

  1. 我可以在文本中使用“包含”吗?

  2. 如何让它先响应并稍后转换成文本?

  3. 代码

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    
        switch (requestCode) {
            case RESULT_SPEECH: {
                if (resultCode == RESULT_OK && null != data) {
                    ArrayList<String> text = data
                            .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
                    Text.setText(text.get(0));
                }
                if (Text.getText().toString().equals("Hello")){
                    saySomething("Hello");
                }
            }
    
        }
    }
    

1 个答案:

答案 0 :(得分:4)

您需要在android中实现Speech to Text RecognizerIntentRecognizerIntent会提供用户所说的文本版本,稍后您可以使用结果文本result.contains("Launch camera")来验证结果文字包含您想要的操作,它基本上会为您提供可能的结果列表,您可以通过所有结果来匹配您的input

@Override
public void onResults(Bundle results) {
    List<String> list=results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
    for(String s: list)
    {
        if(s.contains("Launch camera"))
        {
         dispatchTakePictureIntent()
         // call the function to take picture 
         break;
        }
    }
}

将以下代码添加到您的班级

// constant variable for request code 
static final int REQUEST_IMAGE_CAPTURE = 1;

// function to open the camera app using explicit intent 
    private void dispatchTakePictureIntent() {
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
            startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
        }
    }

稍后您将收到onActivityResult中的回复,您可以从data intent

获取图片
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     // verify the successful completion of picture taken
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {

        // get the bundle 
        Bundle extras = data.getExtras();

        // imageBitmap will hold the image you are looking for 
        Bitmap imageBitmap = (Bitmap) extras.get("data");

        // optionally you can display this pic in some ImageView or can delete this line
        mImageView.setImageBitmap(imageBitmap);
    }
}

Code implementation

Android Speech to Text Example

Taking Photos Simply

  

我可以使用&#34;包含&#34;对于文本?

是的,您可以使用contains来匹配并验证您找到的结果,即用户输入的必需文本。您应该使用contains,因为equals仅在您找到确切的单词匹配时才有效,并且可能存在一些可能影响响应文本的噪音,因此更安全的选择是使用contains < / p>

  

如何让它先响应并稍后再转换成文本?

基本上使用RecognizerIntent,输入已经转换为文本,您还需要输入文本以便稍后将其显示在TextView中,这样您就可以先启动相机意图,然后显示文本拍摄照片时将匹配内容存储到某个String变量中,然后使用该变量将其显示在TextView

String inputcommand="";

@Override
public void onResults(Bundle results) {
    List<String> list=results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
    for(String s: list)
    {
        if(s.contains("Launch camera"))
        {
            // store your match in global variable to use it later
            inputcommand = s;

            dispatchTakePictureIntent()
            // respond it first  
         break;
        }
    }
}

图片成功捕获后,您可以显示文本

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        ...            // same above mentioned code

        // display your input in TextView
        Text.setText(inputcommand );
    }
}