標籤:android style blog io color os 使用 sp div
BroadcastReceiver所對應的廣播分兩類:普通廣播和有序廣播。普通廣播通過Context.sendBroadcast()方法來發送。它是完全非同步。所有的receivers接收器的執行順序不確定。 因此,所有的receivers接收器接收broadcast的順序不確定。這種方式效率更高。但是BroadcastReceiver無法使用setResult系列,getResult系列及abort系列API有序廣播是通過Context.sendOrderedBroadcast來發送。所有的receiver依次執行。BroadcastReceiver可以使用setResult系列函數來結果傳給下一個BroadcastReceiver,通過getResult系列函數來取得上個BroadcastReceiver返回的結果,並可以abort系列函數來讓系統丟棄該廣播讓,使用該廣播不再傳送到別的BroadcastReceiver。可以通過在intent-filter中設定android:priority屬性來設定receiver的優先順序。優先順序相同的receiver其執行順序不確定。如果BroadcastReceiver是代碼中註冊的話,且其intent-filter擁有相同android:priority屬性的話,先註冊的將先收到廣播。
有序廣播,即從優先順序別最高的廣播接收器開始接收,接收完了如果沒有丟棄,就下傳給下一個次高優先順序別的廣播接收器進行處理,依次類推,直到最後。
這裡接收簡訊的廣播是有序廣播,因此可以設定你自己的廣播接收器的層級高於系統原來的層級,就可以攔截簡訊,並且不存收件匣,也不會有來信提示音。
實現方法是:
<receiver android:name=".SmsReceiver" >
<intent-filter android:priority="100">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
裡面的android:priority="100"就是設定廣播接收器的層級,這個值從1000~-1000,數值越大,優先順序別就越高。
android有序廣播和無序廣播的區別