【发布时间】:2018-12-16 10:31:22
【问题描述】:
我在 Android 上创建了一个 WebView,用于加载 HTML,如下所示:
<audio controls>
<source src="zip://resource?fileName=apple.wav" type="audio/wav">
</audio>
apple.wav 存储在本地 zip 文件中。我想要的是,当用户单击音频组件上的“播放”按钮时,WebView 将尝试从 zip 文件中加载 wav 音频。目前我尝试的是创建一个本地的WebViewClient,如下。
public class MyWebViewClient extends WebViewClient {
@Override
public WebResourceResponse shouldInterceptRequest(final WebView view, String url) {
if (url.startsWith("zip://resource")) {
Uri uri = Uri.parse(url);
String fileName = uri.getQueryParameter("fileName");
byte[] resourceContents = getResource(fileName);
WebResourceResponse webResourceResponse = new WebResourceResponse("audio/wav",
"UTF-8", new ByteArrayInputStream(resourceContents));
Map<String, String> responseHeaders = new HashMap<>();
responseHeaders.put("Content-Type", "audio/wav");
webResourceResponse.setResponseHeaders(responseHeaders);
return webResourceResponse;
} else {
return super.shouldInterceptRequest(view, url);
}
}
private byte[] getResource(String resourceName) {
// read the audio contents from the pre-determined zip file
}
}
然后将其分配给 WebView。
WebView webView = findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new MyWebViewClient());
但它没有用。当我点击“播放”按钮时,什么也没发生。我在网上找了很久,唯一相关的问题是this one,但是这个问题的答案并不优雅,涉及修改HTML和将音频文件写入sdcard。
为什么我的代码不起作用?有没有优雅的方法让它工作?
【问题讨论】:
标签: android