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

解决方案 »

  1.   

    在OnCompletionListener里面处理就行了,我就是这么做的.
      

  2.   

    llxxhm,你的代码是怎么写的,能不能给点代码,我在OnCompletionListener中有处理,就是播下一首,可是他不播黑屏,只有在catch(){}中加setdatasource("下一首path")才播,ahaso:怎么判断非正常结束呢
      

  3.   

    这是我的主要代码
     //播放器的设置  
     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();
    }  


     }
      

  4.   

    你可以打印些log看看如果非正常结束的话,运行到哪一步,加个全局变量在那一步后面改变全局变量的值,在oncompetition中就能判断了啊
      

  5.   

    我机子没有数据线,所以不能连接调试,我在try{}catch中改变全局变量,发现oncompetition中的代码比catch中的代码更早执行