MediaPlayer isPlaying:在状态MEDIA_PLAYER_STATE_ERROR中调用

时间:2015-07-13 18:37:53

标签: cordova

我正在使用Cordova开发应用程序。在这个应用程序中,我有30页,它应该播放每次滑动的声音。它工作正常,直到大约20页,然后我开始得到这个错误

  

MEDIA_PLAYER_STATE_ERROR

基于我在这个论坛上的搜索,我相信它的媒体没有被发布,但我看到的例子是基于java的。 我很难搞清楚释放Media的位置。

感谢任何帮助。谢谢。

以下是我当前的代码

function playAudio(src) {
        // Create Media object from src
    try{
      my_media = new Media(src,onSuccess,onError,status_change);

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

    } catch (e){
    console.log("In catch");
         releaseMedia();
    }
   }


    function pauseAudio() {
        if (my_media) {
            my_media.pause();
        }
    }

    // Stop audio
    //
    function stopAudio() {
        if (my_media) {
            my_media.stop();
        }
        clearInterval(mediaTimer);
        mediaTimer = null;
    }
    // onSuccess Callback
    //
    function onSuccess() {
        console.log("playAudio():Audio Success");
    }

    // onError Callback
    //
    function onError(error) {
        console.log('code: '    + error.code    + '\n' +
              'message: ' + error.message + '\n');
              releaseMedia();
    }
    function releaseMedia(){
         if (my_media) {
                    my_media.release();
         }
         clearInterval(mediaTimer);
         mediaTimer = null;
    }

function status_change(code) {
    switch (code) {
    case Media.MEDIA_STOPPED :  console.log("stopped"); break;
    case Media.MEDIA_STARTING : console.log("starting"); break;
    case Media.MEDIA_RUNNING : console.log("running"); break;
    case Media.MEDIA_ERROR: console.log("error");break;
    }

}

Logcat错误登录

    "starting", 
 E/MediaPlayer? error (-19, 0)
 V/MediaPlayer? callback application
V/MediaPlayer? Received seek complete
V/MediaPlayer? All seeks complete - return to regularly scheduled program
 V/MediaPlayer? back from callback
 V/MediaPlayer? getDuration_l
07-13 13:19:35.080  17446-17458/com.aa.apps V/MediaPlayer? callback application
07-13 13:19:35.080  17446-17458/com.aa.apps V/MediaPlayer? back from callback
 E/MediaPlayer? Attempt to call getDuration without a valid mediaplayer
 V/MediaPlayer? message received msg=100, ext1=-38, ext2=0
E/MediaPlayer? error (-38, 0)
V/MediaPlayer? callback application
V/MediaPlayer? back from callback
V/MediaPlayer-JNI? getDuration: 0 (msec)
E/MediaPlayer? Error (-19,0)
D/AudioPlayer? on completion is calling stopped
E/MediaPlayer? Error (-38,0)
D/AudioPlayer? on completion is calling stopped
V/MediaPlayer-JNI? getCurrentPosition: 0 (msec)
E/MediaPlayer? isPlaying: called in state MEDIA_PLAYER_STATE_ERROR
V/MediaPlayer-JNI? isPlaying: 0
 I/chromium? [INFO:CONSOLE(98)] "running", 

1 个答案:

答案 0 :(得分:0)

在playAudio(src)中创建Media之前添加以下代码解决了这个问题。

if(my_media != null){
         releaseMedia();
 }