2013-04-26 117 views
0

目前,我試圖開發一個錄音機在Android應用程序最終發送到在線服務器,然後進行多播。然而,在我可以繼續之前,我遇到了像未處理異常類型IOException一樣的錯誤。我在錯誤出現的部分添加了**符號。請幫忙。音頻記錄器的未處理的異常類型IOException

package com.example.testproject; 

import java.io.File; 

import android.app.Activity; 
import android.media.MediaPlayer; 
import android.media.MediaRecorder; 
import android.os.Bundle; 
import android.os.Environment; 
import android.view.View; 

public class Sound extends Activity { 

private MediaPlayer mediaPlayer; 
private MediaRecorder recorder; 
private String OUTPUT_FILE; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.audio); 

    OUTPUT_FILE=Environment.getExternalStorageDirectory()+"/audiorecorder.3gpp"; 

} 

public void buttonTapped(View view){ 

    switch(view.getId()){ 
    case R.id.btnstart: 

    try { 
     beginRecording(); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 

    break; 

    case R.id.btnfinish: 

    try { 
     stopRecording(); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 

    break; 

    case R.id.btnplay: 

    try { 
     playRecording(); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 

    break; 

    case R.id.btnstop: 

    try { 
     stopPlayback(); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 

    break; 
    }  

} 

private void stopPlayback(){ 

} 

private void playRecording() throws Exception{ 
    ditchMediaPlayer(); 
    mediaPlayer = new MediaPlayer(); 
    mediaPlayer.setDataSource(OUTPUT_FILE); 
    mediaPlayer.prepare(); 
    mediaPlayer.start(); 

} 

private void ditchMediaPlayer(){ 
    if(mediaPlayer != null) 
    { 
     try{ 
      mediaPlayer.release(); 
     }catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 

private void stopRecording(){ 

    if(recorder != null) 
     recorder.stop(); 

} 

private void beginRecording(){ 

    ditchMediaRecorder(); 
    File outputFile = new File(OUTPUT_FILE); 

    if(outputFile.exists()) 
     outputFile.delete(); 

    recorder = new MediaRecorder(); 
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
    recorder.setOutputFile(OUTPUT_FILE); 
    **recorder.prepare();** 
    recorder.start(); 

} 

private void ditchMediaRecorder() { 
    if(recorder != null) 
     recorder.release(); 
} 

} 

回答

1

您必須處理調用recorder.prepare()時可能發生的IO錯誤。有關異常處理的更多信息,請參閱the official Java docs

就目前來看,這應該幫助:

try { 
    recorder.prepare(); 
    recorder.start(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

但一定要實行正確的錯誤處理您運送您的應用程序之前。

相關問題