Activity向Service通信
第一種方式:通過MyBinder方式調(diào)用Service方法
步驟
- 繼承Binder 定義中間人對(duì)象
BanZhengService
public class BanZhengService extends Service {
//把我定義的中間人對(duì)象返回
@Override
public IBinder onBind(Intent intent) {
return new MyBinder();
}
//辦證的方法
public void banZheng(int money){
if (money>1000) {
Toast.makeText(getApplicationContext(), "我是領(lǐng)導(dǎo) 把證給你辦了", 1).show();
}else {
Toast.makeText(getApplicationContext(), "這點(diǎn)錢 還想辦事....", 1).show();
}
}
//[1]定義中間人對(duì)象(IBinder)
public class MyBinder extends Binder{
public void callBanZheng(int money){
//調(diào)用辦證的方法
banZheng(money);
}}}
- 重寫ServiceConnection,onServiceConnected時(shí)調(diào)用中間人對(duì)象 綁定服務(wù)
MainActivity
public class MainActivity extends Activity {
private MyConn conn;
private MyBinder myBinder;//我定義的中間人對(duì)象
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(this,BanZhengService.class);
//連接服務(wù)
conn = new MyConn();
bindService(intent, conn, BIND_AUTO_CREATE);
}
//點(diǎn)擊按鈕調(diào)用服務(wù)里面辦證的方法
public void click(View v) {
myBinder.callBanZheng(10000000);
}
//監(jiān)視服務(wù)的狀態(tài)
private class MyConn implements ServiceConnection{
//當(dāng)服務(wù)連接成功調(diào)用
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//獲取中間人對(duì)象
myBinder = (MyBinder) service;
}
//失去連接
@Override
public void onServiceDisconnected(ComponentName name) {
}}
@Override
protected void onDestroy() {
//當(dāng)activity 銷毀的時(shí)候 解綁服務(wù)
unbindService(conn);
super.onDestroy();
}}
第二種方式:通過接口Iservice調(diào)用Service方法
使用借口調(diào)用service和直接調(diào)用其實(shí)本質(zhì)都是一樣的熏瞄,只不過多了借口一個(gè)步驟捧搞,
即實(shí)現(xiàn)步驟
- 1.繼承Binder 定義中間人對(duì)象
- 2.定義接口
public interface Iservice {
//把領(lǐng)導(dǎo)想暴露的方法都定義在接口里
public void callBanZheng(int money);
// public void callPlayMaJiang();
- 3.重寫ServiceConnection吩坝,onServiceConnected時(shí)調(diào)用中間人對(duì)象,強(qiáng)轉(zhuǎn)為接口(
myBinder = (Iservice) service;
) 綁定服務(wù)
這里就寫一下不同的地方圆裕,其他都和上面的第一種一樣
MainActivity
//監(jiān)視服務(wù)的狀態(tài)
private class MyConn implements ServiceConnection{
//當(dāng)服務(wù)連接成功調(diào)用
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//獲取中間人對(duì)象
myBinder = (Iservice) service;
}
//失去連接
@Override
public void onServiceDisconnected(ComponentName name) {
}
}
@Override
protected void onDestroy() {
//當(dāng)activity 銷毀的時(shí)候 解綁服務(wù)
unbindService(conn);
super.onDestroy();
}
}