1

音声を録音するためのレコーダー クラスがあります。

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 の向きを使用できません。向きを変えて記録を保存するにはどうすればよいですか?

4

2 に答える 2

2

おそらく、より良いアプローチは、を使用してIntentServiceそこで録音を行うことです。
アクティビティのライフサイクルから分離されたバックグラウンドで実行されるため、サービスは方向の変更の影響を受けないため、サービスに記録ロジックを含めると、物事が簡素化されます。

別のオプションは、フラグメントを使用することです。setRetainInstance(true)フラグメントには、たとえばonCreate()フラグメントのメソッドでを呼び出すだけで、インスタンス変数を保持する機能があります。

最後に、 を使用しonRetainNonConfigurationInstance()て、方向の変更が発生したときにプレーン オブジェクトを保存できます。ただし、この方法は推奨されておらず、代わりにフラグメントを使用することをお勧めします。

于 2013-07-15T07:16:01.990 に答える
1

2つの解決策があります

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
于 2013-07-15T07:16:49.287 に答える