私はAndroidの初心者で、MediaRecorderを使用して音声を録音しようとしており、オーディオファイルも正常に作成しています。その後、ボタンをクリックして次のアクティビティに移動しましたが、そこにも問題はなく、サウンドも正常に再生されましたが、来た場所から前のアクティビティに移動すると、すべてのクラス参照と変数が null になり、アクティビティの開始時に録音を行う必要があったため、オーディオファイルをnullとして.iはシングルトンクラスの戦略を実装していましたが、そのクラス変数も戻ってくると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 から戻った後、ファイルを保存しますが、オーディオ ファイルは null になります。audiorecord クラスを使用するか、mediarecord のみを使用するという提案に感謝します。