我使用 MediaRecorder 允许用户在我的应用程序中录制音频,对于绝大多数用户(以及我的所有测试设备)来说,它运行良好。相关代码如下:
mRecorder = new MediaRecorder();
mRecorder.setOnInfoListener(infoListener);
String audioFilePath = mUri.getPath();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mRecorder.setOutputFile(audioFilePath);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mRecorder.setAudioEncodingBitRate(256 * 1024);
mRecorder.setAudioSamplingRate(44100);
mRecorder.setMaxDuration(60000);
try{
mRecorder.prepare();
}catch (IOException ex){
Log.e(TAG, "Prepare() failed", ex);
mTracker.send(new HitBuilders.ExceptionBuilder()
.setDescription("Preparing MediaRecorder in : " + Thread.currentThread().getName()+ ": " + ex.toString())
.setFatal(false)
.build()
);
}
mRecorder.start();
我收到用户的报告,称他们无法录制音频,他们看到的 toast 消息是我从 MediaRecorder.onInfoListener 中触发的消息。
因此,我添加了一些 Google Analytics,并从该监听器中记录了一个事件,以查看是否可以追踪错误:
private MediaRecorder.OnInfoListener infoListener = new MediaRecorder.OnInfoListener() {
@Override
public void onInfo(MediaRecorder mr, int what, int extra) {
mr.stop();
mr.reset();
mr.release();
mr = null;
onRecordingStopped();
Toast.makeText(mContext, R.string.audio_recording_stopped, Toast.LENGTH_SHORT).show();
mTracker.send(new HitBuilders.EventBuilder()
.setCategory("Error")
.setAction("AudioStopped")
.setLabel("What: " + what + ", extra: " + extra)
.build());
}
};
如您所见,我正在将“内容”和“额外”参数传递给我的 Analytics,以便我可以了解发生了哪些类型的错误。
在今天早上的分析中(到目前为止只有一天的数据),我看到一些“什么”为 800,我在文档中可以看到达到了最大持续时间,但其他的有一个我在 Media.Recorder 文档中找不到 895 的“内容”。
对于 895 的含义有什么建议吗?
最佳答案
我也遇到了同样的问题。结果我的设备信息代码 895 意味着录音正在进行中。 这意味着您不需要停止录制。
关于android - MediaRecorder OnInfoListener 给出 895,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25785420/