Java Android mediaplayer赢得';t加载路径为/documents/audio:1159的Uri
我正在尝试在Android Studio中使用内置mediaplayer播放音频文件。我使用下面的代码调用一个intent并打开一个第三方文件管理器来获取一个文件Uri以及我存储在某处的文件路径。无论如何,如果我使用像ES file Explorer这样的文件管理器,我会得到一个类似“/sdcard/some directory/test.mp3”的路径。但是,如果我使用内置的文件管理器,我会得到一个类似“/documents/audio:1159”的路径。我知道后者是一种“资产”,但当我尝试将其输入mediaplayer时,我得到了一个例外。我做错了什么 下面的代码显示了我用于获取文件路径的intent方法,下面的代码显示了我如何使用该文件路径获取Uri并将其提供给mediaplayer。只是为了清楚起见,像“/sdcard/some directory/test.mp3”这样的文件路径可以正常工作。像“/documents/audio:1159”这样的文件路径不适用 }) ActivityResult上的公共void(int请求代码、int结果代码、意图结果){ } 用于根据从上面检索到的文件路径启动mediaplayer的代码Java Android mediaplayer赢得';t加载路径为/documents/audio:1159的Uri,java,android,audio,android-intent,android-studio,Java,Android,Audio,Android Intent,Android Studio,我正在尝试在Android Studio中使用内置mediaplayer播放音频文件。我使用下面的代码调用一个intent并打开一个第三方文件管理器来获取一个文件Uri以及我存储在某处的文件路径。无论如何,如果我使用像ES file Explorer这样的文件管理器,我会得到一个类似“/sdcard/some directory/test.mp3”的路径。但是,如果我使用内置的文件管理器,我会得到一个类似“/documents/audio:1159”的路径。我知道后者是一种“资产”,但当我尝试将
Uri myUri = Uri.parse(filePath);
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mediaPlayer.setDataSource(getApplicationContext(), myUri);
mediaPlayer.prepare();
mediaPlayer.start();
} catch (IOException e) {}
我想你不能像这样使用Uri /文件/音频:1159 何时使用Intent MediaPlayer 编辑: 请尝试使用此代码从资产文件夹获取文件路径
AssetManager am = getAssets();
InputStream inputStream = am.open(file:///android_asset/myfoldername/myfilename);
File file = createFileFromInputStream(inputStream);
private File createFileFromInputStream(InputStream inputStream) {
try{
File f = new File(my_file_name);
OutputStream outputStream = new FileOutputStream(f);
byte buffer[] = new byte[1024];
int length = 0;
while((length=inputStream.read(buffer)) > 0) {
outputStream.write(buffer,0,length);
}
outputStream.close();
inputStream.close();
return f;
}catch (IOException e) {
//Logging exception
}
return null;
}
谢谢,但有什么办法吗?我是否可以将资产路径转换为实际的文件路径?或者有没有一种不同的方式将其输入mediaplayer?非常有趣。今晚将尝试一下。在Android studio中似乎无法实现此功能,但无论如何。。。谢谢你的帮助。几乎可以肯定是我。
Uri myUri = Uri.parse(filePath);
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mediaPlayer.setDataSource(getApplicationContext(), myUri);
mediaPlayer.prepare();
mediaPlayer.start();
} catch (IOException e) {}
AssetManager am = getAssets();
InputStream inputStream = am.open(file:///android_asset/myfoldername/myfilename);
File file = createFileFromInputStream(inputStream);
private File createFileFromInputStream(InputStream inputStream) {
try{
File f = new File(my_file_name);
OutputStream outputStream = new FileOutputStream(f);
byte buffer[] = new byte[1024];
int length = 0;
while((length=inputStream.read(buffer)) > 0) {
outputStream.write(buffer,0,length);
}
outputStream.close();
inputStream.close();
return f;
}catch (IOException e) {
//Logging exception
}
return null;
}