android网络监听和网络类型判断

app应用进行实时网络监听

多话不说直接上最简单的代码

首先写一个类继承我们的BroadcastReceiver 在里面的onReceive里面写我们的逻辑代码

public class NetworkStateReceiver extends BroadcastReceiver {

@Override
public void onReceive(final Context context, Intent intent) {
    if (intent.getExtras() != null) {
        NetworkInfo ni = (NetworkInfo)    intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO);
        if (ni != null && ni.getState() == NetworkInfo.State.CONNECTED) {
            ToastUtil.show("网络连接已恢复~");  
            //可以再这里进行一些网络突然断开未完成的操作             
        } else 
        {
            ToastUtil.show("网络连接已断开~");
            Timber.i("网络断开 关闭 PublishService");
            PublishService.stop();
        }
    }
}

}

写好了此类之后我们在清单文件中也就是AndroidMainfest文件中添加服务:

    
        <receiver android:name="类的路劲包名.NetworkStateReceiver">
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
                <category android:name="android.intent.category.DEFAULT"/>
            intent-filter>
        receiver>

简单的网络监听就那么完成了。在我们的广播类里面其实也就调用了NetworkInfo这个类而已,上面的操作也只是判断了是否有网络,那如何区别当前连接网络到底是wifi还是移动网络呢:下面看代码:

public static int getConnectedType(Context context) {  
    if (context != null) {  
        ConnectivityManager mConnectivityManager =                       (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);  
        NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();  
        if (mNetworkInfo != null && mNetworkInfo.isAvailable()) {  
            return mNetworkInfo.getType();  
        }  
    }  
    return -1;  
}  

看到最后返回的是NetworkInfo 的getType()方法这个方法能够返回
返回
int 一TYPE_MOBILE,TYPE_WIFI,TYPE_WIMAX,TYPE_ETHERNET, TYPE_BLUETOOTH,连接类型的信息给我们当然我们也可以用mNetworkInfo.getTypeName 返回的是String 类型“wifi”或者”手机网络”的信息;

最后再来判断一下wifi是否可用移动网络是否可用

//因为最后我们获取网络类型之后最后判断是否有网络是用NetworkInfo方法的isAvailable方法这个方法是boolean类型所以我们最后也要返回boolean类型
public boolean isWifiConnected(Context context) {  
    if (context != null) {  
        ConnectivityManager mConnectivityManager = (ConnectivityManager) context  
                .getSystemService(Context.CONNECTIVITY_SERVICE);  
        NetworkInfo mWiFiNetworkInfo = mConnectivityManager  
                .getNetworkInfo(ConnectivityManager.TYPE_WIFI);  
        if (mWiFiNetworkInfo != null) {  
            return mWiFiNetworkInfo.isAvailable();  
        }  
    }  
    return false;  
}  

//判断移动网络是否可用
public boolean isMobileConnected(Context context) {  
    if (context != null) {  
        ConnectivityManager mConnectivityManager = (ConnectivityManager) context  
                .getSystemService(Context.CONNECTIVITY_SERVICE);  
        NetworkInfo mMobileNetworkInfo = mConnectivityManager  
                .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);  
        if (mMobileNetworkInfo != null) {  
            return mMobileNetworkInfo.isAvailable();  
        }  
    }  
    return false;  
}  

最后ConnectivityManager 这个类其实也是管理网络连接相关的类android网络监听和网络类型判断_第1张图片
如果你觉得文章有点用就点个赞吧

你可能感兴趣的:(android应用层)