2012-09-06 30 views
5

फेंकता है मैं एक साधारण एंड्रॉइड ऑडियो रिकॉर्डर विकसित करने की कोशिश कर रहा हूं। सब कुछ ठीक बनाता है और यह एंड्रॉइड डिवाइस पर भी ठीक चलता है। ऐसा लगता है जैसे मैं रिकॉर्डिंग शुरू कर सकता हूं लेकिन जब मैं इसे रोकना चाहता हूं तो यह एक अवैध स्टेटस एक्सेप्शन फेंकता है। मुझे गलती नहीं मिल रही है।एंड्रॉइड - MediaRecorder अवैधस्टेटेसेप्शन

public class VoiceRecorder { 
MediaRecorder recorder= new MediaRecorder(); 
static Context cont; 

public void startRecord(Context context) throws IllegalStateException, IOException{ 
    cont = context; 

    recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
    recorder.setOutputFile(cont.getFilesDir()+"/recordings.3gp"); 
    recorder.prepare(); 
    recorder.start(); 

} 
public void stopRecording(Context context) { 
    cont = context; 
    recorder.stop(); 
    recorder.release(); 
    File file = new File (cont.getFilesDir()+"/recordings.3gp"); 
    UploadFile.uploadFile("recordings.3gp", file); 
    recorder = null; 
} 
} 

मैं के साथ यह ट्रिगर करना चाहते हैं:: यहाँ कोड है

VoiceRecorder vr = नए VoiceRecorder();

vr.startRecord (cont);

vr.stopRecording (cont);

जब शुरू Logcat कहते बुला: (क्या ठीक किया जाना चाहिए)

09-06 22:56:42.830: D/AudioHardwareMSM72XX(123): audpre_index = 0, tx_iir_index = 0 
09-06 22:56:42.840: D/HTC Acoustic(123): msm72xx_enable_audpre: 0x0000 
09-06 22:56:42.850: I/AudioHardwareMSM72XX(123): Routing audio to Speakerphone 
09-06 22:56:42.850: D/HTC Acoustic(123): msm72xx_enable_audpp: 0x0001 
09-06 22:56:42.850: I/AudioHardwareMSM72XX(123): Routing audio to Speakerphone 
09-06 22:56:42.860: D/HTC Acoustic(123): msm72xx_enable_audpp: 0x0001 
09-06 22:56:42.870: D/AudioFlinger(123): setParameters(): io 3, keyvalue routing=262144;vr_mode=0, tid 156, calling tid 123 
09-06 22:56:42.870: I/AudioHardwareMSM72XX(123): Routing audio to Speakerphone 
09-06 22:56:42.880: D/AudioHardwareMSM72XX(123): audpre_index = 0, tx_iir_index = 0 
09-06 22:56:42.880: D/HTC Acoustic(123): msm72xx_enable_audpre: 0x0000 
09-06 22:56:42.880: I/AudioHardwareMSM72XX(123): do input routing device 40000 
09-06 22:56:42.880: I/AudioHardwareMSM72XX(123): Routing audio to Speakerphone 
09-06 22:56:42.890: D/HTC Acoustic(123): msm72xx_enable_audpp: 0x0001 

लेकिन जब मैं रोक फोन:

09-06 22:59:52.440: E/MediaRecorder(1069): stop called in an invalid state: 1 
09-06 22:59:52.440: W/System.err(1069): java.lang.IllegalStateException 
09-06 22:59:52.460: W/System.err(1069):  at android.media.MediaRecorder.stop(Native Method) 
09-06 22:59:52.460: W/System.err(1069):  at de.spyapp.VoiceRecorder.stopRecording(VoiceRecorder.java:33) 
09-06 22:59:52.460: W/System.err(1069):  at de.spyapp.CheckCMD.checkCMD(CheckCMD.java:30) 
09-06 22:59:52.460: W/System.err(1069):  at de.spyapp.AppActivity$2.run(AppActivity.java:44) 
09-06 22:59:52.460: W/System.err(1069):  at java.lang.Thread.run(Thread.java:1096) 

उत्तर

2

ऐसा लगता है कि उस त्रुटि फेंक दिया जाता है जब आप से बंद() फोन एक अवैध स्थिति

रिकॉर्डर के लिए गतिविधि चक्र भी इंगित करने के लिए आप तैयार करने के लिए() इससे पहले कि आप रिकॉर्डिंग शुरू कर सकते हैं की जरूरत है लगता है - आपको लगता है कि कर रहे हैं? रोकें() वैध आदेश नहीं है जब तक कि रिकॉर्डर कम से कम तैयार नहीं होता है।

आप कर रहे हैं, शायद यह कुछ समय लगता है के लिए रिकॉर्डर वास्तव में एक वैध राज्य में व्यवस्थित करने के लिए इससे पहले कि आप बाद में बंद कॉल कर सकते हैं()। आप इसे शुरू करने के बाद तुरंत पर कॉल कर रहे हैं() तो शायद कुछ हो रहा है।

+1

दो से अधिक हाइपरलिंक्स पोस्ट करने की अनुमति नहीं है। कुछ और पढ़ते हैं: - http://stackoverflow.com/questions/11852852/stop-called-in-an-invalid-state-1 - http: //www.benmccann।कॉम/डेव-ब्लॉग/एंड्रॉइड-ऑडियो-रिकॉर्डिंग-ट्यूटोरियल/ – TheMaster42

+0

हम्म मैंने शुरुआत से पहले तैयार किया और मैं 20sec की तरह इंतजार कर रहा हूं जब तक कि मैं स्टॉप –

+0

पर कॉल नहीं करता हूं यह उत्तर 'मीडियाप्लेयर' का संदर्भ दे रहा है लेकिन ओपी 'मीडियाआरकॉर्डर' के बारे में पूछ रहा है ' –

4

समस्या बंद नहीं है, लेकिन शुरुआत में है। यह सही ढंग से शुरू नहीं होता है, यही कारण है कि आप इसे बाद में नहीं रोक सकते हैं। चीजों की

चेक जोड़ी: क) आप persmission android.permission.RECORD_AUDIO

ख) ने कहा कि आप SD कार्ड पर लिखने कि (मुझे यकीन है कि यह आवश्यक नहीं है नहीं हूँ, लेकिन मेरा मानना ​​है कि मैं इस समस्या आंतरिक के लिए लिख दिया था याद)। आपको एसडी कार्ड को लिखने की अनुमति की आवश्यकता होगी।

ग) इसके अलावा, http://developer.android.com/reference/android/media/MediaPlayer.html#setOnErrorListener(android.media.MediaPlayer.OnErrorListener onErrorListener सेट करने का प्रयास)

घ) पुनर्स्थापित करने के लिए प्रयास करें() MediaPlayer किसी अन्य कॉल इससे पहले कि मैं इस लेख http://developer.android.com/reference/android/media/MediaPlayer.html#Valid_and_Invalid_States Android के MediaRecorder राज्यों को पढ़ने के लिए सिफारिश करेंगे बुरा सपना है।

+0

सभी अनुमतियां ठीक हैं। मैंने एसडी कार्ड में बदलने की कोशिश की और स्टार्ट्रेकॉर्डिंग विधि की शुरुआत में रीसेट किया। अब लॉगकैट मुझे sth new पर बताता है .start(): 09-06 23: 34: 20.310: डी/ऑडियो_इनपुट (123): DoStop: X 09-06 23: 34: 20.330: डी/ऑडियो_इनपुट (123) : DoReset: ई 09-06 23: 34: 20.340: डी/audio_input (123): DoReset: एक्स 09-06 23: 34: 20.340: ई/audio_input (123): असमर्थित पैरामीटर: एक्स pvmf/मीडिया-इनपुट-नोड/कैप-कॉन्फ़िगर-इंटरफ़ेस; valtype = key_specific_value 09-06 23: 34: 20.340: ई/ऑडियो_इनपुट (123): सत्यापित करें औरसेट पैरामीटर विफल –