【发布时间】:2012-02-06 14:56:13
【问题描述】:
我正在尝试从资产加载到 WebView 的 JavaScript 代码播放声音:
WebView web_view = (WebView) findViewById(R.id.web_view);
web_view.getSettings().setJavaScriptEnabled(true);
web_view.setWebChromeClient(new WebChromeClient());
web_view.loadUrl("file:///assets/www/index.html");
我尝试了以下方式的所有组合,如何使用 OGG、MP3 和 WAV 文件播放音频,JavaSrcipt 代码位于 assets/www/js/play.js:
audio = new Audio("../audio/sound.mp3");
audio.load();
audio.play();
audio = new Audio("./audio/sound.mp3");
audio.load();
audio.play();
audio = new Audio("audio/sound.mp3");
audio.load();
audio.play();
audio = new Audio("file:///android_asset/www/audio/sound.mp3");
audio.load();
audio.play();
audio = new Audio();
audio.src = document.getElementById("audio_tag").src;
audio.load();
audio.play();
audio_tag 是<audio id="audio_tag" src="audio/sound.mp3" preload="auto"></audio>,也尝试了所有路径和格式的组合。
但是声音没有播放,唯一的线索可能是以下一般错误:
E/MediaPlayer(1530): 错误 (1, -2147483648)
从这条信息消息中猜测,音频文件的路径对于第二个到第五个情况应该是正确的:
I/StagefrightPlayer(33): setDataSource('file:///android_asset/www/audio/sound.mp3');
虽然这个问题可能被认为是重复的 Android WebView playing audio with javascript 并且答案无论如何都没有帮助,因为 shouldOverrideUrlLoading 从未被调用,我试图在这里更准确地指定这个问题。
您是否知道可能出了什么问题或如何找出问题所在?
谢谢。
编辑:在 Galaxy Gio 中使用 Android 2.3 进行测试给了我不同的错误集:
02-06 17:15:13.829: V/PlayerDriver(95): AddToScheduler 02-06 17:15:13.829:V/PlayerDriver(95):PendForExec 02-06 17:15:13.829: V/PlayerDriver(95): OsclActiveScheduler::Current 02-06 17:15:13.829:V/PlayerDriver(95):StartScheduler 02-06 17:15:13.829: V/PVPlayer(95): 发送 PLAYER_SETUP 02-06 17:15:13.829: V/PlayerDriver(95): 发送玩家代码: 2 02-06 17:15:13.829: V/PlayerDriver(95):命令已完成 02-06 17:15:13.829: V/PlayerDriver(95):已完成命令 PLAYER_SETUP status=PVMFSuccess 02-06 17:15:13.829: V/PVPlayer(95): setDataSource(file:///android_asset/www/audio/sound.mp3) 02-06 17:15:13.839: V/PVPlayer(95): 准备异步 02-06 17:15:13.839: V/PVPlayer(95):数据源= 文件:///android_asset/www/audio/sound.mp3 02-06 17:15:13.849: V/PlayerDriver(95): 发送玩家代码: 3 02-06 17:15:13.849: V/PlayerDriver(95):handleSetDataSource 02-06 17:15:13.849: V/PlayerDriver(95):handleSetDataSource- 扫描扩展
02-06 17:15:13.849:V/PlayerDriver(95):HandleInformationalEvent: PVMFInfoErrorHandlingStart 02-06 17:15:13.849: V/PlayerDriver(95): 处理信息事件:类型 = 26 未处理 02-06 17:15:13.849: W/MediaPlayer(4361): 信息/警告 (1, 26) 02-06 17:15:13.849: V/PlayerDriver(95):命令已完成 02-06 17:15:13.849: V/PlayerDriver(95):已完成命令 PLAYER_SET_DATA_SOURCE 状态=PVMFErrNotSupported 02-06 17:15:13.849: E/PlayerDriver(95): 命令 PLAYER_SET_DATA_SOURCE 完成,但出现错误或信息
PVMFErrNotSupported 02-06 17:15:13.849: E/MediaPlayer(4361): 错误 (1, -4) 02-06 17:15:13.849: V/PVPlayer(95): run_init s=-2147483648, 取消=0 02-06 17:15:13.849: V/PlayerDriver(95): 处理信息事件:PVMFInfoErrorHandlingComplete 02-06 17:15:13.849:W/PlayerDriver(95):PVMFInfoErrorHandlingComplete
02-06 17:15:13.939: I/MediaPlayer(4361): 信息 (1,26) 02-06 17:15:13.939: E/MediaPlayer(4361): 错误 (1,-4) 02-06 17:15:13.939: V/PVPlayer(95): 重置 02-06 17:15:13.939: V/PlayerDriver(95): 发送 播放器代码:18 02-06 17:15:13.939:V/PlayerDriver(95): handleCancelAllCommands 02-06 17:15:13.939: V/PlayerDriver(95): CommandCompleted 02-06 17:15:13.939:V/PlayerDriver(95):已完成 命令 PLAYER_CANCEL_ALL_COMMANDS 状态=PVMFSuccess 02-06 17:15:13.939:V/PlayerDriver(95):发送玩家代码:11 02-06 17:15:13.939:V/PlayerDriver(95):handleReset 02-06 17:15:13.939: V/PlayerDriver(95):命令已完成 02-06 17:15:13.939: V/PlayerDriver(95):已完成命令 PLAYER_RESET status=PVMFSuccess 02-06 17:15:13.939:V/PlayerDriver(95):发送玩家代码:17 02-06 17:15:13.939:V/PlayerDriver(95):handleRemoveDataSource 02-06 17:15:13.939:V/PlayerDriver(95):命令已完成 02-06 17:15:13.939:V/PlayerDriver(95):完成命令 PLAYER_REMOVE_DATA_SOURCE 状态=PVMFSuccess 02-06 17:15:13.939: V/PlayerDriver(95):删除数据源完成 02-06 17:15:13.939: V/PVPlayer(95): 取消映射文件
【问题讨论】:
-
认为我找到了一个很好的解决方法。请在此处查看我的答案 stackoverflow.com/a/40634355/3866399
标签: javascript android webview audio