我希望访问的资产文件夹中有一个文件,我是这样做的:
AssetFileDescriptor fileSound = am.openFd("myfilepathetc/mymp3.mp3");
但我收到错误:
This file can not be opened as a file descriptor; it is probably compressed
经过一些谷歌搜索后,似乎我需要为我的文件添加一个扩展名,例如.mp3,因为Android压缩资源文件夹中的东西,除非它的格式已经压缩,唯一的问题是,我的文件已经是一个mp3它仍然不会打开。
有没有一种不妥协的方法?或者有没有人有更好的方式从资产访问MP3,请注意我不想从原始文件夹访问它,原因我不打算进入。
答案 0 :(得分:2)
为什么不用这个代替:
private void playAudioSound() {
try {
AssetFileDescriptor afd = context.getAssets().openFd("sounds/jad0005a.wav");
MediaPlayer player = new MediaPlayer();
player.setDataSource(afd.getFileDescriptor());
player.prepare();
player.start();
} catch (IOException e) {
e.printStackTrace();
}
}
答案 1 :(得分:0)
Java类:
import java.io.IOException;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.media.MediaPlayer;
import android.webkit.JavascriptInterface;
public class AudioInterface {
Context mContext;
AudioInterface(Context c) {
mContext = c;
}
//Play an audio file from the webpage
@JavascriptInterface
public void playAudio(String aud) { //String aud - file name passed
//from the JavaScript function
final MediaPlayer mp;
try {
AssetFileDescriptor fileDescriptor =
mContext.getAssets().openFd(aud);
mp = new MediaPlayer();
mp.setDataSource(fileDescriptor.getFileDescriptor(),
fileDescriptor.getStartOffset(),
fileDescriptor.getLength());
fileDescriptor.close();
mp.prepare();
mp.start();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Javascrip文件:
AndAud.playAudio("audio/One.mp3");
在您的java WebView上:
myWebView.addJavascriptInterface(new AudioInterface(this), "AndAud");
参考:http://www.codeproject.com/Tips/677841/Playing-Audio-on-Android-from-an-HTML-File