无法在Android Studio中的Sdcard中打开现有文件

时间:2015-06-03 00:01:17

标签: android android-studio record

我的项目中有这个代码来读取音频文件:

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" />

请帮忙。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可以使用getExternalFilesDir()代替对文件路径进行硬编码。

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