Android 使用内存地址从内存中获取对象
我想知道如何从内存中获取对象,在我的例子中是MediaRecorder。这是我的班级: Mymic类别: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(); }
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()
。