Android 判斷網絡鏈接

一.Android判斷網絡鏈接:

/**
 * 判斷網絡是否鏈接 未鏈接彈出設置對話框 想訪問網絡狀態,
 * 首先得添加權限 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
 * NetworkInfo類包含了對wifi和mobile兩種網絡模式鏈接的詳細描述,
 * 經過其getState()方法獲取的State對象則表明着鏈接成功與否等狀態
 */

public void CheckNetworkState() {
    boolean flag = false;
    // 主要管理和網絡鏈接相關的操做
    ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

    // 獲取表明聯網狀態的NetworkInfo對象
    NetworkInfo netInfo = manager.getActiveNetworkInfo();
    boolean isAvailable = netInfo.isAvailable();
    if (isAvailable) {
        // 網絡鏈接可用
    } else {
        // 網絡鏈接不可用
    }

    // 獲取GPRS鏈接狀態
    State moblie = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
    if (moblie == State.CONNECTED || moblie == State.CONNECTING) {
        // GPRS網絡已鏈接
        return;
    } else {
        // 跳轉至網絡鏈接設置界面
        startActivity(new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS));
    }

    // 獲取Wifi鏈接狀態
    State wifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();

    if (wifi == State.CONNECTED || wifi == State.CONNECTING) {
        // Wifi網絡鏈接
        return;
    } else {
        // 跳轉至wifi網絡鏈接設置界面
        startActivity(new Intent(android.provider.Settings.ACTION_WIFI_SETTINGS));
    }
    //彈出提示對話框
    showAlterDialog();
}

private void showAlterDialog() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("");
    builder.setPositiveButton("肯定", new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface arg0, int arg1) {
            // 跳轉至網絡設置頁面
            startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
        }
    });

    builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface arg0, int arg1) {

        }
    });
}

二.網絡變化是Broadcast:

    1.程序第一次啓動時會收到一個Broadcastjava

    2.從 GPRS 到 WIFI,程序至少會收到3個Broadcast android

        第一個是鏈接到WIFI git

        第二個是斷開GPRS 網絡

        第三個是鏈接到WIFI ide

    3.從WIFI到GPRS,程序至少會收到2個Broadcast ui

        第一個是斷開Wifi this

        第二個是鏈接到GPRS spa

 

三.使用ConnectivityManager監聽網絡狀態變化,BroadcastReceiver方式:

private BroadcastReceiver mReceiver;
private ConnectivityManager mConnectivityManager;
private IntentFilter mIntenFilter;
mIntenFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
mConnectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
mReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false)) {
            Log.i(TAG, "netWork has lost");
        }

        NetworkInfo tmpInfo = (NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO);
        Log.i(TAG, tmpInfo.toString() + " {isConnected = " + tmpInfo.isConnected() + "}");
    }
};

註冊Receiver,監聽網絡變化:.net

registerReceiver(mReceiver, mIntenFilter);

取消註冊,再也不監聽網絡變化: code

unregisterReceiver(mReceiver);

也可在AndroidManifest.xml中註冊BroadcastReceiver

<receiver android:name=".ConnectionReceiver" >  
    <intent-filter> 
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />     
    </intent-filter>  
</receiver>

 

4、代碼片斷:

NetWorkUtils.java

相關文章
相關標籤/搜索