2014-03-18 86 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

是的,我已經檢查過該文件,但我不確定沒有其他方法..但是謝謝! –

相關問題