在Android Phonegap应用程序上播放声音

在Android Phonegap应用程序上播放声音,android,cordova,Android,Cordova,我试着播放mp3文件。如果我在本地Web服务器上更改文件的路径,则此操作有效,但如果我在Android设备上运行此操作,则不会播放声音,也不会显示错误 我很高兴舒尔没有找到mp3文件,但我仍然不知道如何修复它 这是Html <body> <audio id="successSound" src="/android_asset/www/sound/successSound.mp3" type="audio/mpeg" ></audio>

我试着播放mp3文件。如果我在本地Web服务器上更改文件的路径,则此操作有效,但如果我在Android设备上运行此操作,则不会播放声音,也不会显示错误

我很高兴舒尔没有找到mp3文件,但我仍然不知道如何修复它

这是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>
文件结构

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

我试过了

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

这在我的本地Web服务器上的chrome中起作用,但在Android上不起作用

我试过了

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


这很有效,但我需要播放本地文件

您是否尝试删除代码中的
/android\u资产/www/
部分?你的应用程序就像一个网站,它认为它的根是www文件夹本身

编辑:
我将编辑评论。代码没有以某种方式显示。

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

HTML5API提供的播放方法对于播放web上可用的媒体文件非常有用。Phonegap提供媒体插件来播放本地媒体文件。我签出了您的代码,并通过进行以下更改成功地播放了声音。请在你那边查一下

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

<gap:plugin name="org.apache.cordova.media" />
使用此代码

  <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>

我也遇到了同样的问题,并最终使其正常工作,问题在于我的媒体变量的范围。我的工作原理如下:

(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')

}
};

基本上,我通过在onDeviceReady之外声明媒体变量来确保媒体变量的作用域是全局的,但是在deviceready事件之前没有调用该媒体。

尝试以下操作:您的浏览器不支持音频元素。使用媒体对象也适用于我。您的解决方案有效,但我必须提供音频文件的绝对路径。谢天谢地,我必须和netchi做同样的事。这只是一个问题(不使用HTML5音频)`` // 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; }
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>
(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')

}
};
`` // 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;
        }