你需要在android中实现Speech to TextRecognizerIntent,RecognizerIntent将给出用户所说的文本版本,稍后你可以使用结果文本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
我可以在文本中使用“包含”吗?
是的,您可以使用contains 来匹配和验证您找到的结果,这是用户输入的必需文本。你应该使用contains,因为equals只会在你找到一个精确的词对词匹配的时候起作用,并且可能会有一些影响响应文本的噪音,所以更安全的选择是使用contains
我怎样才能让它先响应,然后再变成文本?
基本上使用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 );
}
}