Android 技术的回顾第一篇《网络检测》

来源:互联网 发布:网络信息收集方法 编辑:程序博客网 时间:2024/06/05 08:09

       至今,做Android开发三年了,一事无成。值此生日之际做一下自我改变,勉之,记之。


       好了废话不多说,开发Android 至今由手机设备到定制设备的开发关于网络检测这一块,一开始都是检测一下,弹出个提示框就算了。相对比较简单与不人性化。冥思苦想几昼夜,终于想到一个自我感觉非常人性化的方案。

      《启动页网络检测人性化方案》,下面就用代码来说话。

        首先,定义我们自己的网络工具类,我这里命名为NetTool  ,定义下图的方法。其中LibContext 是一个全局的上下文对象。也可以给该方法增加Context参数。然后定义一个回掉监听的接口OnNetWorkListener.

       

/** * 是否联网 */public static void isNet(final OnNetWorkListener onNetWorkListener) {    final Context ctx = LibContext.quoteContext();    if (ctx == null) {        LogTool.e("Context is Null");        return;    }    new Thread(new Runnable() {        @Override        public void run() {            int times = 0;            while (true){                if (times>15){                    new Handler(Looper.getMainLooper()).post(new Runnable() {                        @Override                        public void run() {                            onNetWorkListener.netTimeOut();                        }                    });                    break;                }                ConnectivityManager connectivityManager = (ConnectivityManager) ctx.getSystemService                        (Context.CONNECTIVITY_SERVICE);                NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();                if (networkInfo != null&&networkInfo.isAvailable()) {                    LogTool.i("======== netSuccess =======");                    new Handler(Looper.getMainLooper()).post(new Runnable() {                        @Override                        public void run() {                            onNetWorkListener.netSuccess();                        }                    });                    break;                }else {                    if (times<=2){                        new Handler(Looper.getMainLooper()).post(new Runnable() {                            @Override                            public void run() {                                onNetWorkListener.netFailed();                            }                        });                    }                }                try {                    Thread.sleep(1000);                } catch (InterruptedException e) {                    e.printStackTrace();                }                LogTool.i("times ======="+times);                times+=1;            }        }    }).start();}


 

/** * Desc    : 联网回调 * Creator : zaric * Date    : 2017-03-06 */public interface OnNetWorkListener {    void netSuccess();    void netTimeOut();    void netFailed();}


代码就这些,我们先了解一下思路。

 1、我们定义一个线程

 2、线程中我们定义了一个Int类型的变量,初始值为0;

3、然后我们定义了一个While循环

4、循环中我们首先判断了一下变量值是否大于15(即循环检测15次)大于跳出循环,抛出超时。其中我们使用到了Handler,用来做子线程中对主线程的操作

5、然后我们通过系统提供的网络检测方法,判断网络的链接。连接成功,抛出成功。

6、连接失败,我们同时判断连接次数变量的值是否超过2次(防止连接错误时,抛出失败多次执行,同时限制成只有前两次的检测会抛出,注意:这个地方可以优化)

7、最后,我们线程休眠1S(即每隔1S检测一次),变量计数,自增1

下面我们看一下使用方法,


NetTool.isNet(new OnNetWorkListener() {    @Override    public void netSuccess() {    }    @Override    public void netTimeOut() {        toastShort("连接超时,应用退出");        finish();    }    @Override    public void netFailed() {        if (isShowHint){            return;        }        isShowHint = true;        new AlertDialog.Builder(SplashActivity.this)                .setTitle("提示")                .setMessage("网络已断开(15S内手动重连,可正常使用),是否退出?")                .setPositiveButton(android.R                        .string.ok, new DialogInterface.OnClickListener() {                    @Override                    public void onClick(DialogInterface dialog, int which) {                        finish();                    }                }).show();    }});



至此结束,欢迎批评讨论







原创粉丝点击