版权声明:本文为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. MySQL 慢查询日志总结

    慢查询日志概念 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志 ...

  2. golang 1.8 优雅关闭

    // main.go package main import ( "fmt" "log" "net/http" "os" ...

  3. ruby整理

    参考博客:https://www.cnblogs.com/felixzh/p/8081622.html 官网地址 https://rvm.io/rvm/install 一.前提  centos6.8下 ...

  4. vue+axios访问本地json数据踩坑点

    当我们想在vue项目中模拟后台接口访问json数据时,我们发现无论如何也访问不到本地的json数据. 注意:1.在vue-cli项目中,我们静态资源只能放在static文件夹中,axios使用get请 ...

  5. 机器学习周志华 pdf统计学习人工智能资料下载

    周志华-机器学习 pdf,下载地址: https://u12230716.pipipan.com/fs/12230716-239561959 统计学习方法-李航,  下载地址: https://u12 ...

  6. MySQL 复制 - 性能与扩展性的基石 3:常见问题及解决方案

    主备复制过程中有很大可能会出现各种问题,接下来我们就讨论一些比较普遍的问题,以及当遇到这些问题时,如何解决或者预防问题发生. 1 数据损坏或丢失 问题描述:服务器崩溃.断电.磁盘损坏.内存或网络错误等 ...

  7. 『动态』动态JSON万能转换函数 + .Net40 dynamic动态数据绑定

    不废话,调用代码: static void Main(string[] args) { string json = File.ReadAllText("2.txt", Encodi ...

  8. Dubbo Mesh 在闲鱼生产环境中的落地实践

    本文作者至简曾在 2018 QCon 上海站以<Service Mesh 的本质.价值和应用探索>为题做了一次分享,其中谈到了 Dubbo Mesh 的整体发展思路是“借力开源.反哺开源” ...

  9. 程序员如何巧用Excel提高工作效率

    作为一名程序员,我们可能很少使用Excel,但是公司的一些职能部门,比如HR,财务等,使用Excel真的是太熟练了,以至于一些系统开发出来,导入和导出功能是使用最频繁的,哈哈. 其实在程序开发的过程中 ...

  10. Oracle数据库常用SQL函数

    1.SQL函数的概念: 函数一般是在数据上执行的,它给数据的转换和处理提供了方便.只是将取出的数据进行处理,不会改变数据库中的值.(类似于java中的方法但函数只是将数据库中的数据取出(复制)到函数中 ...