我想知道如何从内存中获取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
。
答案 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结构)吗?如果是这样的话,我可以帮你把两者结合起来。