版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010023795/article/details/53424736
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 这个类其实也是管理网络连接相关的类
如果你觉得文章有点用就点个赞吧