• Service Broadcast简单音乐播放功能


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

    image

    @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);
                    }
                }
            }
            
        }

    imageimage

  • 相关阅读:
    Web开发学习之路--Eclipse+Tomcat+mysql之初体验
    Android必知必会-Stetho调试工具
    Android开发学习之路--NDK、JNI之初体验
    OpenMP基础----以图像处理中的问题为例
    leetcode 2 Add Two Numbers
    Java在linux下调用C/C++生成的so文件
    OpenCV特征点检测匹配图像-----添加包围盒
    [POJ 1442] Black Box
    [POJ 2019] Cornfields
    [HDU 1806] Frequent values
  • 原文地址:https://www.cnblogs.com/yechanglv/p/6922945.html
Copyright © 2020-2023  润新知