2011年12月29日 星期四

Android - FLAG_RECEIVER_REGISTERED_ONLY介紹

一般而言,sendBroadcast()一個Intent時,有兩種receiver可以收到。

(1) component型式的BroadcastReceiver, 要收的Intent會定義在AndroidManifest.xml
(2) 在java code中動態定義的BroadcastReceiver,用IntentFilter去定義要收那些Intent的Action,再利用registerReceiver()指定IntentFilter給Receiver

如果你不希望sendBroadcast()時,所有的Receiver都被Launch而動作的話,可以利用
intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
這樣就只有第2種Receiver會有反應,AndroidManifest.xml所定義的是不會有反應的。

例如在有關耳機控制的程式中,HeadsetObserver.java就是利用

Intent intent = new Intent(Intent.ACTION_HEADSET_PLUG);
intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
ActivityManagerNative.broadcastStickyIntent(intent, null);

來確保只有第2種Receiver會有反應。有關broadcastStickyIntent()可參考另一篇文章介紹

沒有留言:

張貼留言