MediaRecorder.stop() で NullPointerException が返ってくる
現在ダイアログ上のスタートボタンを押すことで録音を開始し、ストップボタンを押すと別の保存確認ダイアログが表示され、そこで保存ボタンを押すと録音した音声が保存されるプログラムを組んでいます。しかし、録音を終了すると、 RecDialog
クラスの stopRecording
メソッド内の mRecorder.stop()
で NullPointerException
が返ってきます。色々とトライしてみても依然結果は同じです。これはなぜなのでしょうか? DialogFragment
を使っているあたり何か関係があるのでしょうか?
すみませんが、宜しくお願いします。
RecDialog:
public class RecDialog extends DialogFragment {
private MediaRecorder mRecorder;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mView = inflater.inflate(R.layout.rec_dialog, null);
final ImageButton recordButton = (ImageButton) mView.findViewById(R.id.recButton);
recordButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!mRecButtonClick) {
recordButton.setImageResource(R.drawable.microphone_on);
mRecorder = new MediaRecorder();
startRecording();
mRecButtonClick = true;
} else {
recordButton.setImageResource(R.drawable.microphone_off);
mRecButtonClick = false;
showDialogBroadcast();
}
});
}
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
DialogFragment dialog = new SaveDialog();
dialog.show(getFragmentManager(), "dialog");
}
}
public void showDialogBroadcast() {
Intent broadcastIntent = new Intent();
broadcastIntent.setAction("show_saveDialog");
getActivity().sendBroadcast(broadcastIntent);
}
public void startRecording() {
File sampleDir = new File(Environment.getExternalStorageDirectory() + "/Test");
try {
mAudiofile = File.createTempFile("voice", ".3gp", sampleDir);
} catch (IOException e) {
return;
}
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mRecorder.setOutputFile(mAudiofile.getAbsolutePath());
try {
mRecorder.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mRecorder.start();
}
public void stopRecording(String fileName) {
mRecorder.stop();
mRecorder.release();
addVoiceToMediaLibrary(fileName);
}
SaveDialog:
RecDialog recDialog = new RecDialog();
recDialog.stopRecording(editText.getText().toString());