在android中更改方向时保存录制

时间:2013-07-15 07:07:50

标签: android

我有录音机课程来录音:

public class MeeRecorder {
    private static String mpathName = null;
    private MediaRecorder mRecorder = null;
    private String pName = "";
    private String fileName = "";
    public static final String TEST_PATH = "/test/";


    public MeeRecorder() {

        }

    public void onRecord(boolean start) {
        if (start) {
            startRecording();
        } else {
            stopRecording();
        }
    }

     private void startRecording() {
            mRecorder = new MediaRecorder();
            createPath();
            mpathName = Environment.getExternalStorageDirectory().getAbsolutePath();
            mpathName += TEST_PATH+"/"+getFileName()+VoiceRecorder.FILE_EXT;
            mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            mRecorder.setOutputFile(mpathName);
            mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

            try {
                mRecorder.prepare();
            } catch (IOException e) {
                Log.e("DEBUG", "prepare() failed");
            }

            mRecorder.start();
        }

        private void createPath(){
            File recordersDirectory = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+TEST_PATH);
            recordersDirectory.mkdirs();
        }

        public void stopRecording() {
            if(mRecorder!=null){
                mRecorder.stop();
                mRecorder.release();
                mRecorder = null;
            }
        }

        public String getmPathName() {
            return mpathName;
        }

        public void setmPathName(String mPathName) {
            MeasureRecorder.mpathName = mPathName;
        }


        public String getFileName() {
            return fileName;
        }

        public void setFileName(String fileName) {
            this.fileName = fileName;
        }
}

我在我的活动和活动记录声音中创建了这个类的对象。现在我遇到了问题,因为当我改变方向时我的录音已停止。我无法使用configChanges方向,因为我在更改方向时更改布局。如何以更改方向保存录制文件?

2 个答案:

答案 0 :(得分:2)

也许更好的方法是使用IntentService并在那里进行录音 在服务中使用记录逻辑可以简化操作,因为服务不会受到方向更改的影响,因为它在与活动生命周期分离的背景中运行。

另一种选择是使用Fragments。片段只能通过调用setRetainInstance(true)来保留其实例变量,例如在片段的onCreate()方法中。

最后,您可以使用onRetainNonConfigurationInstance()在发生方向更改时保存普通对象。但是这种方法已被弃用,并且首选使用片段而不是它。

答案 1 :(得分:1)

有两种解决方案

1. fix your orientation to landscape or portrait 
  android:orientation="vertical" 
            or
 android:orientation="horizontal" 
2. trigger a service from activity to  record the audio