Android在实现RecognitionListener时获取Intent

正如Iftah在这个答案中所述,我可以通过从Intent传递给Uri来获取由Speech Recoginition在Android中logging的audio:

@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { // the recording url is in getData: Uri audioUri = data.getData(); } 

这里的Intent data正是我想要的没有问题。

这一切都完美的工作,但是解决scheme提示用户什么时候说话,我不想这样做,我让我的活动实现RecognitionListener如此:

 public class MainActivity extends AppCompatActivity implements RecognitionListener { private SpeechRecognizer speech = null; private Intent recognizerIntent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "sv_SE"); recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "sv_SE"); recognizerIntent.putExtra("android.speech.extra.GET_AUDIO_FORMAT", "audio/AMR"); recognizerIntent.putExtra("android.speech.extra.GET_AUDIO", true); speech = SpeechRecognizer.createSpeechRecognizer(this); speech.setRecognitionListener(this); speech.startListening(recognizerIntent); } @Override public void onReadyForSpeech(Bundle params) { Log.d("Debug", "On ready for speech"); } @Override public void onBeginningOfSpeech() { Log.d("Debug", "On beggining of speech"); } @Override public void onRmsChanged(float rmsdB) { Log.d("Debug", "Rsm changed"); } @Override public void onBufferReceived(byte[] buffer) { Log.d("Debug", "Buffer recieved"); } @Override public void onEndOfSpeech() { Log.d("Debug", "On end of speech"); } @Override public void onError(int error) { Log.d("Debug", "Error"); } @Override public void onPartialResults(Bundle partialResults) { Log.d("Debug", "On partial result"); } @Override public void onEvent(int eventType, Bundle params) { Log.d("Debug", "On event"); } @Override public void onResults(Bundle results) { Log.d("Debug", "On result"); } } 

这绕过了提示hovewer我无法弄清楚如何得到第一个例子中的Uri,因为在这里:

 @Override public void onResults(Bundle results) { Log.d("Debug", "On result"); // The results bundle don't contain the URI! } 

我得到一个不包含Intent或Uri的Bundle results 。 我已经试过看捆绑中的所有键,并没有URI或意图存在,我也尝试getIntent()但不返回任何东西。

我感谢任何帮助或推动正确的方向。

这是一个类似的post。 他们使用startActivityForResult()而不是startListening()来获取数据。 他们还评论说,audio文件质量低。

希望这个帮助。

我不太明白你想达到什么目的。 我发现获取audio幅度我不得不使用可视化类,获取MainActivity中的audiostream,将其发送到一个视图类,将该variables强制转换为一个静态的全局variables,这是由一个主要的Runnable接口接收。 如果您想对audiostream做任何事情,请查看可视化工具类。 重新澄清,我绝对可以帮助你。 干杯。