掌握網路連線狀態


對於大多數的 App 而言,應用網際網路的資源而與 App 產生資料交換的情況, 應該是相當常見的應用。

設定權限

當 app 實現與網際網路互動交換資料的應用,應該在此程序之前,檢視使用者 當時行動裝置的網路狀態,才能對於後續相關的存取資料程序有所掌握。
首先,必須設定使用權限 ACCESS_NETWORK_STATE

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>							
								

取得ConnectivityManager物件實體

先呼叫getSystemService(),並傳遞參數 Context.CONNECTIVITY_SERVICE, 轉型回ConnectivityManager物件實體.

private ConnectivityManager cmgr;
// ...
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    cmgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
}								
								
就可以透過該物件來獲得網路連線狀態了.

自訂一個傳回目前網路狀態的方法


private boolean isConnectNetwork(){
    NetworkInfo info = cmgr.getActiveNetworkInfo();
    boolean isConnected = info != null && info.isConnectedOrConnecting();
    return isConnected;
}
								

自訂一個傳回目前Wifi狀態的方法


private boolean isConnectWifi(){
    NetworkInfo info = cmgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    return info.isConnected();
}
								

隨時掌握當前的網路狀態

此時可以透過Broadcast來處理, 設定其IntentFilter為ConnectivityManager.CONNECTIVITY_ACTION 就可以registerReceiver()來隨時掌握.

private class MyNetworkReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.v("brad", "isConnected = " + isConnectNetwork());
    }
}								
								

在onCreate()中.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    cmgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);

    myNetworkReceiver = new MyNetworkReceiver();
    IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
    registerReceiver(myNetworkReceiver, filter);
}							
    							

在finish()中.

@Override
public void finish() {
    unregisterReceiver(myNetworkReceiver);
    super.finish();
}

    							

原始碼分享: Github

影片教學