參考:http://blog.csdn.net/androidbluetooth/article/details/7199708
博客 http://blog.csdn.net/androidbluetooth/article/details/6860146 詳細的粘貼了不少判斷網絡的方法。
網絡狀態發生變化的時候,系統會發出 android.net.conn.CONNECTIVITY_CHANGE .
下面是實現的 demo :android
package mark.zhang; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.IBinder; import android.util.Log; public class ListenNetStateService extends Service { private ConnectivityManager connectivityManager; private NetworkInfo info; private BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) { Log.d("mark", "網絡狀態已經改變"); connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); info = connectivityManager.getActiveNetworkInfo(); if(info != null && info.isAvailable()) { String name = info.getTypeName(); Log.d("mark", "當前網絡名稱:" + name); } else { Log.d("mark", "沒有可用網絡"); } } } }; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); IntentFilter mFilter = new IntentFilter(); mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); registerReceiver(mReceiver, mFilter); } @Override public void onDestroy() { super.onDestroy(); unregisterReceiver(mReceiver); } @Override public int onStartCommand(Intent intent, int flags, int startId) { return super.onStartCommand(intent, flags, startId); } }
在 manifest 文件中須要加上一條權限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
回頭再看看關於 CONNECTIVITY_ACTION 的介紹,從 api 中,咱們還能夠獲得一個信息: 經過 intent 能夠獲取一些 EXTRA,如 EXTRA_NO_CONNECTIVITY。 boolean b = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, true); 更多信息能夠參考 ConnectivityManager. =========================================== 在Android操做系統中,如何可以正確的判斷咱們所鏈接的網絡是否斷開恩?今天咱們就針對這一應用技巧進行一個詳細的分析。
public class ConnectionChangeReceiver extends BroadcastReceiver { @Override public void onReceive( Context context, Intent intent ) { ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); if ( activeNetInfo != null ) { Toast.makeText( context, "Active Network Type : " + activeNetInfo.getTypeName(), Toast.LENGTH_SHORT ).show(); } if( mobNetInfo != null ) { Toast.makeText( context, "Mobile Network Type : " + mobNetInfo.getTypeName(), Toast.LENGTH_SHORT ).show(); } } }
< !-- Needed to check when the network connection changes --> < uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> < receiver android:name="com.blackboard.androidtest.receiver.ConnectionChangeReceiver" android:label="NetworkConnection"> < intent-filter> < action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> < /intent-filter> < /receiver>