无法在 Android Studio 中打开 Sdcard 中的现有文件
Can't open an existing file in Sdcard in Android Studio
我的项目中有这段代码可以读取音频文件:
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();
}
}
主要活动:
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" />
请帮忙。
您可以使用 getExternalFilesDir()
而不是对文件路径进行硬编码。
File AudioFile = new File(context.getExternalFilesDir() + "/" + "yourFile.ext")
你的调用是什么实现的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()
每次调用时都会return一个唯一的文件路径。
如果要使用当前毫秒数作为文件名,请改为此。
final String filePath = getFilename();
recorder.setOutputFile(filePath);
Log.i("Tag", filePath);
ListeAudio.put(indice, filePath); // here is ListeAudio
我的项目中有这段代码可以读取音频文件:
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();
}
}
主要活动:
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" />
请帮忙。
您可以使用 getExternalFilesDir()
而不是对文件路径进行硬编码。
File AudioFile = new File(context.getExternalFilesDir() + "/" + "yourFile.ext")
你的调用是什么实现的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()
每次调用时都会return一个唯一的文件路径。
如果要使用当前毫秒数作为文件名,请改为此。
final String filePath = getFilename();
recorder.setOutputFile(filePath);
Log.i("Tag", filePath);
ListeAudio.put(indice, filePath); // here is ListeAudio