需求:我既想让服务在后台长期运行  又想调用服务里面的方法  
  混合方式开启服务 
  (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) {

        }

    }

}

 

版权声明:本文为xufengyuan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/xufengyuan/p/5987953.html