2015-06-03 34 views
0

我有這樣的代碼在我的項目來讀取音頻文件:無法在Android版中開啓SD卡中的現有文件工作室

MainActivity2:

private String getFilename() { 
    String filepath = Environment.getExternalStorageDirectory().getPath(); 
    File file = new File(filepath, AUDIO_RECORDER_FOLDER); 
    if (!file.exists()) { 
     file.mkdirs(); 
    } 
    return (file.getAbsolutePath() + "/" + System.currentTimeMillis() + file_exts[currentFormat]); 
} 

private void startRecording() { 
    recorder = new MediaRecorder(); 
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    recorder.setOutputFormat(output_formats[currentFormat]); 
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
    recorder.setOutputFile(getFilename()); 
    Log.i("Tag", getFilename()); 
    ListeAudio.put(indice,getFilename()); // here is ListeAudio 
    path=getFilename(); 
    recorder.setOnErrorListener(errorListener); 
    recorder.setOnInfoListener(infoListener); 
    try { 
     recorder.prepare(); 
     recorder.start(); 
    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

MainActivity:

File AudioFile = new File(MainActivity2Activity.ListeAudio.get(z)); 
    // ListeAudio return /storage/sdcard0/AudioRecorder/1433288052123.mp4  
    Uri AudioUri = Uri.fromFile(AudioFile); 
    vocal = MediaPlayer.create(MainActivity.this,AudioUri); 
    vocal.start(); 

這是行不通的,在logcat中有一個錯誤說: 未能打開文件'/storage/sdcard0/AudioRecorder/1433288052123.mp4'。 (沒有這樣的文件或目錄) 當我手動搜索文件資源管理器中的這條路徑時,我發現我想播放的音頻 文件。 我有AndroidManifest中的這個:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 

請幫忙。

回答

1

你的電話實施什麼MainActivity2Activity.ListeAudio.get(z)?嘗試使用系統api訪問外部存儲。

if (Environment.getExternalStorageState().equals(
      Environment.MEDIA_MOUNTED)) { 
    File audioFile = new File(Environment.getExternalStorageDirectory() 
       .getAbsoluteFile() 
       + File.separator 
       + "AudioRecorder/1433288052123.mp4"); 
    if (audioFile.exists()) { 
     MediaPlayer mediaPlayer = MediaPlayer.create(this, Uri.fromFile(audioFile)); 
     mediaPlayer.start(); 
    } 
} 

//編輯

recorder.setOutputFile(getFilename()); 
    Log.i("Tag", getFilename()); 
    ListeAudio.put(indice,getFilename()); // here is ListeAudio 

文件路徑的編寫和文件路徑的保存是不一樣的文件,getFilename()將在每次被調用時返回一個唯一的文件路徑。

如果要將當前毫秒用作文件名,請更改此設置。

final String filePath = getFilename(); 
    recorder.setOutputFile(filePath); 
    Log.i("Tag", filePath); 
    ListeAudio.put(indice, filePath); // here is ListeAudio 
+0

的編輯當我錄製音頻我保存文件,我加入ListeAudio路徑在另一個活動 –

+0

@Omar使用它那麼你必須確保錄製的文件是可讀的。 – alijandro

+0

如果我手動進入資源管理器文件,我可以播放它 –

0

您可以使用getExternalFilesDir()而不是硬編碼您的文件路徑。

File AudioFile = new File(context.getExternalFilesDir() + "/" + "yourFile.ext") 
+0

我要讀從MainActivity2.ListeAudio –

+0

路徑音頻校驗碼源 –