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