音乐播放 启动方式 (2) service发送msg给activity

来源:互联网 发布:家长控制电脑软件 编辑:程序博客网 时间:2024/06/14 04:04

不推荐使用,可以加深知识理解

activity中 根据Handler接收结果,刷新ui
private Handler handler = new Handler() {//接收结果,刷新ui   public void handleMessage(android.os.Message msg) {      switch (msg.what) {      case Constants.MSG_ONPREPARED:         int currentPosition = msg.arg1;         int totalDuration = msg.arg2;         mTv_curduration.setText(MediaUtils.duration2Str(currentPosition));         mTv_totalduration.setText(MediaUtils.duration2Str(totalDuration));         mSk_duration.setMax(totalDuration);         mSk_duration.setProgress(currentPosition);         // 歌词 .....         break;      case Constants.MSG_ONCOMPLETION:         //更加当前的播放model做对应的处理         if (MediaUtils.CURMODEL == Constants.MODEL_NORMAL) {//当前是顺序播放            if (MediaUtils.CURPOSITION < MediaUtils.songList.size() - 1) {               changeColorWhite();               MediaUtils.CURPOSITION++;//MediaUtils.CURPOSITION最大值就是MediaUtils.songList.size() - 1               changeColorGreen();               startMediaService("播放", MediaUtils.songList.get(MediaUtils.CURPOSITION).path);            } else {               startMediaService("停止");            }         } else if (MediaUtils.CURMODEL == Constants.MODEL_RANDOM) {//当前是随机播放            Random random = new Random();            int position = random.nextInt(MediaUtils.songList.size());            changeColorWhite();            MediaUtils.CURPOSITION = position;            changeColorGreen();            startMediaService("播放", MediaUtils.songList.get(MediaUtils.CURPOSITION).path);         } else if (MediaUtils.CURMODEL == Constants.MODEL_REPEAT) {//当前是重复播放            if (MediaUtils.CURPOSITION < MediaUtils.songList.size() - 1) {               changeColorWhite();               MediaUtils.CURPOSITION++;//MediaUtils.CURPOSITION最大值就是MediaUtils.songList.size() - 1               changeColorGreen();            } else {               changeColorWhite();               MediaUtils.CURPOSITION = 0;               changeColorGreen();               startMediaService("播放", MediaUtils.songList.get(MediaUtils.CURPOSITION).path);            }         } else if (MediaUtils.CURMODEL == Constants.MODEL_SINGLE) {//当前是单曲循环            startMediaService("播放", MediaUtils.songList.get(MediaUtils.CURPOSITION).path);         }         break;      default:         break; } };};


seekbar的拖拽中直接:  startMediaService("进度", seekBar.getProgress());点击事件中//播放按钮,点击同一个按钮.有两个操作.需要定义一个变量进行控制   //启动服务.而且让服务播放音乐   if (MediaUtils.CURSTATE == Constants.STATE_STOP) {//默认是停止,点击就变播放      startMediaService("播放", MediaUtils.songList.get(MediaUtils.CURPOSITION).path);   }  startMediaService方法如下: 发送Messenger给servicepublic void startMediaService(String option, int progress) {   Intent service = new Intent(MainActivity.this, MusicService.class);   service.putExtra("messenger", new Messenger(handler));   service.putExtra("option", option);// service.putExtra("path", path);   service.putExtra("progress", progress);   startService(service);}在service中发送message给activity的handle@Overridepublic IBinder onBind(Intent intent) {   // TODO   return null;}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {//每次启动都会来到此方法   String option = intent.getStringExtra("option");   if (mMessenger == null) {      mMessenger = (Messenger) intent.getExtras().get("messenger");   }   if ("播放".equals(option)) {      String path = intent.getStringExtra("path");      play(path);   } else if ("进度".equals(option)) {      int progress = intent.getIntExtra("progress", -1);      seekPlay(progress);   }   return super.onStartCommand(intent, flags, startId);}/**---------------封装音乐播放常见的方法 end---------------**//**---------------相关的回调方法---------------**/@Overridepublic void onCompletion(MediaPlayer mp) {   try {      //service发送消息.告诉activity,当前的歌曲播放完了      Message msg = Message.obtain();      msg.what = Constants.MSG_ONCOMPLETION;      //发送消息      mMessenger.send(msg);   } catch (RemoteException e) {      // TODO Auto-generated catch block      e.printStackTrace();   }}@Overridepublic void onPrepared(MediaPlayer mp) {   if (mTimer == null) {      mTimer = new Timer();   }   mTimer.schedule(new TimerTask() {      @Override      public void run() {         try {            //1.准备好的时候.告诉activity,当前歌曲的总时长            int currentPosition = mPlayer.getCurrentPosition();            int totalDuration = mPlayer.getDuration();            Message msg = Message.obtain();            msg.what = Constants.MSG_ONPREPARED;            msg.arg1 = currentPosition;            msg.arg2 = totalDuration;            //发送消息            mMessenger.send(msg);         } catch (RemoteException e) {            e.printStackTrace();         }      }   }, 0, 1000);}



阅读全文
0 0
原创粉丝点击