zoukankan      html  css  js  c++  java
  • 百度音乐盒框架

    需求:我既想让服务在后台长期运行  又想调用服务里面的方法  
      混合方式开启服务 
      (1)先调用startService()方法 保证服务在后台长期运行
      (2)调用bindservice()目的获取我们定义的中间人对象 调用服务里面的方法
      (3)unbindservice() 看这时候服务会不会销毁
      (4)最后调用stopservice() 停止服务 
    //音乐播放服务
    public class MusicService extends Service {
    
        //[2]把我们定义的中间人对象 返回
        @Override
        public IBinder onBind(Intent intent) {
            return new MyBinder();
        }
        //服务第一次开启的是调用
        @Override
        public void onCreate() {
            super.onCreate();
        }
        
        
        //当服务销毁的时候调用
        @Override
        public void onDestroy() {
            super.onDestroy();
        }
    
        //专门用来播放音乐的 
        public void playMusic(){
            System.out.println("音乐播放了");
            //TODO 等讲完多媒体 把该功能完善
            
        }
        
        //音乐暂停了
        public void pauseMusic(){
            System.out.println("音乐暂停了");
        }
        
        //音乐继续播放的方法
        public void  rePlayMusic(){
            System.out.println("音乐继续播放了");
        }
        
        //[1]定义一个中间人对象(IBinder) 
        private class MyBinder extends Binder implements Iservice{
    
            //调用播放音乐的方法
            @Override
            public void callPlayMusic() {
                
                playMusic();
            }
    
            //调用暂停音乐的方法
            @Override
            public void callPauseMusic() {
                
                pauseMusic();
            }
    
            //调用继续播放的方法 
            @Override
            public void callrePlayMusic() {
                
                rePlayMusic();
            }
            
        }
        
        
        
    }
    public interface Iservice {
        //把我们想暴露的方法放到接口中
        public void callPlayMusic();
        public void callPauseMusic();
        public void callrePlayMusic();
        
    }
    public class MainActivity extends Activity {
    
        private Iservice iservice; // 这个就是我们定义的中间人对象
        private MyConn conn;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //[0]先调用startservice 方法开启服务 保证服务在后台长期运行
            Intent intent = new Intent(this, MusicService.class);
            startService(intent);
            
            // [1]调用bindservice 目的是为了获取我们定义的中间人对象
            conn = new MyConn();
            // 连接MusicService 服务 获取我们定义的中间人对象
            bindService(intent, conn, BIND_AUTO_CREATE);
    
        }
    
        // 点击按钮 进行 音乐播放
        public void click1(View v) {
    
            // 调用播放音乐的方法
            iservice.callPlayMusic();
        }
    
        // 暂停音乐
        public void click2(View v) {
    
            // 调用暂停音乐的方法
            iservice.callPauseMusic();
        }
    
        // 继续播放
        public void click3(View v) {
    
            // 调用继续播放
            iservice.callrePlayMusic();
        }
    
        // 当Activity销毁的时候调用
        @Override
        protected void onDestroy() {
            // 在Activity销毁的时候 取消绑定服务
            unbindService(conn);
    
            super.onDestroy();
        }
    
        private class MyConn implements ServiceConnection {
    
            // 当连接成功时候调用
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                // 获取我们定义的中间人对象
                iservice = (Iservice) service;
    
            }
    
            @Override
            public void onServiceDisconnected(ComponentName name) {
    
            }
    
        }
    
    }
  • 相关阅读:
    FFmpeg入门,简单播放器
    Linux系统编译Win32版本adb
    检测目标程序ELF bit是32还是64
    Swift编程资料全集
    Swift编程资料总结
    cocos2d-html5学习之三-为sprite添加触摸事件
    Cocos2d-html5学习笔记二
    cocos2d-x学习笔记一
    NSViewAnimation进行视图和窗口动画
    Cocoa中NSAnimation动画简介
  • 原文地址:https://www.cnblogs.com/xufengyuan/p/5987953.html
Copyright © 2011-2022 走看看