Android实时监听并回应

问题描述:实现每几秒实时循环监听一个接口的返回值,当监听到特定值时执行相应操作
这里写了一个例子,实现了每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"/>

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值