我是 android 的新手,尝试使用 MediaRecorder 录制语音并成功创建音频文件。之后我通过单击按钮移动到下一个活动也没有问题并且播放声音也成功但是当我从我来的地方移动到上一个活动时。它将所有类引用和变量设置为 null 并保存音频文件为空,因为我必须在活动开始时进行录制。我已经实现了单例类的策略,但它的类变量在回来时也为空。关于提到代码的很多描述。
oncreate() 方法中的记录代码。//
Bundle extras = this.getIntent().getExtras();
if (extras != null) {
setrecordtime = extras.getLong("RECORDTIME");
在这里找到记录时间,然后开始记录。//
if (setrecordtime!=0&&setrecordtime < INFINITE) {
startrecordbutton.setVisibility(View.INVISIBLE);
stoprecordbutton.setVisibility(View.INVISIBLE);
startrecording();
//开始录制方法
private void startrecording() {
myrecordaudiofile = getAudiofilemedia();
if (myrecordaudiofile != null){
myaudiorecoreder = new MediaRecorder();
myaudiorecoreder.setAudioSource(MediaRecorder.AudioSource.MIC);
myaudiorecoreder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
myaudiorecoreder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
myaudiorecoreder.setOutputFile(myrecordaudiofile.getAbsolutePath());
try {
myaudiorecoreder.prepare();
myaudiorecoreder.start();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
myrecordtextview.setText("RECORDING STARTED......");
setRecordstatus(true);
}
else
{
Toast.makeText(getApplicationContext(), "NO FILE TO RECORD", 0).show();
}
new Timer().schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
stoprecording();
//myrecordtextview.setText("RECORDING...STATUS");
}
});
}
}, setrecordtime);
}
转到下一个屏幕并播放声音 //
case R.id.preview_button1:
Intent intent1 = new Intent(context, DisplayandPlay.class);
intent1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent1);
break;
从 DisplayandPlay.class 返回,然后保存文件但音频文件为空。感谢任何建议参加录音课程或仅使用 mediarecorder。