视频播放器




public class MainActivity extends Activity  {
      
      private TextView  et;
      private String path;
      private MediaPlayer mediaPlayer;
      private SurfaceView  sfv;
      private int position;
      

      @Override
      protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
            setContentView(R.layout. activity_main);
            
          et=(TextView) findViewById(R.id. et);
          sfv=(SurfaceView) findViewById(R.id. sfv);
         
        //告诉surfaceview 不要自己维护缓冲区 而是 等待多媒体播放器的框架 把数据填充过来
        sfv.getHolder(). setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
       
            
             //关心surfaceview holder的存活周期
             sfv.getHolder().addCallback( new Callback() {
                  
                   @Override
                   public void surfaceDestroyed(SurfaceHolder holder) {
                        System. out.println( "holder 被销毁了" );
                         if( mediaPlayer!= null&& mediaPlayer.isPlaying()){
                               position =       mediaPlayer.getCurrentPosition();
                               mediaPlayer.stop();
                               mediaPlayer.release();
                        }
                        
                  }
                  
                   @Override
                   public void surfaceCreated(SurfaceHolder holder) {
                        System. out.println( "holder 被创建了" );
                         if( position>0){
                               try {
                                     mediaPlayer = new MediaPlayer();
                                     mediaPlayer.setAudioStreamType(AudioManager. STREAM_MUSIC);
                                     mediaPlayer.setDisplay(holder);    //画面显示在哪里
                                     mediaPlayer.setDataSource( path);
                                     //mediaPlayer.prepare(); // might take long! (for buffering, etc)
                                     mediaPlayer.prepareAsync(); //异步的准备
                                     mediaPlayer.setOnPreparedListener( new OnPreparedListener() {
                                          
                                           @Override
                                           public void onPrepared(MediaPlayer mp) {
                                                 mediaPlayer.start();
                                                 mediaPlayer.seekTo( position);
                                          }
                                    });
                              } catch (Exception e) {
                                    e.printStackTrace();
                              }
                        }
                  }
                  
                   @Override
                   public void surfaceChanged(SurfaceHolder holder, int format, int width,
                               int height) {
                        System. out.println( "holder 变化了.");
                        
                  }
            });
         
       }


      /**
       * 开始播放的方法
       * @param view
       */
      public void  start(View view){
             path = et.getText().toString().trim();
             File file= new File( path);
            
             if(file.exists()&&file.length()>0){
                  
                   try {
                         mediaPlayer= new MediaPlayer();
                         mediaPlayer.setAudioStreamType(AudioManager. STREAM_MUSIC);
                         //让画面显示在sfv
                         mediaPlayer.setDisplay( sfv.getHolder());
                        
                         mediaPlayer.setDataSource( path);
                         // mediaPlayer.prepare();
                         mediaPlayer.prepareAsync();  //异步的准备
                        
                        
                         //设置一个准备完毕之后的监听器
                         mediaPlayer.setOnPreparedListener( new OnPreparedListener() {
                              
                               @Override
                               public void onPrepared(MediaPlayer mp) {
                                    
                                     mediaPlayer.start();
                              }
                        });
                        
                        
                         mediaPlayer.start();
                  } catch (Exception e) {
                        e.printStackTrace();
                        Toast. makeText(getApplicationContext(), "文件格式不正确", 0).show();
                  }
                  
                  
             } else{
                   Toast. makeText(this , "文件路径不正确" , 0).show();
                   return;
             }
            
      }
      
      
      /**
       * 暂停播放的方法
       * @param view
       */
      public void  pause(View view){
            
             Button  btpause=(Button) findViewById(R.id. pause);
             if( mediaPlayer!= null|| mediaPlayer.isPlaying()){
                   mediaPlayer.pause();
                   btpause.setText( "继续");
                   return;
             }
            
             if( "继续".equals(btpause.getText().toString().trim())){
                   mediaPlayer.start();
                   btpause.setText( "暂停");
                   return;
             }
            
            
            
      }
      

      /**
       * 重新开始播放的方法
       */
      public void  restart(View view){
             if( mediaPlayer!= null|| mediaPlayer.isPlaying()){
                   mediaPlayer.seekTo(0);
                   mediaPlayer= null;
                   return;
            }
            
            restart(view);
      }
      
      
      /**
       * 停止播放的方法
       */
      public void stop(View view){
             if( mediaPlayer!= null|| mediaPlayer.isPlaying()){
                   mediaPlayer.stop();
                   mediaPlayer.release();
                   return;
            }
            
            
      }
      
      

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值