HttpUtil 【判断网络连接的封装类】
版权声明:本文为HaiyuKing原创文章,转载请注明出处!
前言
该封装类主要包括以下功能:
判断是否有网络连接、判断是否有可用的网络连接;
判断是否是3G网络、判断mobile网络是否可用;
判断是否是wifi、判断wifi网络是否可用;
判断网络是否为漫游;
判断GPS是否打开。
目前常用的场景是,在调用接口之前先判断是否有网络连接,如果有网络连接,则执行网络请求接口,否则提示“当前网络未连接”。其他方法暂时不经常用。
效果图
暂不需要
代码分析
Configs:存放是否测试的常量值。(也可以存放其他常量值)
HttpUtil:封装常用的方法的封装类。
NetWorkHelper:进行网络判断的具体实现类。
使用步骤
一、项目组织结构图
注意事项:
1、导入类文件后需要change包名以及重新import R文件路径
2、Values目录下的文件(strings.xml、dimens.xml、colors.xml等),如果项目中存在,则复制里面的内容,不要整个覆盖
二、导入步骤
将Configs、HttpUtil、NetWorkHelper类复制到项目中
- package com.why.project.httputildemo.util.httputil;
- /**
- * Used 用于HttpUtil
- */
- public class Configs {
- /**
- * 是否测试版,用于HttpUtil
- * <br/>0 - 测试版
- * <br/>1 - 正式版*/
- public static int TEST_FLAG = 1;
- // public static int TEST_FLAG = 0;
- }
Configs
- package com.why.project.httputildemo.util.httputil;
- import android.content.Context;
- import android.util.Log;
- import java.io.UnsupportedEncodingException;
- /**
- * Used 判断网络连接的封装类
- */
- public class HttpUtil {
- /**
- * 仅仅用来判断是否有网络连接
- */
- public static boolean isNetworkAvailable(Context context) {
- if (Configs.TEST_FLAG == 0)
- {
- return true;
- } else {
- return NetWorkHelper.isNetworkAvailable(context);
- }
- }
- /**
- * 判断是否有可用的网络连接
- * */
- public static boolean isNetworkConnected(Context context) {
- if (Configs.TEST_FLAG == 0)
- {
- return true;
- } else {
- return NetWorkHelper.isNetworkConnected(context);
- }
- }
- /**
- * 判断mobile网络是否可用
- */
- public static boolean isMobileDataEnable(Context context) {
- String TAG = "httpUtils.isMobileDataEnable()";
- try {
- return NetWorkHelper.isMobileDataEnable(context);
- } catch (Exception e) {
- Log.e(TAG, e.getMessage());
- e.printStackTrace();
- return false;
- }
- }
- /**
- * 判断wifi网络是否可用
- */
- public static boolean isWifiDataEnable(Context context) {
- String TAG = "httpUtils.isWifiDataEnable()";
- try {
- return NetWorkHelper.isWifiDataEnable(context);
- } catch (Exception e) {
- Log.e(TAG, e.getMessage());
- e.printStackTrace();
- return false;
- }
- }
- /**
- * 判断是否为漫游
- */
- public static boolean isNetworkRoaming(Context context) {
- return NetWorkHelper.isNetworkRoaming(context);
- }
- /**
- * 编码测试
- */
- public static void testCharset(String datastr) {
- try {
- String temp = new String(datastr.getBytes(), "GBK");
- Log.v("TestCharset", "****** getBytes() -> GBK ******/n" + temp);
- temp = new String(datastr.getBytes("GBK"), "UTF-8");
- Log.v("TestCharset", "****** GBK -> UTF-8 *******/n" + temp);
- temp = new String(datastr.getBytes("GBK"), "ISO-8859-1");
- Log.v("TestCharset", "****** GBK -> ISO-8859-1 *******/n" + temp);
- temp = new String(datastr.getBytes("ISO-8859-1"), "UTF-8");
- Log.v("TestCharset", "****** ISO-8859-1 -> UTF-8 *******/n" + temp);
- temp = new String(datastr.getBytes("ISO-8859-1"), "GBK");
- Log.v("TestCharset", "****** ISO-8859-1 -> GBK *******/n" + temp);
- temp = new String(datastr.getBytes("UTF-8"), "GBK");
- Log.v("TestCharset", "****** UTF-8 -> GBK *******/n" + temp);
- temp = new String(datastr.getBytes("UTF-8"), "ISO-8859-1");
- Log.v("TestCharset", "****** UTF-8 -> ISO-8859-1 *******/n" + temp);
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- }
- }
HttpUtil
- package com.why.project.httputildemo.util.httputil;
- import android.content.Context;
- import android.location.LocationManager;
- import android.net.ConnectivityManager;
- import android.net.NetworkInfo;
- import android.telephony.TelephonyManager;
- import java.util.List;
- /**
- * Used 网络连接的判断:是否有网络、网络是否可用、判断是wifi还是3G、判断wifi是否可用、判断3G是否可用
- * 权限 android.permission.ACCESS_NETWORK_STATE
- */
- public class NetWorkHelper {
- /**
- * 仅仅用来判断是否有网络连接
- */
- public static boolean isNetworkAvailable(Context context) {
- // 获取手机所有连接管理对象(包括对wi-fi,net等连接的管理)
- ConnectivityManager manager = (ConnectivityManager) context
- .getSystemService(Context.CONNECTIVITY_SERVICE);
- if(manager != null){
- // 获取当前活动的NetworkInfo对象
- NetworkInfo networkInfo = manager.getActiveNetworkInfo();
- if (networkInfo != null) {
- /*Log.d(TAG, "info.isAvailable=="+info.isAvailable());*/
- return networkInfo.isAvailable();
- }
- }
- return false;
- }
- /**
- * 判断是否有可用的网络连接
- * */
- /*
- * 只打开3G连接的时候:
- * 0===类型===MOBILE
- * 0===状态===CONNECTED
- * 打开wifi连接和3G连接的时候:
- * 0===类型===MOBILE
- * 0===状态===DISCONNECTED
- * 1===类型===WIFI
- * 1===状态===CONNECTED
- * */
- public static boolean isNetworkConnected(Context context) {
- boolean netstate = false;
- ConnectivityManager manager = (ConnectivityManager) context
- .getSystemService(Context.CONNECTIVITY_SERVICE);
- if (manager != null)
- {
- NetworkInfo[] networkInfo = manager.getAllNetworkInfo();
- if (networkInfo != null) {
- for (int i = 0; i < networkInfo.length; i++)
- {
- /*Log.d(TAG,i + "===类型===" + info[i].getTypeName());
- Log.d(TAG,i + "===状态===" + info[i].getState());*/
- if (networkInfo[i].getState() == NetworkInfo.State.CONNECTED)
- {
- netstate = true;
- break;
- }
- }
- }
- }
- return netstate;
- }
- /**
- * 判断是否是wifi,用户的体现性在这里了,wifi就可以建议下载或者在线播放
- * */
- public static boolean isWifi(Context context) {
- ConnectivityManager manager = (ConnectivityManager) context
- .getSystemService(Context.CONNECTIVITY_SERVICE);
- NetworkInfo networkInfo = manager.getActiveNetworkInfo();
- if (networkInfo != null
- && networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
- return true;
- }
- return false;
- }
- /**
- * 判断wifi 是否可用
- * @param context
- * @return
- * @throws Exception
- */
- public static boolean isWifiDataEnable(Context context) throws Exception {
- ConnectivityManager manager = (ConnectivityManager) context
- .getSystemService(Context.CONNECTIVITY_SERVICE);
- boolean isWifiDataEnable = false;
- isWifiDataEnable = manager.getNetworkInfo(
- ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();
- return isWifiDataEnable;
- }
- /**
- * 判断是否是3G网络
- * */
- public static boolean is3rd(Context context) {
- ConnectivityManager manager = (ConnectivityManager) context
- .getSystemService(Context.CONNECTIVITY_SERVICE);
- NetworkInfo networkInfo = manager.getActiveNetworkInfo();
- if (networkInfo != null
- && networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
- return true;
- }
- return false;
- }
- /**
- * 判断3G网络是否可用
- *
- * @param context
- * @return
- * @throws Exception
- */
- public static boolean isMobileDataEnable(Context context) throws Exception {
- ConnectivityManager manager = (ConnectivityManager) context
- .getSystemService(Context.CONNECTIVITY_SERVICE);
- boolean isMobileDataEnable = false;
- isMobileDataEnable = manager.getNetworkInfo(
- ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting();
- return isMobileDataEnable;
- }
- /**
- * 判断网络是否为漫游
- */
- public static boolean isNetworkRoaming(Context context) {
- ConnectivityManager manager = (ConnectivityManager) context
- .getSystemService(Context.CONNECTIVITY_SERVICE);
- if (manager != null) {
- NetworkInfo info = manager.getActiveNetworkInfo();
- if (info != null && info.getType() == ConnectivityManager.TYPE_MOBILE) {
- TelephonyManager tm = (TelephonyManager) context
- .getSystemService(Context.TELEPHONY_SERVICE);
- if (tm != null && tm.isNetworkRoaming()) {
- return true;
- } else {
- }
- }
- }
- return false;
- }
- /**
- * 判断GPS是否打开
- * */
- public static boolean isGpsEnabled(Context context) {
- LocationManager lm = ((LocationManager) context
- .getSystemService(Context.LOCATION_SERVICE));
- List<String> accessibleProviders = lm.getProviders(true);
- return accessibleProviders != null && accessibleProviders.size() > 0;
- }
- }
NetWorkHelper
在strings.xml文件中添加以下代码
- <resources>
- <string name="app_name">HttpUtilDemo</string>
- <!-- ******************公共字段:用于HttpUtil****************** -->
- <string name="network_enable">当前网络未连接</string>
- <string name="network_terrible">当前网络不佳,请检查您的网络设置。</string>
- <string name="network_error">网络连接异常</string>
- <string name="network_timeout">网络请求超时,请重试</string>
- <string name="network_unavailable">网络连接不可用</string>
- <!-- 公共字段 end-->
- </resources>
在AndroidManifest.xml中添加以下代码
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.why.project.httputildemo">
- <!-- ======================授权访问网络(HttpUtil)========================== -->
- <!-- 允许程序打开网络套接字 -->
- <uses-permission android:name="android.permission.INTERNET"/>
- <!-- 允许程序访问有关GSM网络信息 -->
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- <!-- 允许程序访问Wi-Fi网络状态信息 -->
- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
- <!-- 允许一个程序访问精良位置(如GPS) -->
- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
- <!-- 访问电话状态 -->
- <uses-permission android:name="android.permission.READ_PHONE_STATE" />
- <application
- android:allowBackup="true"
- android:icon="@mipmap/ic_launcher"
- android:label="@string/app_name"
- android:supportsRtl="true"
- android:theme="@style/AppTheme">
- <activity android:name=".MainActivity">
- <intent-filter>
- <action android:name="android.intent.action.MAIN"/>
- <category android:name="android.intent.category.LAUNCHER"/>
- </intent-filter>
- </activity>
- </application>
- </manifest>
三、使用方法
以登录网络请求接口为例,大概的写法如下(此处只是框架,不含有登录接口的具体实现方法)
- package com.why.project.httputildemo;
- import android.os.Bundle;
- import android.support.v7.app.AppCompatActivity;
- import com.why.project.httputildemo.util.httputil.HttpUtil;
- public class MainActivity extends AppCompatActivity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- Login();
- }
- /**
- * 程序登录
- */
- private void Login(){
- if (HttpUtil.isNetworkAvailable(this)) {
- //执行网络请求接口
- }else{ToastUtil.showShortToast(MyApplication.getAppContext().getResources().getString(R.string.network_enable));
- }
- }
- }
注意:Toast提示,这里使用的是ToastUtil【简单的Toast封装类】【未自定义Toast的显示风格】
混淆配置
无
参考资料
暂时空缺
项目demo下载地址
https://github.com/haiyuKing/HttpUtilDemo
HttpUtil 【判断网络连接的封装类】的更多相关文章
- Win8 app判断网络连接状态
Win8 app判断网络连接状态 NetworkInformation.NetworkStatusChanged += NetworkInformation_NetworkStatusChanged; ...
- android中判断网络连接是否可用
一.判断网络连接是否可用 public static boolean isNetworkAvailable(Context context) { ConnectivityManager cm = (C ...
- android判断网络连接状态、联网类型、运营商
/** * 获取上网方式 * * @param mContext * @return */ public static String getNetType(Context mContext) { St ...
- c#判断网络连接状态示例代码
使用c#判断网络连接状态的代码. 代码: public partial class Form1 : Form { [DllImport() == true) { label1.Text = " ...
- Android中判断网络连接是否可用及监控网络状态
Android中判断网络连接是否可用及监控网络状态 作者: 字体:[增加 减小] 类型:转载 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限,接下来详细介绍Android ...
- iOS 判断网络连接状态的几种方法
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #801b80 } p.p2 ...
- Unity判断网络连接类型
使用NetworkReachability判断手机游戏当前的网络连接类型,是wifi还是234G using UnityEngine; using System.Collections; public ...
- 【Android进阶】判断网络连接状态并自动界面跳转
用于判断软件打开时的网络连接状态,若无网络连接,提醒用户跳转到设置界面 /** * 设置在onStart()方法里面,可以在界面每次获得焦点的时候都进行检测 */ @Override protecte ...
- Android项目实战(五十三):判断网络连接是否为有线状态(tv项目适配)
一般对于android手机,我们可以通过sdk提供的方法判断网络情况 /** * 获取当前的网络状态 :没有网络-0:WIFI网络1:4G网络-4:3G网络-3:2G网络-2 * 自定义 * * @p ...
随机推荐
- Python——pip安装报错:is not a supported wheel on this platform
pip安装报错:is not a supported wheel on this platform 可能的原因1:安装的不是对应python版本的库,下载的库名中cp35代表python3.5,其它同 ...
- 【BZOJ 1002】: [FJOI2007]轮状病毒
题目大意:(略) 题解: 第一眼,这不是矩阵树裸体,看了看样例,心想3就有16,那100岂不是要上天…… 果然炸long long……emmmm该不会要打高精除吧……害怕,按照老师的话,不可能考高精除 ...
- bzoj 1189 紧急疏散 网络流
二分答案,网络流判断 将每个门拆点,每个人连向每个门的dis~当前解 然后跑最大流,如果等于人数,即为可行解 #include<cstdio> #include<iostream&g ...
- Matlab实现画柱状图坐标标签旋转
引言: 在用matlab画柱状图或者其他图的时候,你是否碰到下图这种情况: 乍一看这个柱状图画的有馍有洋的,but,仔细一看你会发现,横坐标标签如果再长一点就不好看啦,甚至会重叠,就像这样: 这样的图 ...
- 深入css布局篇(1) — 盒模型 & 元素分类
深入css布局(1)-- 盒模型 & 元素分类 " 在css知识体系中,除了css选择器,样式属性等基础知识外,css布局相关的知识才是css比较核心和重要的点.今天我们来深 ...
- 最新.net和Java调用SAP RFC中间件下载
还记得2012年初我发布的全网络第一个关于.net 连接SAP RFC的NCO3原创博文,用的就是SAP出的最新的.Net Connector 3.0的版本,在那个时候都是普遍用其他蹩脚的方式或Web ...
- 深入理解数据库磁盘存储(Disk Storage)
数据库管理系统将数据存储在磁盘.磁带以及其他的裸设备上,虽然这些设备的访问速度相比内存慢很多,但其非易失性和大容量的特点使他们成为数据存储的不二之选. 本文主要讨论大型数据库产品的磁盘存储内部结构,这 ...
- 原型模式--java代码实现
原型模式 原型模式,属于对象创建型模式中的一种.通过复制原型对象的方法来创建一个对象实例,且该对象与原对象有相同的数据结构和值.类似我们在备份数据库信息的时候,将数据库中表的结构和数据的一同备份,生成 ...
- mybatis入门系列三之类型转换器
mybatis入门系列三之类型转换器 类型转换器介绍 mybatis作为一个ORM框架,要求java中的对象与数据库中的表记录应该对应 因此java类名-数据库表名,java类属性名-数据库表字段名, ...
- 从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器
从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器 之前时间一直在使用Caliburn.Micro这种应用了MVVM模式的WPF框架做开发,是时候总结一下了. Calibu ...