/ / Získajte objekt z pamäte pomocou adresy pamäte - android, pamäť, mediarecorder

Získajte objekt z pamäte pomocou pamäťovej adresy - Android, pamäť, mediálny záznamník

Chcem vedieť, ako získať objekt z pamäte, v mojom prípade MediaRecorder. Tu je moja trieda:

Mymická trieda:

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();
}

}



}

moja trieda prijímača:

 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();
}

}

Takže keď volám startRecord() vytvára nový MediaRecorder ale keď vytvorím inštanciu svojej triedy druhýkrát, nemôžem načítať môj objekt. Môžem načítať môj MediaRecorder s jeho adresátom

odpovede:

1 pre odpoveď č. 1

Musíte umiestniť svoj konštruktor pre MediaRecorder do konštruktora pre triedu, ktorú robíte, namiesto do metódy startRecord (), ako je táto:

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();
}

}



}

Tiež nemôžem prísť na to, čo presne stesnažíš sa urobiť s logikou vo svojom konštruktore, ale asi by si to nemal robiť tak, ako si. Nemali by ste vytvoriť svoju triedu tak, aby ste pri každej príležitosti, kedy chcete spustiť / zastaviť nahrávanie, vytvorili jej novú inštanciu. Konečným cieľom by mal byť objekt, ktorý jednorazovo vytvoríte inštanciu a uchováte si odkaz, aby ste mohli volať štart / zastav sa na ňom kedykoľvek chceš.

Môžete zverejniť aktivitu (alebo inú štruktúru systému Android), ktorú používate v tejto triede, zvnútra? Môžem vám pomôcť, aby ste ich spojili čistejším spôsobom, ak je to tak.