2012-02-15 82 views
2

從SD卡播放音頻時,MediaPlayer播放該文件。但從getCacheDir()播放時,這是一個錯誤。我的結論是MediaPlayer無法播放getCacheDir()的文件嗎?從緩存目錄中播放音頻

這裏有一個代碼片段:

private void startPlaying(String asAudioFileName) { 
    File fFile = new File(VocaPreview.this.getCacheDir() + "/" + asAudioFileName.toLowerCase() + ".mp3"); 

    if(!fFile.isFile()) { 
     Toast.makeText(getApplicationContext(), "File not found", Toast.LENGTH_SHORT).show(); 
    } else { 
     try { 
      FileInputStream fisAudio = new FileInputStream(fFile); 
      //fmpAudio.setDataSource(VocaPreview.this.getCacheDir() + "/" + asAudioFileName.toLowerCase() + ".mp3"); 
      //fmpAudio.setDataSource("/sdcard/2.mp3"); 

      fmpAudio.setDataSource(fisAudio.getFD()); 
      fmpAudio.prepare(); 
      fmpAudio.start(); 
     } catch(IOException ioe) { 
      Log.e("START PLAYING", ioe.getMessage()); 
     } 
    } 
} 

回答

7

更新: 我剛從這個Blog閱讀和解決我的問題,爲了讓我在緩存中播放音頻,我添加了這一行,就是這樣。希望這有助於任何人在未來。 Here is the method

File file = new File(filepath) 
file.setReadable(true, false); 
0

這裏是一個函數,也適用於API級別< 9:

Runtime.getRuntime().exec("chmod 644 "+ outputFile.getAbsolutePath());