音乐播放 启动方式 (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
- 音乐播放 启动方式 (2) service发送msg给activity
- android 音乐播放 启动方式 (1)利用内部类绑定service传送数据,只适用于单activity
- android 音乐播放 启动方式 (3)服务通过发送广播来控制activity显示进度等
- 4.1.2 Service 的启动方式, Service的应用-播放音乐和下载文件
- Service后台播放音乐(文件方式,raw资源方式)
- Android启动服务播放音乐(两种启动方式)
- 实现Activity中控制service里音乐播放、暂停的两种方式
- Android实现后台播放音乐(Service方式)
- android Service(一) activity启动Service方式一:startService()
- android Service(二) activity启动Service方式二:bindService()
- Android中Service发送广播给activity
- Service 如何给 Activity 发送 Message?
- Android-Service (基本知识,生命周期,实例-startService 启动的服务音乐播放器后台服务播放)
- Android-Service (基本知识,生命周期,实例-startService 启动的服务音乐播放器后台服务播放)
- Android—在Activity中绑定service播放音乐
- 音乐播放器中activity 与service 交互
- 音乐播放器Service和Activity交互实践
- adb 启动Activity,service和发送broadcast
- C++笔记(二)
- SpringMvc的消息验证
- java微信小程序参数二维码生成带背景图加字体
- sql 易错点 和简单练习
- HTTP头部参数详解
- 音乐播放 启动方式 (2) service发送msg给activity
- 回调函数/钩子函数
- 误差向量幅度(EVM)
- js事件处理机制的理解
- SVN命令使用详解
- puppet 语法
- zoj 3195 Design the city
- zoj1016Parencodings 模拟
- c++ upper_bound和lower_bound使用