百度音乐盒框架
需求:我既想让服务在后台长期运行 又想调用服务里面的方法
混合方式开启服务
(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 版权协议,转载请附上原文出处链接和本声明。