2014-03-18 66 views
0

我建设起着几个视频的应用程序,我有两个不同的用户场景:如何知道MediaPlayer是否处于停止状态?

方案1.虽然视频“A”正在播放,如果用户点击下一步按钮,然后停止和播放下一个视频“ B”。 情景2播放视频'A',如果完成,用户点击下一个按钮并播放视频'B'。

对于第一种情况,我使用mediaPlayer.isPlaying()方法来检测它是否处于Started状态,并且它工作正常。但是,如果我在第二种场景中使用相同的代码,则isPlaying()会抛出IllegalStateException

这里是我的播放视频代码:

private void playVideos(SurfaceHolder holder) { 

    try { 
     mediaPlayer = new MediaPlayer(); 
     mediaPlayer.setDisplay(holder); 
     Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" + video_files[mCounter]); 
     mediaPlayer.setDataSource(this, uri); 
     mediaPlayer.prepare(); 
     mediaPlayer.start(); 
     mediaPlayer.setOnCompletionListener(new OnCompletionListener() { 

      @Override 
      public void onCompletion(MediaPlayer mp) { 
       if (mCounter <= 8) { 
        onVideoCompletion(mediaPlayer); 
       } else { 
        mediaPlayer.stop(); 
        mediaPlayer.release(); 
       } 
      } 
     }); 

    } catch (IOException e) { 
    } catch (IllegalArgumentException e) { 
    } catch (IllegalStateException e) { 
    } 
} 

而且,这里是我的按钮收听播放下一个视频:我试图破解这个问题

nextBtn.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      if(mediaPlayer != null) { 
       if(mediaPlayer.isPlaying()) { 
        mediaPlayer.stop(); 
        mediaPlayer.release(); 
       } 
      } 
      mCounter += 1; 
      if (mCounter <= 8) { 
       playVideos(holder); 
      } 
     } 
    }); 

一种方法是使用一个布尔变量而不是isPlaying()方法。例如,

boolean mIsPlaying = false; 
... 
// in button listener 
if(mIsPlaying) { 
    mediaPlayer.stop(); 
    mediaPlayer.release(); 
} 
... 
// in playVideos() function 
mediaPlayer.start(); 
mIsPlaying = true; 
mediaPlayer.setOnCompletionListener(new OnCompletionListener() { 

    @Override 
    public void onCompletion(MediaPlayer mp) { 
     if (mCounter <= 8) { 
      onVideoCompletion(mediaPlayer); 
     } else { 
      mediaPlayer.stop(); 
      mediaPlayer.release(); 
     } 
    } 
}); 

这适合我的两个场景,但我不知道,如果是这样做的正确方法。是不是有什么办法来检测mediaPlayer是否在Stopped状态?

回答

1

我看了一下Google的文档,你可以找到here。你只能知道玩家是否在玩();或isLooping(); ...所以不,没有一种“简单”或“短”的方式来实现你想要的。希望它有帮助。

+0

是的,我已经检查过该文件,但我不确定没有其他方法..但是谢谢! –

相关问题