问题描述:实现每几秒实时循环监听一个接口的返回值,当监听到特定值时执行相应操作
这里写了一个例子,实现了每2秒监听网络状态,如果监听到网络不可用,就在前台提示,使用了接口回调的方法。
解决方案:
public class NetStateListener {
public interface OnNetStateListener{//接口
void netMMonitor(boolean isAvailable);
}
OnNetStateListener onNetStateListener=null;
public void setOnNetStateListener(OnNetStateListener onNetStateListener){//回调方法
this.onNetStateListener=onNetStateListener;
}
Timer timer=new Timer();
TimerTask task=new TimerTask() {
@Override
public void run() {
Message msg=new Message();
handler.sendMessage(msg);
}
};
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg){
if(onNetStateListener!=null){
//这里就实现了每2秒监听网络状态
onNetStateListener.netMMonitor(getNetState());
}
}
};
public void start(){//开始监听
timer.schedule(task,1000,2000);//1秒后执行,每2秒监听一次接口
}
public void stop(){//停止所有定时任务
timer.cancel();
}
private Context context;
public NetStateListener(Context context){
super();
this.context=context;
}
//监听网络状态的接口
public boolean getNetState(){
ConnectivityManager connectivity=(ConnectivityManager)context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if(connectivity!=null){
NetworkInfo info=connectivity.getActiveNetworkInfo();
if(info!=null&&info.isConnected()){
if(info.getState()==NetworkInfo.State.CONNECTED){
return true;
}
}
}
return false;
}
}
在activity中使用该监听器类:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final NetStateListener netStateListener=new NetStateListener(this);
netStateListener.start();//开始监听
netStateListener.setOnNetStateListener(new NetStateListener.OnNetStateListener() {
@Override
public void netMMonitor(boolean isAvailable) {
//这里就可以根据返回的状态值执行一些想要的操作,像执行UI操作
//比如我在这边实现了当网络监听接口getNetState返回false,便在前台提示
if(!isAvailable) {
Toast.makeText(MainActivity.this, "网络不可用", Toast.LENGTH_SHORT).show();
}
}
});
}
}
注意为了让这个应用可以运行而不报错,还需要在manifest.xml添加权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>