發(fā)送本地的廣播:
??可以限制廣播接受者必須是應(yīng)用里面的接收器
- 獲取LocalBroadcastManager對(duì)象
LocalBroadcastManager mLocalBroadcastManager=null;
MyBroadcast myBroadcast=null;
myBroadcast=new MyBroadcast();
//首先第一步應(yīng)該獲取那個(gè)LocalBroadcatManager這個(gè)對(duì)象
mLocalBroadcastManager=LocalBroadcastManager.getInstance(LocalBroadcastActivity.this);
- 注冊(cè)廣播
IntentFilter mIntentFilter=new IntentFilter();
mIntentFilter.addAction("hello.china");
mLocalBroadcastManager.registerReceiver(myBroadcast,mIntentFilter);
- 發(fā)送廣播
Intent intent=new Intent();
intent.setAction("hello.china");
mLocalBroadcastManager.sendBroadcast(intent);
前臺(tái)的Service
定義一個(gè)Service
/* *
* 前臺(tái)Service
*/
public class MyGroundService extends Service {
@Override
public void onCreate() { //只是會(huì)執(zhí)行一次
//來(lái)完成前臺(tái)的Servie的初始化工作
//咋們來(lái)創(chuàng)建一個(gè)前臺(tái)的Service
Notification.Builder mBuilder=new Notification.Builder(this);
mBuilder.setSmallIcon(R.mipmap.ic_launcher);
mBuilder.setContentTitle("前臺(tái)的Service");
mBuilder.setContentText("我不會(huì)被系統(tǒng)給殺死");
Notification mNotification=mBuilder.build();
startForeground(12,mNotification);
// stopForeground();
}
@Override
public void onDestroy() {
super.onDestroy();
Log.e("-----------------","我被殺死了....你保重...");
}
public MyGroundService() {
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
打開Service
Intent intent=new Intent(ServiceGroundActivity.this, MyGroundService.class);
startService(intent);
Messager實(shí)現(xiàn)進(jìn)程間的通信:
messager:互相通信的一種機(jī)制
Handle:消息的傳輸者
Message:需要傳遞的消息
Messager進(jìn)行通信的時(shí)候?qū)嶋H上也要依賴于Service
Service端
- 建立一個(gè)接收信息的平臺(tái)
- 在onBind里面返回Messenger對(duì)象的getBinder()方法
public class MyServerService extends Service {
@Override
public IBinder onBind(Intent intent) {
return mMessenger.getBinder();
}
/**
* 咋們?cè)谶@個(gè)里面只有一個(gè)工作就是搭建一個(gè)消息的接收平臺(tái)
*/
Messenger mMessenger=new Messenger(new Handler(){
@Override
public void handleMessage(Message msg) {
//msg:就是那個(gè)客戶端發(fā)送過(guò)來(lái)的消息
int num=msg.arg1;
Message msg1=Message.obtain(msg);
msg1.arg1=num;
//將這個(gè)消息給發(fā)送出去
try {
Log.e("-------------",msg+"");
Log.e("-------------",msg1+"");
msg.replyTo.send(msg1);
} catch (RemoteException e) {
e.printStackTrace();
}
super.handleMessage(msg);
}
});
}
客戶端
- 綁定Service
- 建立消息的接收平臺(tái)
- 向服務(wù)端發(fā)送消息
public class MainActivity extends AppCompatActivity {
Messenger mMessenger;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent=new Intent("hello");
intent.setPackage("com.qf.mobilephone.myapplicationserver"); //這句話是為了讓那個(gè)編譯器不報(bào)那個(gè)顯示調(diào)用這個(gè)問(wèn)題
bindService(intent,new MyServiceConn(),BIND_AUTO_CREATE);
}
/**
* 消息的處理
*/
public void myClick(View view){
Message mMessage=Message.obtain();
mMessage.arg1=10000;
mMessage.replyTo=mmMessenger;//這個(gè)是告訴服務(wù)器客戶端的接收者是誰(shuí)
try {
mMessenger.send(mMessage);
} catch (RemoteException e) {
e.printStackTrace();
}
}
/**
* 這個(gè)呢就是那個(gè)接收的平臺(tái)
*/
Messenger mmMessenger=new Messenger(new Handler(){
@Override
public void handleMessage(Message msg) {
Log.e("---------------kkk",msg.arg1+"");
super.handleMessage(msg);
}
});
/**
* 這個(gè)就是那個(gè)連接服務(wù)端的方法
*/
private class MyServiceConn implements ServiceConnection{
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.e("---------------","我連接上了.....");
mMessenger=new Messenger(service);
}
@Override
public void onServiceDisconnected(ComponentName name) {
mMessenger=null;
}
}
}