新建一個類繼承BroadcastReceiver,用於接收廣播,並作相應的處理
class NetChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) { System.out.println("網絡狀態更改"); }else if (action.equals(EthernetManager.ETHERNET_STATE_CHANGED_ACTION)) { System.out.println("網線狀態更改"); } } }
在AndroidMenifest.xml的<application></application>標籤中註冊廣播接收過濾條件
<!-- 網絡更改廣播 --> <receiver android:name="com.coship.entropic.factorytest.receiver.NetChangeReceiver"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver> <!-- 網線狀態改變廣播 --> <receiver android:name="com.coship.entropic.factorytest.receiver.NetChangeReceiver"> <intent-filter> <action android:name="android.net.ethernet.ETHERNET_STATE_CHANGED" /> </intent-filter> </receiver>
接收廣播只需要以上兩個步驟,當然還需要配置權限
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
完成之後,上面的兩個System.out.println();輸出內容在控制檯是看不到的,因爲網絡狀態更改會導致android設備與電腦的連接斷開,故而控制檯不會有輸出。如果要測試是否能夠接收到廣播,可以採用其他方式檢測,比如
handler.sendEmptyMessage(0);
通知界面彈出信息提示,或者直接打印到屏幕上顯示
上面的內容網上很多資料,僅僅一個需要指出的是
<action android:name="android.net.ethernet.ETHERNET_STATE_CHANGED" />
由於這個用的比較少,所以網上的資料也很少。下面羅列一下有線連接相關的ACTION
ConnectivityManager.CONNECTIVITY_ACTION //網絡狀態更改 //對應action.equals(ConnectivityManager.CONNECTIVITY_ACTION) EthernetManager.ETHERNET_START_INTERFACE_ACTION EthernetManager.ETHERNET_STATE_CHANGED_ACTION EthernetManager.ETHERNET_STOP_INTERFACE_ACTION EthernetManager.NETWORK_CONNECTED_ACTION EthernetManager.NETWORK_DISCONNECTED_ACTION EthernetManager.NETWORK_STATE_CHANGED_ACTION //網線狀態更改 //對應action.equals(EthernetManager.ETHERNET_STATE_CHANGED_ACTION) //可以相應網線的熱插拔事件