音乐播放器+进度条 V2.0

来源:互联网 发布:python获取日期字符串 编辑:程序博客网 时间:2024/05/17 22:50
注意事项:
     注意权限:
android.permission.INTERNET


publicclass MainActivity extends Activity {
     
      static Handler handler= new Handler(){
           public void handleMessage(android.os.Message msg) {
              Bundle bundle = msg.getData();
               int duration = bundle.getInt("duration" );
               int CurrentPosition =bundle.getInt("CurrentPosition" );
               //刷新进度的进度
               sb.setMax(duration);
               sb.setProgress(CurrentPosition);
          }
     };
     private static SeekBar sb ;
     private MyserviceConn conn;
     private MusicIntface mi;
      Intent intent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout. activity_main);
        //获取seekbar
        sb = (SeekBar) findViewById(R.id.sb);
        sb.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
              
               @Override
               public void onStopTrackingTouch(SeekBar seekBar) {
                    // TODO Auto-generated method stub
                    //根据拖动的进度改变音乐进度
                    int progress =seekBar.getProgress();
                    //改变播放进度
                    mi.seekTo(progress);
                   
              }
              
               @Override
               public void onStartTrackingTouch(SeekBar seekBar) {
                    // TODO Auto-generated method stub
                   
              }
              
               @Override
               public void onProgressChanged(SeekBar seekBar, int progress,
                         boolean fromUser) {
                    // TODO Auto-generated method stub
                   
              }
          });
       
       
       
        intent = new Intent(this , MusicService.class);
        startService( intent);
        conn = new MyserviceConn();
        bindService( intent, conn, BIND_AUTO_CREATE);
       
    }
   
    class MyserviceConn implements ServiceConnection{

           @Override
           public void onServiceConnected(ComponentName name, IBinder service) {
               // TODO Auto-generated method stub
               mi=(MusicIntface) service;
          }

           @Override
           public void onServiceDisconnected(ComponentName name) {
               // TODO Auto-generated method stub
              
          }
     
    }
   

    public void play(View v) {
           mi.play();
          
     }

     
     public void pause(View v) {
           mi.pause();
          
     }

     public void continueplay(View v) {
          
           mi.continueplay();
     }    
   
     public void exit(View v){
          unbindService( conn);
          stopService( intent);
     }
 
}
------------------------------------------------------
服务:
public class MusicService extends Service {
   
     MediaPlayer player;
     Timer timer;
     @Override
     public IBinder onBind(Intent intent) {
           // TODO Auto-generated method stub
           return new MusicController();
     }
     
     
     
     class MusicController extends Binder  implements MusicIntface{

           @Override
           public void play() {
              
              MusicService. this.play();
          }

           @Override
           public void pause() {
              
              MusicService. this.pause();
          }

           @Override
           public void continueplay() {
              
              MusicService. this.continueplay();
          }

           @Override
           public void seekTo(int progress) {
               // TODO Auto-generated method stub
              MusicService. this.seekTo(progress);
          }
          
     }
     
     @Override
     public void onDestroy() {
           // TODO Auto-generated method stub
           super.onDestroy();
           //停止播放
           player.stop();
           //释放占用的资源,此时player对象已经废掉了
           player.release();
           player = null;
           if(timer !=null){
               timer.cancel();
               timer= null;
          }
          
     }
     
     
     
     
      @Override
     public void onCreate() {
           // TODO Auto-generated method stub
           super.onCreate();
           player= new MediaPlayer();
     }
     
     
   
      public void play(){
           //重置
            player.reset();
            try {
                //加载多媒体文件
//            player.setDataSource("XXXX");
                player.setDataSource( "http://192.168.135.2:8080/mt.mp3" );
//            player.prepare();
               player.prepareAsync();
//            player.start();
               player.setOnPreparedListener( new OnPreparedListener() {
                    //准备完毕时,此方法调用
                    @Override
                    public void onPrepared(MediaPlayer mp) {
                         // TODO Auto-generated method stub
                         player.start();
                        addTimer();
                   }
              });
          } catch (Exception e) {
               // TODO Auto-generated catch block
              e.printStackTrace();
          }
          
      }
      //暂停播放
      public void pause(){
           player.pause();
          
      }
      //继续播放
      public void continueplay(){
           player.start();
          
      }
     
     
      public void seekTo(int progress){
           player.seekTo(progress);
      }
     
     
     
      public void addTimer(){
            if(timer ==null){
             timer = new Timer();
           timer.schedule( new TimerTask() {
                   
                    @Override
                    public void run() {
                         // TODO Auto-generated method stub
                         //获取歌曲总时长
                    int duration = player .getDuration();
                      //获取歌曲当前播放进度
                    int CurrentPosition = player.getCurrentPosition();
                   
                   Message msg= MainActivity.handler .obtainMessage();
                    //把进度封装至消息对象中
                   Bundle bundle = new Bundle();
                   bundle.putInt( "duration", duration);
                   bundle.putInt( "CurrentPosition", CurrentPosition);
                      msg.setData(bundle);
                   MainActivity. handler.sendMessage(msg);
                   
                   }
                    //开始计时任务后的5毫秒,第一次执行run方法,以后每500毫秒执行一次
              }, 5, 500);
            }
         }     
}

-----------------------------------------------------------------------------------
接口
public interface MusicIntface {
    void play();
    void pause();
    void continueplay();
    void seekTo( int progress);
   
}
0 0
原创粉丝点击