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.程序第一次启动时会收到一个Broadcast

    2.从 GPRS 到 WIFI,程序至少会收到3个Broadcast 

        第一个是连接到WIFI 

        第二个是断开GPRS 

        第三个是连接到WIFI 

    3.从WIFI到GPRS,程序至少会收到2个Broadcast 

        第一个是断开Wifi 

        第二个是连接到GPRS 


三.使用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,监听网络变化:

registerReceiver(mReceiver, mIntenFilter);

取消注册,不再监听网络变化: 

unregisterReceiver(mReceiver);

也可在AndroidManifest.xml中注册BroadcastReceiver

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


你可能感兴趣的:(工具类,判断网络连接)