android开发判断手机网络连接状态

        android开发中经常会用到判断手机网络状态的功能,android系统本身会提供各种服务供我们来监测手机的系统状态,当某一种服务的状态的发生改变的时候也会发送一条默认的广播。那么我们就可以拿到系统所提供的服务,截取系统发送的广播来实时的判断当前手机系统的网络连接状态。

     一、我们首先在AndroidManifest.xml的配置文件中申请我们的网络访问权限。<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>,android.net.conn.CONNECTIVITY_CHANGE为系统网络发生改变时发送的广播标识。我们来手动监听他。

    

 <!-- 注册广播 -->
        <receiver android:name=".service.NetBroadcastReceiver">
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver>
    二、判断网络状态的类。注释的比较详细,不明白的欢迎留言。

    

package com.tianhe.utils;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

/**
 * Created by Administrator on 2016/4/6.
 */
public class NetUtil {
    public static final int NETWORN_NONE = 0;
    public static final int NETWORN_WIFI = 1;
    public static final int NETWORN_MOBILE = 2;
    /**
     * 测试ConnectivityManager
     * ConnectivityManager主要管理和网络连接相关的操作
     * 相关的TelephonyManager则管理和手机、运营商等的相关信息;WifiManager则管理和wifi相关的信息。
     * 想访问网络状态,首先得添加权限<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
     * NetworkInfo类包含了对wifi和mobile两种网络模式连接的详细描述,通过其getState()方法获取的State对象则代表着
     * 连接成功与否等状态。
     *
     */
    public static int getNetworkState(Context context) {
        //获取网络链接的服务
        ConnectivityManager connManager = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);

        // Wifi的状态
        //CONNECTING 链接, CONNECTED 连接, SUSPENDED暂停, DISCONNECTING 断开, DISCONNECTED 断开, UNKNOWN 未知
        NetworkInfo.State state = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
                .getState();
        if (state == NetworkInfo.State.CONNECTED || state == NetworkInfo.State.CONNECTING) {
            return NETWORN_WIFI;
        }

        // 3G的状态
        state = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
                .getState();
        if (state == NetworkInfo.State.CONNECTED || state == NetworkInfo.State.CONNECTING) {
            return NETWORN_MOBILE;
        }
        return NETWORN_NONE;
    }
}
   三、自定义广播类监听。

     

package com.tianhe.service;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

import com.tianhe.app.App;
import com.tianhe.utils.NetUtil;

import java.util.ArrayList;

/**
 * Created by Administrator on 2016/4/6.
 */
public class NetBroadcastReceiver extends BroadcastReceiver {
    public static ArrayList<netEventHandler> mListeners = new ArrayList<netEventHandler>();
    private static String NET_CHANGE_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(NET_CHANGE_ACTION)) {
            App.mNetWorkState = NetUtil.getNetworkState(context);
            if (mListeners.size() > 0)// 通知接口完成加载
                Log.e("运行了吗这个地方?","运行了吗");
                for (netEventHandler handler : mListeners) {
                    handler.onNetChange();
                }
        }
    }

    public static abstract interface netEventHandler {

        public abstract void onNetChange();
    }
}
   四、在我们需要的地方实现我们的接口就可以。我的代码接口中的判断,有网络就定位,没网络就停止定位。

   

 @Override
    public void onNetChange() {
        // TODO Auto-generated method stub
        if (NetUtil.getNetworkState(this) == NetUtil.NETWORN_NONE) {
            Log.e("有没有网络", "没有网络");
            locationClient.stopLocation();//停止定位
            locationClient.onDestroy();
        }else {
            onCreate();

        }
    }

    

你可能感兴趣的:(android判断网络连接,实时判断手机网络状态,android判断网络状态)