2013-05-03 51 views
0

我似乎无法在手机上运行语音识别器。应用程序instals和按钮正在返回它需要返回的内容,但实际的语音识别器不会返回到Speech的起始位置等等...这是我的代码,希望这是一个简单的修复。我运行在显示erros(Trace:无法打开,没有这样的目录)和ActivityManager的Galaxy s3上:Warning:警告:Activity没有启动,它的当前任务已经提前。可能是权限问题。任何帮助将是伟大的!无法运行Speechrecognizer Android

public class MainActivity extends Activity implements OnClickListener { 

ListView lv; 
private SpeechRecognizer mSpeechRecognizer; 
private Intent mSpeechRecognizerIntent; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 


    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    lv = (ListView)findViewById(R.id.lvVoiceReturn); 
    Button b= (Button)findViewById(R.id.bVoice); 
    b.setOnClickListener(this); 
    boolean available = SpeechRecognizer.isRecognitionAvailable(this); 
    Log.d("Speech", "available = " + available); 
    mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(this); 
    mSpeechRecognizer.setRecognitionListener(new SpeechListener()); 
    mSpeechRecognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
    mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
      RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
    mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, 
      this.getPackageName()); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    Log.d("speech", "button active"); 
    mSpeechRecognizer.startListening(mSpeechRecognizerIntent); 


} 
private class SpeechListener implements RecognitionListener { 


    @Override 
    public void onBeginningOfSpeech() { 
     Log.d("Speech", "onBeginningOfSpeech"); 
    } 

    @Override 
    public void onBufferReceived(byte[] buffer) { 
     Log.d("Speech", "onBufferReceived"); 
    } 

    @Override 
    public void onEndOfSpeech() { 
     Log.d("Speech", "onEndOfSpeech"); 
    } 

    @Override 
    public void onError(int error) { 
     Log.d("Speech", "onError"); 
    } 

    @Override 
    public void onEvent(int eventType, Bundle params) { 
     Log.d("Speech", "onEvent"); 
    } 

    @Override 
    public void onPartialResults(Bundle partialResults) { 
     Log.d("Speech", "onPartialResults"); 
    } 

    @Override 
    public void onReadyForSpeech(Bundle params) { 
     Log.d("Speech", "onReadyForSpeech"); 
    } 


    @Override 
    public void onResults(Bundle results) { 
     Log.d("Speech", "results"); 

    } 

    @Override 
    public void onRmsChanged(float rmsdB) { 
     //Log.d("Speech", "onRmsChanged"); 
    } 

} 

}

这里是我的清单

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="17" /> 

<uses-permission android:name="android.permission.RECORD_AUDIO"/> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.example.speech.MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

</manifest> 
+0

什么是操作系统版本后添加以下的onCreate? ICS还是JB?还张贴您的清单 – 2013-05-03 03:08:13

+0

我在JB 4.2.2 – 2013-05-03 03:14:29

+0

添加了用户权限,遗憾的是仍然没有收到任何语音输入方式。我仍然得到这些错误。我不知道现在发生了什么。真的只是需要帮助这一个很糟糕。 – 2013-05-03 03:30:37

回答

0

您需要下列权限

<uses-permission android:name="android.permission.RECORD_AUDIO"/> 

和修复下面的错误,而不是

protected class mSpeechRecognizerIntent implements RecognitionListener 

应该

private class SpeechListener implements RecognitionListener 

和线

boolean available = SpeechRecognizer.isRecognitionAvailable(); 
Log.d("Speech", "available = " + available); 
mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(this); 
mSpeechRecognizer.setRecognitionListener(new SpeechListener());