实时监测网络状态
原理:当手机网络状态发生变化时,系统会发出广播。我们可以监听这个广播,当网络状态发生变化时,判断网络状态,再利用接口将网络状态回调出去。
一、添加权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
二、判断网络状态的工具类
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
public class NetUtil {
/**
* 没有连接网络
*/
private static final int NETWORK_NONE = -1;
/**
* 移动网络
*/
private static final int NETWORK_MOBILE = 0;
/**
* 无线网络
*/
private static final int NETWORK_WIFI = 1;
public static int getNetWorkState(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager
.getActiveNetworkInfo();
if(networkInfo != null && networkInfo.isConnected()){
if(networkInfo.getType() == ConnectivityManager.TYPE_WIFI){
return NETWORK_WIFI;
}else if(networkInfo.getType() == ConnectivityManager.TYPE_MOBILE){
return NETWORK_MOBILE;
}
}
return NETWORK_NONE;
}
}
三、定义回调接口
public interface INextStatusChange {
/**
* 网络状态发生改变
* @param netStatus
*/
void onNetStatusChange(int netStatus);
}
四、实现接口
public class MyApplication extends Application implements INextStatusChange{
public static Context mContext;
public static INextStatusChange iNextStatusChange;
@Override
public void onCreate() {
super.onCreate();
mContext = getApplicationContext();
iNextStatusChange = this;
}
@Override
public void onNetStatusChange(int netStatus) {
switch (netStatus){
case -1:
Toast.makeText(mContext,"无网络连接",Toast.LENGTH_SHORT).show();
break;
case 0:
Toast.makeText(mContext,"当前网络状态:移动网络",Toast.LENGTH_SHORT).show();
break;
case 1:
Toast.makeText(mContext,"当前网络状态:无线网络",Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
}
五、定义BroadcastReceiver
public class NetBroadcastReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// 如果相等的话就说明网络状态发生了变化
if(intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)){
MyApplication.iNextStatusChange.onNetStatusChange(NetUtil.getNetWorkState(context));
}
}
}
六、注册广播
<receiver android:name=".net.NetBroadcastReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
备注:这里只是简单实现,具体逻辑需要根据需求自行修改。