天天看點

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