【问题标题】:speech recognition gets unknown issue in android语音识别在android中出现未知问题
【发布时间】:2013-03-30 09:34:08
【问题描述】:

我正在尝试制作一个应用程序,当使用 android tts 来电时,它会说出来电者的联系人姓名(你想参加吗?)。根据用户的回复,呼叫应该参加或结束。在这里我总是遇到语音识别问题(显示未知问题),我在这里给出我的代码,任何人都可以帮助我解决这个问题。从最近几天开始我就对此感到震惊,任何帮助都会很明显..

  public class myPhoneStateChangeListener extends PhoneStateListener
{
    speechcontact clsspcntct = new speechcontact();
    @Override
    public void onCallStateChanged(int state, String incomingNumber) {
        super.onCallStateChanged(state, incomingNumber);
        if (state == TelephonyManager.CALL_STATE_RINGING)
        {
            String phoneNumber =   incomingNumber;
            String ContactName = objUtility.getContactName2(context,phoneNumber);
                mAudioManager.getStreamVolume(AudioManager.STREAM_RING);
                mAudioManager.setStreamMute(AudioManager.STREAM_RING, true);
                speakWords(ContactName);
        }

        if(state == TelephonyManager.CALL_STATE_IDLE && ph_state==1)
        {
            mAudioManager.setStreamMute(AudioManager.STREAM_RING, false);
        }

    }
    @Override
public void onInit(int initStatus)
{
    if (initStatus == TextToSpeech.SUCCESS) {
             if(myTTS.isLanguageAvailable(Locale.ENGLISH)==TextToSpeech.LANG_AVAILABLE)
            myTTS.setLanguage(Locale.ENGLISH);
    }
    else if (initStatus == TextToSpeech.ERROR) {
        Log.d("speech log", "Sorry! Text To Speech failed...");
    }   
}

   public void speakWords(String speech)
  {
      myTTS.speak("you have call from"+speech+"do you want to    attend",TextToSpeech.QUEUE_FLUSH, null);


    new Timer().schedule(new TimerTask() {          
        @Override
        public void run()
        {
            startVoiceRecognitionActivity();     
        }
    }, 5000);

}


  public void startVoiceRecognitionActivity()
{
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Voice recognition Demo...");

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

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == REQUEST_CODE && resultCode == RESULT_OK)
    {
        String spch = data.getStringExtra(RecognizerIntent.EXTRA_RESULTS);

        if (spch.contains("Yes"))    
         {
            // do smthing
         }
         else if(spch.contains("No"))
         {
            // do smething
         }
    }
    super.onActivityResult(requestCode, resultCode, data);
}

【问题讨论】:

  • 不,我在我的设备上测试这个

标签: android speech-recognition speech-to-text


【解决方案1】:

问题是您根据文档将FLAG_ACTIVITY_NEW_TASK 添加到您的意图中:

当调用者从正在启动的活动中请求结果时,不能使用此标志。

你正在使用它 startActivityForResult ,删除

    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

从您的代码中解决问题。

【讨论】:

  • 使用此标志后,只有在响铃时此语音识别活动才会出现在前面。如果我删除此标签,语音识别活动仅在响铃完成后才起作用。
  • 您不应该在电话响铃时显示任何内容,因为用户会忙于处理呼叫。如果您试图拦截来电,您无法在 Android 上执行此操作,请阅读此处blog.wangling.me/2009/08/…
  • 这里我要做的是,当来电时,它应该根据用户命令参加通话。为此,我必须显示语音识别活动 ryt??
  • 即所谓的拦截来电
  • 那么我怎样才能使它成为可能??
【解决方案2】:

我有一个应用程序可以满足您的需求,它在 2.3 到 4.0 上运行良好。 在果冻豆上不起作用。谷歌做出改变,看起来像果冻豆停止 电话响铃时的语音识别。

因此,如果您在 Jelly bean 上进行测试,请在另一台设备上尝试您的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多