mediaplayer问题

kaonilaomua 2011-12-06 11:00:53
就是setdatasource()io异常,但我遇到这个异常的时候我用setErrorListener怎么监听不到呢,在OnCompletionListener中却可以监听到,我是想遇到io异常就播下一个视频文件,循环播放,高手帮帮我啊

...全文
155 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kaonilaomua 2011-12-17
  • 打赏
  • 举报
回复
虽然没解决,但还是感谢你们
ahaso 2011-12-07
  • 打赏
  • 举报
回复
你可以打印些log看看如果非正常结束的话,运行到哪一步,加个全局变量在那一步后面改变全局变量的值,在oncompetition中就能判断了啊
kaonilaomua 2011-12-07
  • 打赏
  • 举报
回复
这是我的主要代码
//播放器的设置
public void player()
{
if(mMediaPlayer!=null&&mMediaPlayer.isPlaying())
{
mMediaPlayer.stop();
}
mMediaPlayer.reset();
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setOnCompletionListener(
new MediaPlayer.OnCompletionListener()
{
// @Override
/*覆盖文件播出完毕事件*/
public void onCompletion(MediaPlayer arg0)
{
if(checkIO==0)
{
try
{ video++; //下一个视屏文件
if(video==listVideo.size())
{
video=0;
}
player();
}
catch (Exception e)
{
e.printStackTrace();
}
Toast.makeText(MediaActivity.this,"视频",Toast.LENGTH_LONG).show();
checkError=0;
}else{

}
}

});
/* 当MediaPlayer.OnErrorListener会运行的Listener */
mMediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener()
{
@Override
/*覆盖错误处理事件*/
public boolean onError(MediaPlayer arg0, int arg1, int arg2)
{
// TODO Auto-generated method stub
pro.setExp(arg1+"");
// int i=MediaPlayer.MEDIA_ERROR_SERVER_DIED;
checkPlayer=video;

checkError++; //不可播放文件个数
if(checkError>listVideo.size())
{
if(mMediaPlayer!=null&&mMediaPlayer.isPlaying())
{
mMediaPlayer.stop();
}
Toast.makeText(MediaActivity.this,"无可播放视频文件,请上传可播放视频",Toast.LENGTH_LONG).show();
//checkError=0;
}else
{
Toast.makeText(MediaActivity.this,listVideo.get(checkPlayer)+"视频不能播放,请删除",Toast.LENGTH_SHORT).show();
try
{
video++;
if(video==listVideo.size())
{
video=0;
}
player();
}
catch (Exception e)
{
e.printStackTrace();
}
}

return true;
}
});
try {
mMediaPlayer.setDisplay(surfaceHolder);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mMediaPlayer.setDataSource(path+"/"+listVideo.get(video));
mMediaPlayer.prepareAsync();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//checkIO=1;
//checkError++;
Toast.makeText(MediaActivity.this,listVideo.get(video),Toast.LENGTH_SHORT).show();
}


}
kaonilaomua 2011-12-07
  • 打赏
  • 举报
回复
llxxhm,你的代码是怎么写的,能不能给点代码,我在OnCompletionListener中有处理,就是播下一首,可是他不播黑屏,只有在catch(){}中加setdatasource("下一首path")才播,

ahaso:怎么判断非正常结束呢
ahaso 2011-12-07
  • 打赏
  • 举报
回复
同意1楼,加个全局判断的变量就能判断出是否是非正常结束要做什么处理了。
QQ515311445 2011-12-07
  • 打赏
  • 举报
回复
在OnCompletionListener里面处理就行了,我就是这么做的.
kaonilaomua 2011-12-07
  • 打赏
  • 举报
回复
我机子没有数据线,所以不能连接调试,我在try{}catch中改变全局变量,发现oncompetition中的代码比catch中的代码更早执行

80,337

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧