2012-07-10 51 views
1

請幫我解決這個錯誤,我試着從過去5天開始無法解決它。java.io.IOException:準備失敗:狀態= 0x1

由於android中的「Text to Speach」文本沒有暫停狀態,所以我試圖通過mediaplayer來暫停和播放。

轉換字符串文字,.3GP格式和SD卡存儲,到這裏它工作正常,但我面對的媒體播放器的問題,它拋出下面的錯誤

07-10 09:12:12.279: D/(13589): temper destination file/mnt/sdcard/tmpaudio.3gp 
07-10 09:12:12.279: I/TextToSpeech.java - synthesizeToFile(13589): synthesizeToFile text of length 256 
07-10 09:12:12.479: D/MediaPlayer(13589): setDataSource(tmpaudio.3gp) 
07-10 09:12:12.489: E/MediaPlayer(13589): error (1, -2147483648) 
07-10 09:12:12.489: W/System.err(13589): java.io.IOException: Prepare failed.: status=0x1 
07-10 09:12:12.489: W/System.err(13589): at android.media.MediaPlayer.prepare(Native Method) 
07-10 09:12:12.489: W/System.err(13589): at net.sf.andpdf.pdfviewer.PdfViewerActivity$GraphView$2.onClick(PdfViewerActivity.java:651) 
07-10 09:12:12.489: W/System.err(13589): at android.view.View.performClick(View.java:2485) 
07-10 09:12:12.489: W/System.err(13589): at android.view.View$PerformClick.run(View.java:9080) 
07-10 09:12:12.489: W/System.err(13589): at android.os.Handler.handleCallback(Handler.java:587) 
07-10 09:12:12.489: W/System.err(13589): at android.os.Handler.dispatchMessage(Handler.java:92) 
07-10 09:12:12.489: W/System.err(13589): at android.os.Looper.loop(Looper.java:130) 
07-10 09:12:12.489: W/System.err(13589): at android.app.ActivityThread.main(ActivityThread.java:3683) 
07-10 09:12:12.489: W/System.err(13589): at java.lang.reflect.Method.invokeNative(Native Method) 
07-10 09:12:12.489: W/System.err(13589): at java.lang.reflect.Method.invoke(Method.java:507) 
07-10 09:12:12.489: W/System.err(13589): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:875) 
07-10 09:12:12.489: W/System.err(13589): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:633) 
07-10 09:12:12.489: W/System.err(13589): at dalvik.system.NativeStart.main(Native Method) 
07-10 09:12:12.489: D/MediaPlayer(13589): start state 0 
07-10 09:12:12.489: E/MediaPlayer(13589): start called in state 0 
07-10 09:12:12.489: E/MediaPlayer(13589): error (-38, 0) 
07-10 09:12:12.529: E/MediaPlayer(13589): Error (-38, 0) 

代碼:

public void onClick(View v) {     
    mediaPlayer = new MediaPlayer(); 
    if (mBtplay.getText().equals(getString(R.string.play_str))) { 
     PdfReader reader = null; 
     try { 
      reader = new PdfReader(pdffilename); 
     } catch (IOException e3) { 
      // TODO Auto-generated catch block 
      e3.printStackTrace(); 
     } 
     int num = mPdfPage.getPageNumber(); 
     String str = null; 
     try { 
      str = PdfTextExtractor.getTextFromPage(
                reader, num); 
     } catch (IOException e2) { 
      // TODO Auto-generated catch block 
      e2.printStackTrace(); 
     } 

     HashMap<String, String> myHashRender = new HashMap<String, String>(); 
     myHashRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, str); 

     File appTmpPath = Environment.getExternalStorageDirectory(); 
     System.out.println("" 
          + appTmpPath.getAbsolutePath()); 
     appTmpPath.mkdirs(); 
     String tempFilename = "tmpaudio.3gp"; 

     final String tempDestFile = appTmpPath 
      .getAbsolutePath() + "/" + tempFilename; 
     Log.d("","temper destination file"+tempDestFile); 
     mTts.synthesizeToFile(str, myHashRender, 
           tempDestFile); 
     try { 
      mediaPlayer.setDataSource(tempDestFile); 
      mediaPlayer.prepare(); 
     } catch (IllegalArgumentException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IllegalStateException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     try{ 
      mediaPlayer.start(); 
     }catch(Exception e){ 
      System.out.println(""+e); 

     } 
    } else { 
     try { 
      Log.d("", "pause"); 

      mBtplay.setText(getString(R.string.pause_str)); 
      mediaPlayer.pause(); 
     } catch (Exception pa) { 
      if (mediaPlayer != null) { 
       mediaPlayer.stop(); 
       mediaPlayer.release(); 
      } 

     } 

    } 

} 

回答

1

我對你有幾點建議。按給定順序逐一嘗試。

1)在播放之前,檢查您正在播放的文件是否存在,路徑是否正確。

2)嘗試不同的音頻格式,如mp3。

3)使用文件描述符代替的文件路徑,即

FileInputStream fis = new FileInputStream(pathoffiletobeplayed); 
mediaPlayer.setDataSource(fis.getFD()); 

4)setDataSource()之前調用reset()

1是強制性的。如果沒有成功,嘗試2-3-4的所有組合。

+0

您好感謝答覆, – Archana 2012-07-10 05:34:07

+0

我有所有這些步驟的問題試過尚未resolved.if我把原文件夾中的歌曲會玩,但是通過/ sdcard/file.mp3給文件找不到。但是,如果我檢查目錄文件是否存在 – Archana 2012-07-10 05:34:44

+1

您的清單文件中是否具有READ_EXTERNAL_STORAGE權限? – Erol 2012-07-10 06:43:31

0
  1. 檢查媒體文件的引用是否正確釋放。
  2. 播放與音頻工具,它存在於系統
相關問題