今天具體說下Android檢測網絡狀態的廣播,咱們在作一些手機應用的時候若是網絡發生改變可能會給用戶形成一些損失,在中國2G,3G網絡都沒有普及的狀況下,基本都是包流量的,因此在作一些視頻應用軟件的時候,若是用戶在使用WIFI的時候若是無線網絡中斷,手機網絡會自動換手機網絡,從而給用戶形成沒必要要的損失。 html
Android手機在對於一些系統廣播,如短信的接收,電話的接收,電池電量太低,網絡狀態改變都會發一個廣播,既然系統會發送一條廣播,那麼就須要一個接收器來處理這個廣播。首先定義一個類繼承NetworkChangeReceiver,重寫onReceive()就好了。而後在OnReceive()這個方法進行相應廣播的處理。 java
網絡狀態切換的廣播類: android
- package com.test;
-
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.net.ConnectivityManager;
- import android.net.NetworkInfo.State;
-
- public class extends BroadcastReceiver {
-
- @Override
- public void onReceive(Context context, Intent intent) {
- State wifiState = null;
- State mobileState = null;
- ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
- wifiState = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
- mobileState = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
- if (wifiState != null && mobileState != null
- && State.CONNECTED != wifiState
- && State.CONNECTED == mobileState) {
- // 手機網絡鏈接成功
- } else if (wifiState != null && mobileState != null
- && State.CONNECTED != wifiState
- && State.CONNECTED != mobileState) {
- // 手機沒有任何的網絡
- } else if (wifiState != null && State.CONNECTED == wifiState) {
- // 無線網絡鏈接成功
- }
-
- }
-
- }
在上面這個接收類中OnReceive()方法,你能夠在上面三個網絡狀態(只有手機網絡,只有無線網絡,沒有任何網絡)中進行相應的處理,而後在應用中註冊廣播,註冊廣播有2種方式,一種在androidmanifest.xml中註冊,一種在java代碼中註冊。 網絡
第一種: ide
- <receiver
- android:name="com.test.NetworkBroadcast"
- android:label="NetworkConnection" >
- <intent-filter>
- <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
- </intent-filter>
- </receiver>
第二種: this
能夠在Activity的onCreate()方法中註冊廣播,在Activity的onDestory()方法中卸載廣播。 spa
- private BroadcastReceiver networkBroadcast=new BroadcastReceiver();
- private void registerNetworkReceiver() {
- IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
- this.registerReceiver(networkBroadcast, filter);
- }
-
- private void unRegisterNetworkReceiver() {
- this.unregisterReceiver(networkBroadcast);
- }
注意:在接收類中的onReceive()方法中不要處理太多複雜邏輯問題,尤爲耗時的操做。 .net