我当前正在制作一个视频播放器应用程序,用户可以在其中获取其外部存储中所有视频的列表,并且在单击时会加载一个新活动。我正在使用以下代码:
private void initialiseMediaPlayer() {
try {
mMediaPlayer=new MediaPlayer();
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setOnVideoSizeChangedListener(this);
mMediaPlayer.setOnCompletionListener(this);
mMediaPlayer.setOnBufferingUpdateListener(this);
mMediaPlayer.setScreenOnWhilePlaying(true);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
}
在onCreate()
中调用此方法:
@Override
protected void onResume() {
super.onResume();
Intent intentStarted = getIntent();
if(intentStarted.hasExtra(Intent.EXTRA_TEXT)) {
Uri uri = Uri.parse(intentStarted.getStringExtra(Intent.EXTRA_TEXT));
try{ mMediaPlayer.setDataSource(this,uri);}
catch (IOException e) {
e.printStackTrace();
}
finally {
mMediaPlayer.prepareAsync();
}
}
}
我从doc中读取的内容是newMediaplayer()
处于空闲状态,并且setDataSource()
将其传输到初始化状态。 prepareAsync()
将其转移到准备状态,因此上述代码必须有效。
我也尝试使用以下代码,但发生了相同的事情:
@Override
public void surfaceCreated(SurfaceHolder holder) {
mMediaPlayer.setDisplay(holder);
mMediaPlayer.prepareAsync();
mVideoSurface.adjustSize(getDeviceWidth(this),getDeviceHeight(this),mVideoSurface.getWidth(), mVideoSurface.getHeight());
}