0

我想知道如何从内存中获取一个对象,在我的例子中是一个 MediaRecorder。这是我的课:

Mymic类:

public class MyMic  {

    MediaRecorder recorder2;
    File file;
    private Context c;

    public MyMic(Context context){
        this.c=context;
        recorder2=  new MediaRecorder();
    }

    private void stopRecord() throws IOException {
        recorder2.stop();
        recorder2.reset();
        recorder2.release();
    }

    private void startRecord() {

        recorder2.setAudioSource(MediaRecorder.AudioSource.MIC);
        recorder2.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        recorder2.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        recorder2.setOutputFile(file.getPath());
        try {
            recorder2.prepare();
            recorder2.start();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

我的接收类:

public class MyReceiver extends BroadcastReceiver {

    private Context c;
    private MyMic myMic;
    @Override
    public void onReceive(Context context, Intent intent) {
        this.c=context;
        myMic = new MyMic(c);
        if(my condition = true){
        myMic.startRecord();
        }else

        myMic.stopRecord();
    }
}

因此,当我调用startRecord()它创建一个新的MediaRecorder但当我第二次实例化我的类时,我无法检索我的对象。我可以MediaRecorder用他的地址找回我的吗?

4

1 回答 1

1

您需要将 MediaRecorder 的构造函数放在您正在创建的类的构造函数中,而不是像这样的 startRecord() 方法中:

public class MyMic  {

MediaRecorder recorder2;
File file;
private Context c;


public MyMic(Context context){
    this.c=context;
    recorder2=  new MediaRecorder();

}


private void stopRecord() throws IOException {
    recorder2.stop();
    recorder2.reset();
    recorder2.release();

}


private void startRecord() {

    recorder2.setAudioSource(MediaRecorder.AudioSource.MIC);
    recorder2.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    recorder2.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    recorder2.setOutputFile(file.getPath());
    try {
        recorder2.prepare();
        recorder2.start();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}



}

另外,我无法确切地弄清楚您要对构造函数中的逻辑做什么,但是您可能不应该按照自己的方式进行操作。你不应该让你的课程,这样你每次想要开始/停止录制时都必须创建一个新的实例。最终目标应该是您实例化一次并保留引用的对象,以便您可以随时调用它的启动/停止。

您可以从内部发布您正在使用此类的 Activity(或其他 Android 结构)吗?如果是这样,我可以帮助您以更简洁的方式将两者联系在一起。

于 2012-06-12T16:14:23.413 回答