版权声明:本文为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 【判断网络连接的封装类】的更多相关文章

  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. Semaphore简介

    Semaphore简介 Semaphore是并发包中提供的用于控制某资源同时被访问的个数 操作系统的信号量是个很重要的概念,在进程控制方面都有应用.Java 并发库 的Semaphore 可以很轻松完 ...

  2. Java NIO 概览

    Java面试通关手册(Java学习指南) Github地址:https://github.com/Snailclimb/Java_Guide 一 NIO简介 Java NIO 是 java 1.4 之 ...

  3. Oracle系列-锁表与解锁解决方案(基础版)

    [Oracle锁表查询和解锁解决方案] 一.了解原因(借鉴整理) 数据库操作语句的分类 DDL:数据库模式定义语言,关键字:createDML:数据操纵语言,关键字:Insert.delete.upd ...

  4. CSS3实例分享之多重背景的实现(Multiple backgrounds)

    CSS3的诞生为我们解决了这一问题,在CSS3里,通过background-image或者background可以为一个容器设置多张背景图像,也就是说可以把不同背景图象只放到一个块元素里. 首先我们来 ...

  5. 自己动手编译Android(LineageOS)源码

    准备 设备:红米3s 设备代号:land Android版本:7.1.1 源码提供:Lineage PC配置: 系统:Ubuntu16.04 x64 至少12G RAM 至少80GB 剩余硬盘空间 良 ...

  6. final 关键字与安全发布 多线程中篇(十三)

    final的通常理解 在Java中,final关键字可以用来修饰类.方法和变量(包括成员变量和局部变量) 大家应该都知道final表示最终的.最后的含义,也就是不能在继续 修饰类表示不能继承,修饰方法 ...

  7. Java安全(权限)框架 - Shiro 功能讲解 架构分析

    Java安全(权限)框架 - Shiro 功能讲解 架构分析 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 简述Shiro Shiro出自公司Apache(阿帕奇),是java的一 ...

  8. Docker最全教程之使用Docker搭建Java开发环境(十七)

    前言 Java是一门面向对象的优秀编程语言,市场占有率极高,但是在容器化实践过程中,发现官方支持并不友好,同时与其他编程语言的基础镜像相比(具体见各语言镜像比较),确实是非常臃肿. 本篇仅作探索,希望 ...

  9. 在nuget上发布自己的程序集教程

     前期准备 [1]注册nuget官网账号:注册地址:https://www.nuget.org/ [2]下载Nuget.exe文件:下载地址:https://www.nuget.org/downloa ...

  10. Oracle 中的SELECT 关键字(查询、检索)

    1. SELECT 关键字用法: 检索单个列:select 列名 from 表名: 例:select ename from emp;检索多个列: select [列1,列2, ... ,列N] fro ...