Android 使用内存地址从内存中获取对象

Android 使用内存地址从内存中获取对象,android,memory,mediarecorder,Android,Memory,Mediarecorder,我想知道如何从内存中获取对象,在我的例子中是MediaRecorder。这是我的班级: Mymic类别: public class MyMic { MediaRecorder recorder2; File file; private Context c; public MyMic(Context context){ this.c=context; recorder2= new MediaRecorder(); }

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

您需要将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();
    }

}



}
另外,我也不能确切地弄清楚您试图用构造函数中的逻辑做什么,但是您可能不应该按现在的方式来做。您不应该使您的类在每次开始/停止录制时都必须创建它的新实例。最终目标应该是一个实例化一次并保留引用的对象,以便您可以随时对其调用start/stop


你能从内部发布你正在使用这个类的活动(或其他Android结构)吗?如果是这样的话,我可以帮助你以更干净的方式将两者联系在一起。

我用我的
BroadcastReceiver
的代码编辑我的帖子,但我想我必须用他的地址从内存中检索我的对象。取出构造函数中的if语句并删除action参数(尽管基于您的BroadcastReceiver代码,似乎您没有使用您发布的构造函数,因为您的代码中没有操作参数。请查看我的编辑。这样尝试,看看效果如何。我这样做了,但我得到了两个不同的对象。因为每次触发我的接收器时,它都会调用onCreate,因此会生成一个新的MyMic对象传递给stopRecord();粘贴的代码中没有一个具有onCreate()方法…和stopRecord()方法没有传递任何参数,参数放在括号内。因此我不确定你的意思。我建议你在尝试用Android创建如此复杂的东西之前,先复习一下java语法。很抱歉,我的想法在别处。我的意思是onReceive()。每次触发我的
BroadcastReceiver
时,都会调用
onReceive()
。如果
BrodcastReceiver
接收到一个操作,我只需要
startRecord()
,否则如果它接收到另一个操作
stopRecord()