您的位置:首页 > 理论基础 > 计算机网络

Android简单实现实时监听网络状态

2017-11-15 14:49 525 查看
先简单说一下思路:网络变化时系统会发出广播。所以我们监听这个广播,利用接口回调通知activity做相应的操作就好了。

思路

判断网络状态(写个工具类NetUtil)

写个类继承BroadcastReceiver(不要忘记在清单文件中注册)

需要在清单文件中添加权限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>


回调接口(NetEvevt)

BaseActivity实现这个接口

直接上代码

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

/**
* Created by Hoban on 2017/11/15.
*/
public class NetUtil {

/**
* 没有连接网络
*/
public static final int NETWORK_NONE = -1;
/**
* 移动网络
*/
public static final int NETWORK_MOBILE = 0;
/**
* 无线网络
*/
public static final int NETWORK_WIFI = 1;

public static int getNetWorkState(Context context) {

// 得到连接管理器对象
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo activeNetworkInfo = connectivityManager
.getActiveNetworkInfo();
if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) {
if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_WIFI)) {
return NETWORK_WIFI;
} else if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_MOBILE)) {
return NETWORK_MOBILE;
}
} else {
return NETWORK_NONE;
}
return NETWORK_NONE;
}
}


import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;

/**
* Created by Hoban on 2017/11/15.
*/

public class NetBroadcastReceiver extends BroadcastReceiver {
public NetEvevt evevt = BaseActivity.evevt;

@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
int netWorkState = NetUtil.getNetWorkState(context);
// 接口回调传过去状态的类型
evevt.onNetChange(netWorkState);
}
}

// 自定义接口
public interface NetEvevt {
public void onNetChange(int netMobile);
}
}


import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import android.widget.TextView;

/**
* Created by Hoban on 2017/11/15.
*/
public class MainActivity extends BaseActivity {

private TextView textView,txtView;
ListView listView;  //声明一个ListView对象

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView= (TextView) findViewById(R.id.textView);
txtView=(TextView)this.findViewById(R.id.txtView);

//启动时判断网络状态
boolean netConnect = this.isNetConnect();
if (netConnect){
textView.setVisibility(View.GONE);
txtView.setText("网络连接正常");
}else {
textView.setVisibility(View.VISIBLE);
txtView.setText("网络连接异常");
}
}

@Override
public void onNetChange(int netMobile) {
super.onNetChange(netMobile);
//网络状态变化时的操作
if (netMobile==NetUtil.NETWORK_NONE){
textView.setVisibility(View.VISIBLE);
txtView.setText("网络连接异常");
}else {
textView.setVisibility(View.GONE);
txtView.setText("网络连接正常");
}
}

}


做了个Demo供大家参考 Demo下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 网络