在Activity上有两个ImageButton,分别控制播放/暂停、停止。

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        start = (ImageButton) findViewById(R.id.play);
        stop = (ImageButton) findViewById(R.id.stop);
        start.setOnClickListener(this);
        stop.setOnClickListener(this);
        activityReceiver = new ActivityReceiver();//广播接收器,主要负责播放/暂停按钮图标的变换
        IntentFilter filter = new IntentFilter();
        filter.addAction("com.sunny.update");
       registerReceiver(activityReceiver, filter);
        Intent intent = new Intent(this, MyService.class);//启动服务,音乐的播放用Service控制,不会因Activity退出而停止
        startService(intent);
    }

其中ActivityReceiver 如下,主要负责播放/暂停按钮图标的变换,过滤接收Action为com.sunny.update的Intent:

public class ActivityReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            int update=intent.getIntExtra("update", -1);
            switch(update){
            case 1:
                status=1;
                break;
            case 2:
                start.setImageResource(R.drawable.pause);
                status=2;
                break;
            case 3:
                start.setImageResource(R.drawable.play);
                status=3;
                break;
            }
        }
    }

为两个按钮注册时间,发送Action为com.sunny.control的广播控制音乐播放,由Service中的广播接收器接收:

public void onClick(View v) {
        // TODO Auto-generated method stub
        Intent intent = new Intent("com.sunny.control");
        switch (v.getId()) {
        case R.id.play:
           intent.putExtra("ACTION", 1);
            sendBroadcast(intent);
            break;
        case R.id.stop:
            intent.putExtra("ACTION", 2);
            sendBroadcast(intent);
            break;
        }
    }

在MyService中,启动时的onCreate()方法:

public void onCreate() {
        // TODO Auto-generated method stub
        status=1;//当前状态,1 没有声音 2正在播放 3 暂停
        serviceReceiver=new ServiceReceiver();//广播接收器,控制音乐播放
        IntentFilter filter=new IntentFilter();
        filter.addAction("com.sunny.control");
        registerReceiver(serviceReceiver, filter);
        super.onCreate();
    }

其中广播接收器ServiceReceiver 如下:

class ServiceReceiver extends BroadcastReceiver{

@Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
           int action=intent.getIntExtra("ACTION", -1);//过滤Intent Action为com.sunny.control的广播,根据ACTION参数控制
            switch(action){
            case 1:
                if(status==1){//在正在播放状态下
                    mp=MediaPlayer.create(context, R.raw.intro);
                    status=2;
                    Intent sendIntent=new Intent("com.sunny.update");
                    sendIntent.putExtra("update", 2);
                    sendBroadcast(sendIntent);
                    mp.start();
                }
                else if(status==2){//在暂停状态下
                    mp.pause();
                    status=3;
                    Intent sendIntent=new Intent("com.sunny.update");
                    sendIntent.putExtra("update",3);
                    sendBroadcast(sendIntent);
                }else if(status==3){//在暂停后重新播放状态下
                    mp.start();
                    status=2;
                    Intent sendIntent=new Intent("com.sunny.update");
                    sendIntent.putExtra("update", 2);
                    sendBroadcast(sendIntent);
                
                }
                break;
            case 2:
                if(status==2||status==3){
                    mp.stop();
                    status=1;
                    Intent sendIntent=new Intent("com.sunny.update");
                    sendIntent.putExtra("update",1);
                    sendBroadcast(sendIntent);
                }
            }
        }
        
    }

最新文章

  1. 如何判定php环境是线程安全(TS)还是不安全(NTS)
  2. ABAP 数据字典中的参考表和参考字段的作用
  3. jsp的9大对象
  4. jquery ajax 序列化表单传参提交实体对象到后台action
  5. 面试题——设计一个程序:运行报错Stack Overflow Error
  6. android自动化测试中hierarchyviewer和uiautomatorviewer获取控件信息的方式比对
  7. chapter3:Collaborative Filtering ---------A Programmer's Guide to Data Mining
  8. linux开机自动启动脚本
  9. Aliyun EMR 集群重启
  10. 用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。
  11. Netty初体验
  12. 微信网页浏览器打开链接后跳转到其他浏览器下载APK文件包
  13. 记Weblogic部署BUG(websocket)
  14. JS 原型与原型链
  15. 使用SpringSocial开发QQ登录
  16. vue 使用mint-ui实现上拉加载和下拉刷新
  17. OGG-01028 Incompatible Record解决办法
  18. vue2+animate.css
  19. [工具]StarUML
  20. 沐雪多用户微信公众平台开发源码,商城小程序源码(2018年最新的asp.net C# 微信源码,小程序源码)

热门文章

  1. java中 awt Graphics2D
  2. Ionic之$scope 依赖注入报错
  3. bufferedinputStream操作
  4. Android学习总结(十)———— Intent的使用
  5. Git强制pull
  6. MINST手写数字识别(二)—— 卷积神经网络(CNN)
  7. python 基础之运算符
  8. window10系统安装Ubuntu18.04系统
  9. DS博客作业08--课程总结
  10. Catalan 数