版权声明:本文为HaiyuKing原创文章,转载请注明出处!

前言

该封装类主要包括以下功能:

判断是否有网络连接、判断是否有可用的网络连接;

判断是否是3G网络、判断mobile网络是否可用;

判断是否是wifi、判断wifi网络是否可用;

判断网络是否为漫游;

判断GPS是否打开。

目前常用的场景是,在调用接口之前先判断是否有网络连接,如果有网络连接,则执行网络请求接口,否则提示“当前网络未连接”。其他方法暂时不经常用。

效果图

暂不需要

代码分析

Configs:存放是否测试的常量值。(也可以存放其他常量值)

HttpUtil:封装常用的方法的封装类。

NetWorkHelper:进行网络判断的具体实现类。

使用步骤

一、项目组织结构图

注意事项:

1、导入类文件后需要change包名以及重新import R文件路径

2、Values目录下的文件(strings.xml、dimens.xml、colors.xml等),如果项目中存在,则复制里面的内容,不要整个覆盖

二、导入步骤

将Configs、HttpUtil、NetWorkHelper类复制到项目中

  1. package com.why.project.httputildemo.util.httputil;
  2.  
  3. /**
  4. * Used 用于HttpUtil
  5. */
  6. public class Configs {
  7. /**
  8. * 是否测试版,用于HttpUtil
  9. * <br/>0 - 测试版
  10. * <br/>1 - 正式版*/
  11. public static int TEST_FLAG = 1;
  12. // public static int TEST_FLAG = 0;
  13.  
  14. }

Configs

  1. package com.why.project.httputildemo.util.httputil;
  2.  
  3. import android.content.Context;
  4. import android.util.Log;
  5.  
  6. import java.io.UnsupportedEncodingException;
  7.  
  8. /**
  9. * Used 判断网络连接的封装类
  10. */
  11. public class HttpUtil {
  12.  
  13. /**
  14. * 仅仅用来判断是否有网络连接
  15. */
  16. public static boolean isNetworkAvailable(Context context) {
  17. if (Configs.TEST_FLAG == 0)
  18. {
  19. return true;
  20. } else {
  21. return NetWorkHelper.isNetworkAvailable(context);
  22. }
  23. }
  24.  
  25. /**
  26. * 判断是否有可用的网络连接
  27. * */
  28. public static boolean isNetworkConnected(Context context) {
  29. if (Configs.TEST_FLAG == 0)
  30. {
  31. return true;
  32. } else {
  33. return NetWorkHelper.isNetworkConnected(context);
  34. }
  35. }
  36.  
  37. /**
  38. * 判断mobile网络是否可用
  39. */
  40. public static boolean isMobileDataEnable(Context context) {
  41. String TAG = "httpUtils.isMobileDataEnable()";
  42. try {
  43. return NetWorkHelper.isMobileDataEnable(context);
  44. } catch (Exception e) {
  45. Log.e(TAG, e.getMessage());
  46. e.printStackTrace();
  47. return false;
  48. }
  49. }
  50. /**
  51. * 判断wifi网络是否可用
  52. */
  53. public static boolean isWifiDataEnable(Context context) {
  54. String TAG = "httpUtils.isWifiDataEnable()";
  55. try {
  56. return NetWorkHelper.isWifiDataEnable(context);
  57. } catch (Exception e) {
  58. Log.e(TAG, e.getMessage());
  59. e.printStackTrace();
  60. return false;
  61. }
  62. }
  63. /**
  64. * 判断是否为漫游
  65. */
  66. public static boolean isNetworkRoaming(Context context) {
  67. return NetWorkHelper.isNetworkRoaming(context);
  68. }
  69.  
  70. /**
  71. * 编码测试
  72. */
  73. public static void testCharset(String datastr) {
  74. try {
  75. String temp = new String(datastr.getBytes(), "GBK");
  76. Log.v("TestCharset", "****** getBytes() -> GBK ******/n" + temp);
  77. temp = new String(datastr.getBytes("GBK"), "UTF-8");
  78. Log.v("TestCharset", "****** GBK -> UTF-8 *******/n" + temp);
  79. temp = new String(datastr.getBytes("GBK"), "ISO-8859-1");
  80. Log.v("TestCharset", "****** GBK -> ISO-8859-1 *******/n" + temp);
  81. temp = new String(datastr.getBytes("ISO-8859-1"), "UTF-8");
  82. Log.v("TestCharset", "****** ISO-8859-1 -> UTF-8 *******/n" + temp);
  83. temp = new String(datastr.getBytes("ISO-8859-1"), "GBK");
  84. Log.v("TestCharset", "****** ISO-8859-1 -> GBK *******/n" + temp);
  85. temp = new String(datastr.getBytes("UTF-8"), "GBK");
  86. Log.v("TestCharset", "****** UTF-8 -> GBK *******/n" + temp);
  87. temp = new String(datastr.getBytes("UTF-8"), "ISO-8859-1");
  88. Log.v("TestCharset", "****** UTF-8 -> ISO-8859-1 *******/n" + temp);
  89. } catch (UnsupportedEncodingException e) {
  90. e.printStackTrace();
  91. }
  92. }
  93. }

HttpUtil

  1. package com.why.project.httputildemo.util.httputil;
  2.  
  3. import android.content.Context;
  4. import android.location.LocationManager;
  5. import android.net.ConnectivityManager;
  6. import android.net.NetworkInfo;
  7. import android.telephony.TelephonyManager;
  8.  
  9. import java.util.List;
  10.  
  11. /**
  12. * Used 网络连接的判断:是否有网络、网络是否可用、判断是wifi还是3G、判断wifi是否可用、判断3G是否可用
  13. * 权限 android.permission.ACCESS_NETWORK_STATE
  14. */
  15. public class NetWorkHelper {
  16. /**
  17. * 仅仅用来判断是否有网络连接
  18. */
  19. public static boolean isNetworkAvailable(Context context) {
  20. // 获取手机所有连接管理对象(包括对wi-fi,net等连接的管理)
  21. ConnectivityManager manager = (ConnectivityManager) context
  22. .getSystemService(Context.CONNECTIVITY_SERVICE);
  23. if(manager != null){
  24. // 获取当前活动的NetworkInfo对象
  25. NetworkInfo networkInfo = manager.getActiveNetworkInfo();
  26. if (networkInfo != null) {
  27. /*Log.d(TAG, "info.isAvailable=="+info.isAvailable());*/
  28. return networkInfo.isAvailable();
  29. }
  30. }
  31. return false;
  32. }
  33.  
  34. /**
  35. * 判断是否有可用的网络连接
  36. * */
  37. /*
  38. * 只打开3G连接的时候:
  39. * 0===类型===MOBILE
  40. * 0===状态===CONNECTED
  41. * 打开wifi连接和3G连接的时候:
  42. * 0===类型===MOBILE
  43. * 0===状态===DISCONNECTED
  44. * 1===类型===WIFI
  45. * 1===状态===CONNECTED
  46. * */
  47. public static boolean isNetworkConnected(Context context) {
  48.  
  49. boolean netstate = false;
  50.  
  51. ConnectivityManager manager = (ConnectivityManager) context
  52. .getSystemService(Context.CONNECTIVITY_SERVICE);
  53.  
  54. if (manager != null)
  55. {
  56. NetworkInfo[] networkInfo = manager.getAllNetworkInfo();
  57. if (networkInfo != null) {
  58. for (int i = 0; i < networkInfo.length; i++)
  59. {
  60. /*Log.d(TAG,i + "===类型===" + info[i].getTypeName());
  61. Log.d(TAG,i + "===状态===" + info[i].getState());*/
  62. if (networkInfo[i].getState() == NetworkInfo.State.CONNECTED)
  63. {
  64. netstate = true;
  65. break;
  66. }
  67. }
  68. }
  69. }
  70. return netstate;
  71. }
  72.  
  73. /**
  74. * 判断是否是wifi,用户的体现性在这里了,wifi就可以建议下载或者在线播放
  75. * */
  76. public static boolean isWifi(Context context) {
  77. ConnectivityManager manager = (ConnectivityManager) context
  78. .getSystemService(Context.CONNECTIVITY_SERVICE);
  79. NetworkInfo networkInfo = manager.getActiveNetworkInfo();
  80. if (networkInfo != null
  81. && networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
  82. return true;
  83. }
  84. return false;
  85. }
  86.  
  87. /**
  88. * 判断wifi 是否可用
  89. * @param context
  90. * @return
  91. * @throws Exception
  92. */
  93. public static boolean isWifiDataEnable(Context context) throws Exception {
  94. ConnectivityManager manager = (ConnectivityManager) context
  95. .getSystemService(Context.CONNECTIVITY_SERVICE);
  96.  
  97. boolean isWifiDataEnable = false;
  98.  
  99. isWifiDataEnable = manager.getNetworkInfo(
  100. ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();
  101. return isWifiDataEnable;
  102. }
  103.  
  104. /**
  105. * 判断是否是3G网络
  106. * */
  107. public static boolean is3rd(Context context) {
  108. ConnectivityManager manager = (ConnectivityManager) context
  109. .getSystemService(Context.CONNECTIVITY_SERVICE);
  110. NetworkInfo networkInfo = manager.getActiveNetworkInfo();
  111. if (networkInfo != null
  112. && networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
  113. return true;
  114. }
  115. return false;
  116. }
  117.  
  118. /**
  119. * 判断3G网络是否可用
  120. *
  121. * @param context
  122. * @return
  123. * @throws Exception
  124. */
  125. public static boolean isMobileDataEnable(Context context) throws Exception {
  126. ConnectivityManager manager = (ConnectivityManager) context
  127. .getSystemService(Context.CONNECTIVITY_SERVICE);
  128. boolean isMobileDataEnable = false;
  129. isMobileDataEnable = manager.getNetworkInfo(
  130. ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting();
  131.  
  132. return isMobileDataEnable;
  133. }
  134.  
  135. /**
  136. * 判断网络是否为漫游
  137. */
  138. public static boolean isNetworkRoaming(Context context) {
  139. ConnectivityManager manager = (ConnectivityManager) context
  140. .getSystemService(Context.CONNECTIVITY_SERVICE);
  141. if (manager != null) {
  142. NetworkInfo info = manager.getActiveNetworkInfo();
  143. if (info != null && info.getType() == ConnectivityManager.TYPE_MOBILE) {
  144. TelephonyManager tm = (TelephonyManager) context
  145. .getSystemService(Context.TELEPHONY_SERVICE);
  146. if (tm != null && tm.isNetworkRoaming()) {
  147. return true;
  148. } else {
  149. }
  150. }
  151. }
  152. return false;
  153. }
  154. /**
  155. * 判断GPS是否打开
  156. * */
  157. public static boolean isGpsEnabled(Context context) {
  158. LocationManager lm = ((LocationManager) context
  159. .getSystemService(Context.LOCATION_SERVICE));
  160. List<String> accessibleProviders = lm.getProviders(true);
  161. return accessibleProviders != null && accessibleProviders.size() > 0;
  162. }
  163.  
  164. }

NetWorkHelper

在strings.xml文件中添加以下代码

  1. <resources>
  2. <string name="app_name">HttpUtilDemo</string>
  3.  
  4. <!-- ******************公共字段:用于HttpUtil****************** -->
  5. <string name="network_enable">当前网络未连接</string>
  6. <string name="network_terrible">当前网络不佳,请检查您的网络设置。</string>
  7. <string name="network_error">网络连接异常</string>
  8. <string name="network_timeout">网络请求超时,请重试</string>
  9. <string name="network_unavailable">网络连接不可用</string>
  10. <!-- 公共字段 end-->
  11.  
  12. </resources>

在AndroidManifest.xml中添加以下代码

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.why.project.httputildemo">
  4.  
  5. <!-- ======================授权访问网络(HttpUtil)========================== -->
  6. <!-- 允许程序打开网络套接字 -->
  7. <uses-permission android:name="android.permission.INTERNET"/>
  8. <!-- 允许程序访问有关GSM网络信息 -->
  9. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  10. <!-- 允许程序访问Wi-Fi网络状态信息 -->
  11. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  12. <!-- 允许一个程序访问精良位置(如GPS) -->
  13. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  14. <!-- 访问电话状态 -->
  15. <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  16.  
  17. <application
  18. android:allowBackup="true"
  19. android:icon="@mipmap/ic_launcher"
  20. android:label="@string/app_name"
  21. android:supportsRtl="true"
  22. android:theme="@style/AppTheme">
  23. <activity android:name=".MainActivity">
  24. <intent-filter>
  25. <action android:name="android.intent.action.MAIN"/>
  26.  
  27. <category android:name="android.intent.category.LAUNCHER"/>
  28. </intent-filter>
  29. </activity>
  30. </application>
  31.  
  32. </manifest>

三、使用方法

以登录网络请求接口为例,大概的写法如下(此处只是框架,不含有登录接口的具体实现方法)

  1. package com.why.project.httputildemo;
  2.  
  3. import android.os.Bundle;
  4. import android.support.v7.app.AppCompatActivity;
  5.  
  6. import com.why.project.httputildemo.util.httputil.HttpUtil;
  7.  
  8. public class MainActivity extends AppCompatActivity {
  9.  
  10. @Override
  11. protected void onCreate(Bundle savedInstanceState) {
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.activity_main);
  14.  
  15. Login();
  16. }
  17.  
  18. /**
  19. * 程序登录
  20. */
  21. private void Login(){
  22. if (HttpUtil.isNetworkAvailable(this)) {
  23. //执行网络请求接口
  24. }else{ToastUtil.showShortToast(MyApplication.getAppContext().getResources().getString(R.string.network_enable));
  25. }
  26. }
  27. }

注意:Toast提示,这里使用的是ToastUtil【简单的Toast封装类】【未自定义Toast的显示风格】

混淆配置

参考资料

暂时空缺

项目demo下载地址

https://github.com/haiyuKing/HttpUtilDemo

HttpUtil 【判断网络连接的封装类】的更多相关文章

  1. Win8 app判断网络连接状态

    Win8 app判断网络连接状态 NetworkInformation.NetworkStatusChanged += NetworkInformation_NetworkStatusChanged; ...

  2. android中判断网络连接是否可用

    一.判断网络连接是否可用 public static boolean isNetworkAvailable(Context context) { ConnectivityManager cm = (C ...

  3. android判断网络连接状态、联网类型、运营商

    /** * 获取上网方式 * * @param mContext * @return */ public static String getNetType(Context mContext) { St ...

  4. c#判断网络连接状态示例代码

    使用c#判断网络连接状态的代码. 代码: public partial class Form1 : Form { [DllImport() == true) { label1.Text = " ...

  5. Android中判断网络连接是否可用及监控网络状态

    Android中判断网络连接是否可用及监控网络状态 作者: 字体:[增加 减小] 类型:转载 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限,接下来详细介绍Android ...

  6. iOS 判断网络连接状态的几种方法

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #801b80 } p.p2 ...

  7. Unity判断网络连接类型

    使用NetworkReachability判断手机游戏当前的网络连接类型,是wifi还是234G using UnityEngine; using System.Collections; public ...

  8. 【Android进阶】判断网络连接状态并自动界面跳转

    用于判断软件打开时的网络连接状态,若无网络连接,提醒用户跳转到设置界面 /** * 设置在onStart()方法里面,可以在界面每次获得焦点的时候都进行检测 */ @Override protecte ...

  9. Android项目实战(五十三):判断网络连接是否为有线状态(tv项目适配)

    一般对于android手机,我们可以通过sdk提供的方法判断网络情况 /** * 获取当前的网络状态 :没有网络-0:WIFI网络1:4G网络-4:3G网络-3:2G网络-2 * 自定义 * * @p ...

随机推荐

  1. Python——pip安装报错:is not a supported wheel on this platform

    pip安装报错:is not a supported wheel on this platform 可能的原因1:安装的不是对应python版本的库,下载的库名中cp35代表python3.5,其它同 ...

  2. 【BZOJ 1002】: [FJOI2007]轮状病毒

    题目大意:(略) 题解: 第一眼,这不是矩阵树裸体,看了看样例,心想3就有16,那100岂不是要上天…… 果然炸long long……emmmm该不会要打高精除吧……害怕,按照老师的话,不可能考高精除 ...

  3. bzoj 1189 紧急疏散 网络流

    二分答案,网络流判断 将每个门拆点,每个人连向每个门的dis~当前解 然后跑最大流,如果等于人数,即为可行解 #include<cstdio> #include<iostream&g ...

  4. Matlab实现画柱状图坐标标签旋转

    引言: 在用matlab画柱状图或者其他图的时候,你是否碰到下图这种情况: 乍一看这个柱状图画的有馍有洋的,but,仔细一看你会发现,横坐标标签如果再长一点就不好看啦,甚至会重叠,就像这样: 这样的图 ...

  5. 深入css布局篇(1) — 盒模型 & 元素分类

    深入css布局(1)-- 盒模型 & 元素分类     " 在css知识体系中,除了css选择器,样式属性等基础知识外,css布局相关的知识才是css比较核心和重要的点.今天我们来深 ...

  6. 最新.net和Java调用SAP RFC中间件下载

    还记得2012年初我发布的全网络第一个关于.net 连接SAP RFC的NCO3原创博文,用的就是SAP出的最新的.Net Connector 3.0的版本,在那个时候都是普遍用其他蹩脚的方式或Web ...

  7. 深入理解数据库磁盘存储(Disk Storage)

    数据库管理系统将数据存储在磁盘.磁带以及其他的裸设备上,虽然这些设备的访问速度相比内存慢很多,但其非易失性和大容量的特点使他们成为数据存储的不二之选. 本文主要讨论大型数据库产品的磁盘存储内部结构,这 ...

  8. 原型模式--java代码实现

    原型模式 原型模式,属于对象创建型模式中的一种.通过复制原型对象的方法来创建一个对象实例,且该对象与原对象有相同的数据结构和值.类似我们在备份数据库信息的时候,将数据库中表的结构和数据的一同备份,生成 ...

  9. mybatis入门系列三之类型转换器

    mybatis入门系列三之类型转换器 类型转换器介绍 mybatis作为一个ORM框架,要求java中的对象与数据库中的表记录应该对应 因此java类名-数据库表名,java类属性名-数据库表字段名, ...

  10. 从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器

    从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器 之前时间一直在使用Caliburn.Micro这种应用了MVVM模式的WPF框架做开发,是时候总结一下了. Calibu ...