一般而言,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()可參考另一篇文章介紹。
(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()可參考另一篇文章介紹。
沒有留言:
張貼留言