星期二, 3月 28, 2017

[ Android ] BroadcastReceiver用法 (四) FLAG_RECEIVER_REGISTERED_ONLY


如果送出sendBroadcast()後,
那之前提到的兩種註冊receiver都可以接收到,

1. 定義在AndroidManifest.xml裡。
2. 在程式裡用IntentFilter去定義哪些intent actioin要收到,再用registerReceiver()註冊。

如果你在送出去sendBroadcast()前,
在intent加個flag,

intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);

這樣第一種註冊方式就無法監聽到這個事件,
只有第二種方式才拿得到事件。

目前測試"耳機"這個event是只能用第二種方式才拿得到。

android.intent.action.HEADSET_PLUG

為什麼要這樣做?

其實是為了安全目的,
因為用第一種方式,你的pkg只要安裝進去,
他就會自動啟動監聽,
就算這個pkg有執行起來,然後被關掉,
那這個監聽也不會被關掉。

Ref 1
Ref 2

沒有留言: