activity以繫結服務的方式開啟服務並呼叫服務裡面的方法
原始碼:
1.Activity中的程式碼
public class MainActivity extends Activity {
//步驟4:在activity中就得到了IBinder物件
SongService.MyBinder binder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void bind(View v) {
Intent intent = new Intent(this, SongService.class);
//步驟1: bindService以繫結服務的方式開啟服務
// conn:用來建立與服務的連線,不能為空
// BIND_AUTO_CREATE 表示如果沒有建立則自動建立
// bindService(service, conn, flags)
bindService(intent, new MyServiceConnection(), BIND_AUTO_CREATE);
}
public void call(View v){
//步驟5:呼叫IBinder物件的方法
binder.callChange("月亮之上");
}
private class MyServiceConnection implements ServiceConnection {
// 當服務被繫結成功時使用
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
//步驟3:獲得服務傳過來的IBinder物件
binder = (MyBinder) service;
}
// 當服務解除繫結的時候呼叫,只有在程式被異常終止.
@Override
public void onServiceDisconnected(ComponentName name) {
}
}
}
2.Service的原始碼
public class SongService extends Service{
//當服務繫結成功時呼叫此方法
@Override
public IBinder onBind(Intent intent) {
System.out.println("服務被成功的綁定了!");
//步驟2:服務繫結成功後返回一個IBinder物件,它將傳遞給conn的回撥方法onServiceConnected
return new MyBinder();
}
public class MyBinder extends Binder{
public void callChange(String name){
change(name);
}
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
System.out.println("服務被建立了");
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
System.out.println("服務被銷燬了");
}
public void change(String name){
Toast.makeText(this, "把歌曲換成了"+name, 0).show();
}
}
3.記得在配置檔案中加上
<service android:name="com.example.testservice.SongService" >