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ď č. 1Musí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.