廣播 Broadcast Receiver
阿新 • • 發佈:2018-09-20
ive net androidm nor 種類 ani 應用程序 oid nbsp Android中的每個應用從程序都可以對自己感興趣的廣播進行註冊,這樣該程序就只會接收到自己的所關心的的廣播內容,這些廣播可能是來自於系統,也可能來自於其他應用程序的。
android中的廣播分為兩種類型:標準廣播和有序廣播。
標準廣播(Normal broadcasts):是一種完全異步執行的廣播,在廣播發出之後,所有的廣播的廣播接收器幾乎都會在同一時刻接收到這條廣播消息,因此它們沒有任何先後順序可言。這種廣播的效率會比較高,但同時也意味著它是無法被截斷的。
有序廣播(Ordered broadcasts):則是一種同步執行的廣播,在廣播發出之後,同一時刻只會有一個廣播接收器能夠接收到這條廣播消息,當這個廣播接收器的邏輯執行完畢之後,廣播才會繼續傳遞。所以此時的廣播接收器是有先後順序的,優先級高的廣播接收器就可以先接收到廣播消息,並且前面的廣播接收器還可以截斷正在傳遞的廣播,這樣後面的廣播接收器就無法收到廣播消息了。
接收系統廣播:註冊廣播的方式一般分為兩種,在代碼中註冊和在AndroidManifest.xml中註冊,其中前者也被稱為動態註冊,後者被稱為靜態註冊。
註冊廣播接收器:需要新建一個類,讓它繼承BroadcastReceiver,並重寫父類的onReciver()方法就行了。
實現步驟:定義一個內部類,這個類是繼承自BroadcastReceiver()的,並重寫了onReceiver()方法,在這個類中寫邏輯代碼。在onCreate()方法,首先創建了一個IntentFilter的實例,並給它添加一個值為android.net.conn.CONNECTIVITY_CHANGE的action,每當網絡發生變化時,系統發出的正是一條值為android.net.conn.CONNECTIVIITY_CHANGE的廣播,也就是廣播接收器想要監聽什麽樣的廣播,就在這裏添加相應的action。接下來創建內部類實例,然後調用registerReceiver()方法進行註冊,將實例和IntentFileter的實例都傳了進去,這樣實例就會收到android.net.conn.CONNECTIVIITY_CHANGE的廣播,也就實現了監聽網絡的功能。最後,動態註冊的廣播接收器一定要取消註冊才行,寫一個onDestroy()方法,在裏面調用unregisterReceiver()方法來實現。
廣播 Broadcast Receiver