我终于用WebInterface解决了这个问题,这也不是一个很好的解决方案,音频文件在播放前必须写入磁盘。但成功了。
这是我使用的HTML:
<button onclick='Audio.playAudio()' />
import android.media.MediaPlayer;
import android.webkit.JavascriptInterface;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class PlayAudioWebInterface {
@JavascriptInterface
public void playAudio() {
try {
MediaPlayer mp = new MediaPlayer();
FileInputStream fis = getFileInputStream();
mp.setDataSource(fis.getFD());
fis.close();
mp.prepare();
mp.start();
} catch (Exception e) {
Logger.debug("Couldn't play audio");
}
}
private FileInputStream getFileInputStream() throws IOException {
File resourceFile = new File("/data/data/com.example/files/test.wav");
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(resourceFile));
bos.write(extractWAVContents());
bos.flush();
bos.close();
return new FileInputStream(resourceFile);
}
private byte[] extractWAVContents() {
// extract wav from zip
}
}
将其分配给WebView
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new PlayAudioWebInterface(), "Audio");