爲了簡化註冊、發送廣播。既然是本地,這個廣播的範圍相對就小了,但這樣比全局的廣播有效率得多。同時,這樣也確保了你所發送的廣播不被其它APP的接受者接收。app
一樣的,別的APP的廣播(使用LocalManager發出的)也不能發送到你這兒的接收者。ide
那麼如何使用呢?this
答:首先你必須確保你引入了Android Support Library。 而後就能夠:事件
LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);get
那麼如何註冊接收者呢?
答:與註冊全局的相似:同步
lbm.registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Handle the received local broadcast
}
}, new IntentFilter(LOCAL_ACTION)); it
發送呢? 答:lbm.sendBroadcast(new Intent(Local_ACTION));io
同時呢,你也能夠用此來廣播同步的Intent使用sendBroadcastSync.ast
注意:上面所聲明的接受者也是能夠處理全局的廣播Intents。這是什麼意思? 答:主要在於你的發送方是否是LocalManager發送的,前面所說的優點都是基於這個管理者,跟接收者沒什麼關係,是發送方限制了渠道罷了。class
延遲發送的intent。
爲何要是延遲發送?
答:pending intent主要是用來回應將來的事件,好比Notification或者Widget被點擊後觸發。
可是代碼又是寫在你本身的app裏,就好像是你本身app完成的跳轉。
PendingIntent 類提供靜態方法去構建Pending Intent,用來啓動一個activity,service或者廣播一個intent.
下面給出一些代碼:
int requestCode = 0;
int flags = 0;
// Start an Activity
Intent startActivityIntent = new Intent(this, MyOtherActivity.class);
PendingIntent.getActivity(this, requestCode,
startActivityIntent, flags);
// Start a Service
Intent startServiceIntent = new Intent(this, MyService.class);
PendingIntent.getService(this, requestCode,
startServiceIntent , flags);
// Broadcast an Intent
Intent broadcastIntent = new Intent(NEW_LIFEFORM_DETECTED);
PendingIntent.getBroadcast(this, requestCode,
broadcastIntent, flags);
PendingIntent 類中包含靜態常量,能用來指定flag去更新或者取消任何匹配你指定的Action的已存在的Pending Intent,與去指定是否Intent只觸發1次同樣。
更多的細節,暫時不作討論,之後看到Notification或者Widget的時候再說。