从JavaScript播放声音的WebView [英] Playing sound in WebView from JavaScript

查看:400
本文介绍了从JavaScript播放声音的WebView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从加载的WebView从资产的JavaScript code播放声音:

 的WebView web_view =(web视图)findViewById(R.id.web_view);
web_view.getSettings()setJavaScriptEnabled(真)。
web_view.setWebChromeClient(新WebChromeClient());
web_view.loadUrl(文件:///assets/www/index.html);
 

我尝试以下方法如何播放音频OGG,MP3和WAV文件的所有组合中,JavaSrcipt code是资产/ WWW / JS / play.js:

 音频=新的音频(../音频/ sound.mp3);
audio.load();
audio.play();

音频=新的音频(./音频/ sound.mp3);
audio.load();
audio.play();

音频=新的音频(音频/ sound.mp3);
audio.load();
audio.play();

音频=新的音频(文件:///android_asset/www/audio/sound.mp3);
audio.load();
audio.play();

声音=新的声音();
。audio.src =的document.getElementById(audio_tag)SRC;
audio.load();
audio.play();
 

在哪里audio_tag为<音频ID =audio_tagSRC =音频/ sound.mp3preLOAD =自动>,也试图与路径和格式的所有组合。

但声音是不是在玩,只知道什么可能是错的是下面的一般错误:

  E / MediaPlayer的(1530):错误(1,-2147483648)
 

此信息消息猜测,路径音频文件应该是正确的第二个低谷第五种情况:

  I / StagefrightPlayer(33):的setDataSource(文件:///android_asset/www/audio/sound.mp3');
 

虽然此问题可被认为是重复的 <一href="http://stackoverflow.com/questions/3795276/android-webview-playing-audio-with-javascript">Android的WebView播放音频的JavaScript ,答案是没有帮助的,无论如何,因为shouldOverrideUrlLoading不会被调用,我想pcisely在这里指定此问题的详细$ P $。

你有没有什么线索可能是错误的或如何找出是什么呢?

感谢你。

编辑:银河吉奥测试了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 ::当前
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):发送机code:2
02-06 17:15:13.829:V / PlayerDriver(95):CommandCompleted
02-06 17:15:13.829:V / PlayerDriver(95):完成命令PLAYER_SETUP状态= PVMFSuccess
02-06 17:15:13.829:V / PVPlayer(95):的setDataSource(文件:///android_asset/www/audio/sound.mp3)
02-06 17:15:13.839:V / PVPlayer(95):prepareAsync
02-06 17:15:13.839:V / PVPlayer(95):数据源=文件:///android_asset/www/audio/sound.mp3
02-06 17:15:138.49:V / PlayerDriver(95):发送机code:3
02-06 17:15:13.849:V / PlayerDriver(95):handleSetDataSource
02-06 17:15:138.49:V / PlayerDriver(95):handleSetDataSource-扫描扩展
02-06 17:15:13.849:V / PlayerDriver(95):HandleInformationalEvent:PVMFInfoErrorHandlingStart
02-06 17:15:138.49:V / PlayerDriver(95):HandleInformationalEvent:类型= 26未处理
02-06 17:15:138.49:W / MediaPlayer的(4361):信息/警告(1,26)
02-06 17:15:13.849:V / PlayerDriver(95):CommandCompleted
02-06 17:15:138.49:V / PlayerDriver(95):完成命令PLAYER_SET_DATA_SOURCE状态= PVMFErrNotSupported
02-06 17:15:138.49:E / PlayerDriver(95):命令PLAYER_SET_DATA_SOURCE完成,错误或信息PVMFErrNotSupported
02-06 17:15:138.49:E / MediaPlayer的(4361):错误(1,-4)
02-06 17:15:138.49:V / PVPlayer(95):run_init S = -2147483648,取消= 0
02-06 17:15:13.849:V / PlayerDriver(95):HandleInformationalEvent:PVMFInfoErrorHandlingComplete
02-06 17:15:138.49: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):发送机code: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):发送机code:11
02-06 17:15:13.939:V / PlayerDriver(95):handleReset
02-06 17:15:13.939:V / PlayerDriver(95):CommandCompleted
02-06 17:15:13.939:V / PlayerDriver(95):完成命令PLAYER_RESET状态= PVMFSuccess
02-06 17:15:13.939:V / PlayerDriver(95):发送机code:17
02-06 17:15:13.939:V / PlayerDriver(95):handleRemoveDataSource
02-06 17:15:13.939:V / PlayerDriver(95):CommandCompleted
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):取消映射文件
 

解决方案

我有同样的问题,最后我使用的PhoneGap和科尔多瓦在这里你可以轻松地播放和录制音频: http://docs.phonegap.com/en/2.9.0/cordova_media_media .md.html

I'm trying to play sound from JavaScript code loaded to WebView from assets:

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");

I tried all combinations of following ways how to play audio with OGG, MP3 and WAV files, the JavaSrcipt code is in 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();

Where audio_tag is < audio id="audio_tag" src="audio/sound.mp3" preload="auto">, also tried with all combinations of paths and formats.

But the sound is not playing and only clue what may be wrong is following general error:

E/MediaPlayer(1530): error (1, -2147483648)

Guessing from this info message, the path to audio file should be correct for second trough fifth case:

I/StagefrightPlayer(33): setDataSource('file:///android_asset/www/audio/sound.mp3');

Although this question may be considered as duplicate of Android WebView playing audio with javascript and the answer is not helping anyhow since shouldOverrideUrlLoading is never called, I'm trying to specify this problem more precisely here.

Do you have any clue what may be wrong or how to find out what is it?

Thank you.

Edit: Testing in Galaxy Gio with Android 2.3 gives me different set of errors though:

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): send PLAYER_SETUP
02-06 17:15:13.829: V/PlayerDriver(95): Send player code: 2
02-06 17:15:13.829: V/PlayerDriver(95): CommandCompleted
02-06 17:15:13.829: V/PlayerDriver(95): Completed command 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): prepareAsync
02-06 17:15:13.839: V/PVPlayer(95):   data source = file:///android_asset/www/audio/sound.mp3
02-06 17:15:13.849: V/PlayerDriver(95): Send player code: 3
02-06 17:15:13.849: V/PlayerDriver(95): handleSetDataSource
02-06 17:15:13.849: V/PlayerDriver(95): handleSetDataSource- scanning for extension
02-06 17:15:13.849: V/PlayerDriver(95): HandleInformationalEvent: PVMFInfoErrorHandlingStart
02-06 17:15:13.849: V/PlayerDriver(95): HandleInformationalEvent: type=26 UNHANDLED
02-06 17:15:13.849: W/MediaPlayer(4361): info/warning (1, 26)
02-06 17:15:13.849: V/PlayerDriver(95): CommandCompleted
02-06 17:15:13.849: V/PlayerDriver(95): Completed command PLAYER_SET_DATA_SOURCE status=PVMFErrNotSupported
02-06 17:15:13.849: E/PlayerDriver(95): Command PLAYER_SET_DATA_SOURCE completed with an error or info PVMFErrNotSupported
02-06 17:15:13.849: E/MediaPlayer(4361): error (1, -4)
02-06 17:15:13.849: V/PVPlayer(95): run_init s=-2147483648, cancelled=0
02-06 17:15:13.849: V/PlayerDriver(95): HandleInformationalEvent: PVMFInfoErrorHandlingComplete
02-06 17:15:13.849: W/PlayerDriver(95): PVMFInfoErrorHandlingComplete
02-06 17:15:13.939: I/MediaPlayer(4361): Info (1,26)
02-06 17:15:13.939: E/MediaPlayer(4361): Error (1,-4)
02-06 17:15:13.939: V/PVPlayer(95): reset
02-06 17:15:13.939: V/PlayerDriver(95): Send player code: 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): Completed command PLAYER_CANCEL_ALL_COMMANDS status=PVMFSuccess
02-06 17:15:13.939: V/PlayerDriver(95): Send player code: 11
02-06 17:15:13.939: V/PlayerDriver(95): handleReset
02-06 17:15:13.939: V/PlayerDriver(95): CommandCompleted
02-06 17:15:13.939: V/PlayerDriver(95): Completed command PLAYER_RESET status=PVMFSuccess
02-06 17:15:13.939: V/PlayerDriver(95): Send player code: 17
02-06 17:15:13.939: V/PlayerDriver(95): handleRemoveDataSource
02-06 17:15:13.939: V/PlayerDriver(95): CommandCompleted
02-06 17:15:13.939: V/PlayerDriver(95): Completed command PLAYER_REMOVE_DATA_SOURCE status=PVMFSuccess
02-06 17:15:13.939: V/PlayerDriver(95): remove datasource complete
02-06 17:15:13.939: V/PVPlayer(95): unmap file

解决方案

I had the same problem and finally i'm using phonegap and cordova where you can play and record audios easily: http://docs.phonegap.com/en/2.9.0/cordova_media_media.md.html

这篇关于从JavaScript播放声音的WebView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆