使用内存地址从内存中获取Object

时间:2012-06-12 16:09:22

标签: android memory mediarecorder

我想知道如何从内存中获取Object,在我的例子中是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

1 个答案:

答案 0 :(得分: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结构)吗?如果是这样的话,我可以帮你把两者结合起来。