在Android的Phonegap应用上播放声音

我尝试播放一个mp3文件。 这个工程,如果我改变我的本地networking服务器上的文件path,但如果我在Android设备上运行此声音不播放,并没有显示错误。

我很舒服,没有findMP3文件,但我仍然不知道如何解决它。

这是Html

<body> <audio id="successSound" src="/android_asset/www/sound/successSound.mp3" type="audio/mpeg" ></audio> <audio id="errorSound" src="/android_asset/www/sound/errorSound.mp3" type="audio/mpeg" ></audio> <!-- some more UI --> </body> 

这是Javascript

 document.getElementById('errorSound').play(); 

这是文件结构

 phonyapp `-- www `-- index.html |-- sound | |-- errorSound.mp3 | `-- successSound.mp3 |-- res `-- spec 

编辑1

我试过了

 <audio id="successSound" src="sound/successSound.mp3" type="audio/mpeg" ></audio> 

这工作在我的本地networking服务器铬,但不是在Android上。

我试过了

 <audio id="successSound" src="http://html5multimedia.com/media/sayHello.mp3" type="audio/mpeg" ></audio> 

这工作,但我需要得到本地文件播放

Solutions Collecting From Web of "在Android的Phonegap应用上播放声音"

HTML5 API提供的播放方法对于播放networking上可用的媒体文件很有用。 Phonegap提供媒体插件播放本地媒体文件。 我检查了你的代码,并通过进行以下更改成功播放声音。 请检查你的结局。

1.将以下行添加到config.xml

 <gap:plugin name="org.apache.cordova.media" /> 

2.更换index.html中的行

 <button onclick="document.getElementById('successSound').play()">Play successSound local</button> <button onclick="document.getElementById('errorSound').play()">Play errorSound local</button> 

用这些线

 <button onclick="playAudio('successSound')">Play successSound local</button> <button onclick="playAudio('errorSound')">Play errorSoundlocal</button> 

3.将以下函数添加到js / index.js

 function playAudio(id) { var audioElement = document.getElementById(id); var url = audioElement.getAttribute('src'); var my_media = new Media(url, // success callback function () { console.log("playAudio():Audio Success"); }, // error callback function (err) { console.log("playAudio():Audio Error: " + err); } ); // Play audio my_media.play(); } 

使用这个代码

  <body> <audio id="successSound" src="file:///android_asset/www/sound/successSound.mp3" type="audio/mpeg" ></audio> <audio id="errorSound" src="file///android_asset/www/sound/errorSound.mp3" type="audio/mpeg" ></audio> <!-- some more UI --> </body> 

你有没有尝试删除代码中的/android_asset/www/ part? 你的应用程序就像一个网站,它认为它的根本就是www文件夹本身。

编辑:我会编辑评论。 代码不能以某种方式显示。

如果您使用的是本地文件,请尝试使用src="file:///yourpath/sayHello.mp3"

我有同样的问题,终于得到它的工作,与我的问题说谎我的媒体variables的范围。 我得到它的工作如下:

 (function () { "use strict"; var media; document.addEventListener('deviceready', onDeviceReady.bind(this), false); function onDeviceReady() { media = new Media("/android_asset/www/sounds/wat is je wens.mp3", null, function (e) { alert('Media Error'); alert(JSON.stringify(e)); }); alert('deviceready') }; function onStart() { media.play(); alert('yay') } }; 

基本上我确信我的媒体variables的范围是通过在onDeviceReady之外声明它是全局的,但是在deviceready事件之前没有调用媒体。

 `` // Audio player // var my_media = null; var mediaTimer = null; // Play audio // function playAudio(src) { // Create Media object from src my_media = new Media(src, onSuccess, onError); // Play audio my_media.play(); // Update my_media position every second if (mediaTimer == null) { mediaTimer = setInterval(function() { // get my_media position my_media.getCurrentPosition( // success callback function(position) { if (position > -1) { setAudioPosition((position) + " sec"); } }, // error callback function(e) { console.log("Error getting pos=" + e); setAudioPosition("Error: " + e); } ); }, 1000); } } // onSuccess Callback // function onSuccess() { console.log("playAudio():Audio Success"); } function stopAudio() { if (my_media) { my_media.stop(); } clearInterval(mediaTimer); mediaTimer = null; } // onError Callback // function onError(error) { } // Set audio position // function setAudioPosition(position) { document.getElementById('audio_position').innerHTML = position; }