PhoneGap Media插件 - 你能检测到网址流何时加载?

时间:2014-05-15 12:30:45

标签: javascript cordova media

我在使用构建3.1的PhoneGap Media插件让我的音频播放器在iOS和Android中正常工作时遇到了一些问题

我有播放和停止工作正常的按钮,但是当你点击播放时,音频网址加载并冻结操作系统会有轻微的延迟。我可以通过短暂的延迟来解决这个问题,所以我想我会在屏幕上弹出一个加载图标。

我已经在这里发布了一些时间试图让JS工作,因为我不是专家,但刚才我意识到我的代码中没有任何内容可以检查音频是否真的在播放!

playAudio功能加载到音频中,然后将播放按钮设置为停止按钮。我认为function success() {意味着它正在播放,但它实际上意味着它已经完成了播放。

在我的代码中,当点击音频链接时,加载器功能会使一个微调器显示在屏幕上,我认为“成功”#39;将装载机关闭,因为它装载的时候实际发生的事情就是灯塔停留并且在轨道结束后消失!

我意识到我需要一种方法来检测音轨是否实际上正在播放!

我该怎么做?!?!!

继承人的职能:

function loadPlay(src, trackName) {
   loader();
   playAudio(src, trackName);
}

function loader() {
        // make a loader spinner appear as track loads
    $(".loading").addClass("loadingnow");
}

function playAudio(src,trackname) {
    // for Android
    if (audioPlaying === false) {
        if (device.platform == 'Android') {
            src = '/android_asset/www/' + src;
        }
        media = new Media(src, success, error_error);
        media.play();
        //add playing class so play button is replaced with stop button
        document.getElementById(trackname).parentNode.className="playing";
        audioPlaying = true;
    } else {
        //audio is already playing
    }
}

function success() {
    // track isplaying so remove the stop button put play button back
    $(".playing").removeClass("playing");
    // now track is playing remove the loader spinner
    $(".loading").removeClass("loadingnow");

    audioPlaying = false;
}

function error_error(e) {
    //alert('great error');
    //alert(e.message);
}

function stopAudio() {
    // stop playing track
    if (media) {
        media.stop();
        audioPlaying = false;
    }
}

以下是PhoneGap Media插件API的链接: http://docs.phonegap.com/en/3.1.0/cordova_media_media.md.html#Media

我需要使用这个位吗?

Media.MEDIA_STARTING = 1;
Media.MEDIA_RUNNING = 2;
Media.MEDIA_PAUSED = 3;
Media.MEDIA_STOPPED = 4;

2 个答案:

答案 0 :(得分:5)

来自docs

The following constants are reported as the only parameter to the mediaStatus callback function.

Media.MEDIA_NONE = 0;
Media.MEDIA_STARTING = 1;
Media.MEDIA_RUNNING = 2;
Media.MEDIA_PAUSED = 3;
Media.MEDIA_STOPPED = 4;

mediaStatus回调是Media构造函数中提供的可选第三个回调...

media = new Media(src, success, error_error, status_change);

function status_change(code) {
    switch (code) :
    case Media.MEDIA_STOPPED : doSomething(); break;
}

答案 1 :(得分:0)

据我所知,ilovett的答案可能不适合你,因为在另外两种情况下会调用doSomething()函数:

  • 当有人使用media.stop()
  • 停止音乐时
  • 当媒体在Android上发布时(media.release())(不确定其他人,但iOS不会调用它)。

我正在这样做的方法是设置一个变量以确保函数不会被意外调用。