3

示例应用程序(步骤):

  1. 没有 EditText 控件的 Android 应用程序。
  2. 该应用程序有一个包含文本视图的活动。
  3. 在Activity的onCreate()方法中,启动应用时带上虚拟键盘即SoftKeyBoard。
  4. 按下虚拟键盘的麦克风(语音输入)按钮。
  5. 说“你好吗”。

语音输入的结果:
Android 应用程序在三个迭代中接收上述口语单词,例如
“How”
“are”
“How are you”

这是不正确的。如果你看到了,“如何”“是”这两个词在第三次迭代中重复出现。

预期结果:
应用程序应该在三个迭代中接收口语单词,例如
“How”
“are”
“you”

这是示例应用程序代码:

公共类 TestSpeechToText 扩展 Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test_url);
    /* Default display keyboard */
    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_test_url, menu);
    return true;
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    return true;
}

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    return true;
}

@Override
public boolean onKeyMultiple(int keyCode, int count, KeyEvent event) {
    String text = event.getCharacters();
    Log.d("Testing", "Text is " + event.toString());
    return true;
}

}

在这种情况下,重写方法 onKeyMultiple() 被调用三次,文本为“How”、“are”和“How are you”

注意:
1.没有EditText控件
2.xml布局只包含一个Text View

有人知道这个问题吗?如果是,如何解决?

4

2 回答 2

0

我做了一个解决方法来获取单个单词并跳过重复的句子:

@Override
public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) {
    int numOfWords = event.getCharacters().trim().split(" ").length;

    if (numOfWords == 1) {

        // Do your stuff here with event.getCharacters()
    }

    return true;

}
于 2014-12-07T18:10:09.430 回答
0

如果没有 EditText,我会自己进行 Intent 调用,而不是通过 SoftKeyboard。然后你会得到一个包含所有识别单词的数组。纯粹而简单。

private void startVoiceRecognitionActivity()
{
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
            RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Voice recognition Demo...");
    startActivityForResult(intent, REQUEST_CODE);
}

protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    if (requestCode == REQUEST_CODE && resultCode == RESULT_OK)
    {
        // Populate the wordsList with the String values the recognition engine thought it heard
        ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
        // Manipulate your data or do whatever you like with the result
    }
}
于 2012-10-29T09:13:36.040 回答