天天看点

Android 百度音乐盒

public class MainActivity extends AppCompatActivity {

    private Iservice iservice; // 这个是我们定义的中间人对象
    private MyConn conn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 混合方式开启服务
        //1 先调用startService 目的是可以保证服务在后台长期运行
        Intent intent = new Intent(this, MusicService.class);
        startService(intent);
        //2 调用bingService 目的是为了获取我们定义的中间人对象 就可以间接的调用服务里面的方法了
        conn = new MyConn();
        bindService(intent, conn, BIND_AUTO_CREATE);
    }

    @Override
    protected void onDestroy() {
        //当Activity销毁的时候解绑服务,目的是为了不报红色日志
        unbindService(conn);
        super.onDestroy();
    }
    //点击按钮 播放音乐
    public void click1(View v) {
        //调用播放音乐的方法
        iservice.callPlayMusic();
    }
    //点击按钮 暂停音乐
    public void click2(View v) {
        //调用暂停音乐的方法
        iservice.callPauseMusic();
    }
    //点击按钮 继续播放音乐
    public void click3(View v) {
        //调用继续播放音乐的方法
        iservice.callRePlayMusic();
    }

    //监听服务的状态
    private class MyConn implements ServiceConnection {
        //当服务连接成功时调用
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            // 获取我们的中间人对象
            iservice = (Iservice) service;
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    }
}      
public class MusicService extends Service {
    private static final String TAG = "jojo";

    public MusicService() {
    }
    // 把我们定义的中间人对象返回
    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
//        throw new UnsupportedOperationException("Not yet implemented");
        return new MyBinder();
    }
    // 播放音乐的方法
    public void playMusic() {
        // TODO: 2017/4/27 等撸完多媒体 再完善这个案例
        Log.d(TAG, "playMusic: ");
    }
    // 暂停音乐的方法
    public void pauseMusic() {
        Log.d(TAG, "pauseMusic: ");
    }
    //继续播放音乐的方法
    public void rePlayMusic() {
        Log.d(TAG, "rePlayMusic: ");
    }

    //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();
}