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(); }});
至此结束,欢迎批评讨论
阅读全文
0 0
- Android 技术的回顾第一篇《网络检测》
- 第一篇、操作系统历史回顾
- 第一篇技术贴(Android WebView)
- 第一篇技术贴(Android WebView)
- 第一篇技术博客,人生的第一篇博客!
- 第一篇博客,写给自己一年的回顾
- javaweb回顾第一篇servlet的学习和理解
- Shiro第一篇【Shiro的基础知识、回顾URL拦截】
- 第一篇 Android的认识
- ahwingwu的技术博客第一篇
- 我的第一篇技术博客
- 我的第一篇技术博客
- 我的第一篇技术博客
- 小菜鸟的第一篇“技术”博客
- 我的第一篇技术博客
- 我的第一篇技术BLOG
- 我的第一篇博客 非技术
- 我的第一篇技术文档
- 装饰器模式(Decorator)
- 记Java中的split()函数的用法
- 支付宝小程序审核与发布
- Windows下Nginx的启动、停止等命令
- NPM 国内被墙的解决方法
- Android 技术的回顾第一篇《网络检测》
- 动态的修改td的内容
- Gym Commandos
- USB总线学习心得及资料
- highcharts 动态设置series
- php-cgi.exe系统错误 无法启动程序,因为计算机中丢失api-ms-win-crt-conio-l1-1-0.dll 尝试解决安装该程序以解决此问题
- Java开发中Tomcat中session的管理机制
- java将list转为树形结构的方法
- 运算