Получить объект из памяти, используя адрес памяти
Я хочу знать, как получить объект из памяти, в моем случае 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 ответ
Вам нужно поместить ваш конструктор для 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 для него в любое время.
Можете ли вы опубликовать Activity (или другую структуру Android), в которой вы используете этот класс изнутри? Я могу помочь вам связать их вместе более чистым способом, если это так.