Мое Android-приложение показывает электронную книгу html5 в WebView.
У меня есть ZIP-файл, содержащий электронную книгу со всеми ее ресурсами: текст, изображения и аудио (mp3-файлы).
Для разблокировки книги я использую shouldInterceptRequest(), которая перехватывает файл: /// ... запросы и возвращает данные через объект WebResourceResponse. Код отлично подходит для текста и изображений.
Когда я получаю аудиоресурсы, я получаю ошибки во время выполнения, и аудиофайл не воспроизводится.
Примечание. Я вижу, что распакованный файл возвращается с правильным размером (около 10 МБ).Аудио не работает в Android WebView с использованием shouldInterceptRequest()
Сообщения об ошибках я получаю:
cr_MediaResourceGetter Файл не существует
cr_MediaResourceGetter Невозможно настроить Extractor метаданные
Мой HTML код для аудио:
<div xmlns="http://www.w3.org/1999/xhtml">
<p style="text-align:center;margin:0px;">
<audio controls="controls" src="../Audio/01-AudioTrack-01.mp3">Your browser does not support the audio tag.</audio>
<br />
</p>
</div>
Мой Android Код:
setWebViewClient(new WebViewClient()
{
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, final String url)
{
String urlWithoutAnchor = URLUtil.stripAnchor(url);
String fileName = urlWithoutAnchor;
try {
byte [] resource = tbxPool.getResource(fileName);
/* SIMPLE VERSION without calling setResponseHeaders():
return new WebResourceResponse(mimeType, "UTF-8", new ByteArrayInputStream(resource));
*/
WebResourceResponse returnedMediaResource = new WebResourceResponse(mimeType, "UTF-8", new ByteArrayInputStream(resource));
if (mimeType.toLowerCase().startsWith("audio")) {
Map<String, String> responseHeaders = new HashMap<String, String>();
responseHeaders.put("Content-Type", mimeType);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//2CLEAN
returnedMediaResource.setResponseHeaders(responseHeaders);
Logger.v(TAG, "Response Headers added to audio resource");
}
else {
//TODO: Handle else for API<21. Toast?
}
}
return returnedMediaResource;
} catch (IOException e) {
Logger.e(TAG, "failed to load resource "+fileName,e);
return null;
}
}
}
Environment
Android 6.0.1 (Nexus 5) Android System WebView версия 47
Требование Разъяснение
Звук играть в браузер, такой как документ html5, должен, не обойдя внешний проигрыватель.
Вопрос:
Что я делаю неправильно ?! Спасибо заранее!