/ / Отримати об'єкт з пам'яті за допомогою адреси пам'яті - android, memory, mediarecorder

Отримати об'єкт з пам'яті за допомогою пам'яті адреси - андроїд, пам'ять, медіареєстратор

Я хочу знати, як отримати Об'єкт з пам'яті, в моєму випадку 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 з його адресою

Відповіді:

1 для відповіді № 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 / зупиняйтеся на ньому коли завгодно.

Чи можете ви опублікувати Activity (або іншу структуру Android), якою ви використовуєте цей клас, зсередини? Я можу допомогти тобі зв’язати ці речі більш чисто, якщо так.