我是Android开发的新手。我正在尝试建立一个语音助手,我希望它在我说出特定的单词时打开相机。我知道如何将语音转换为文本,但我仍然坚持打开相机。
if (Text.getText().toString().equals("Launch camera")){
saySomething("Launching camera");
// How do I make it launch the camera?
}
编辑:
到目前为止,我的应用程序将语音转换为文本,然后查找是否等于命令并以此方式响应。我有两个问题。
我可以在文本中使用“包含”吗?
如何让它先响应并稍后转换成文本?
代码
@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");
}
}
}
}
答案 0 :(得分:4)
您需要在android中实现Speech to Text
RecognizerIntent
,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);
}
}
Android Speech to Text Example
我可以使用&#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 );
}
}