Android 实用工具网络篇(一)

废话不说,直接上代码

<pre name="code" class="java">

public class NetworkUtil {

/** 网络状态未初始化。请调用init(Context)方法 */

public static final int NETWORK_UNKNOWN = -1;

/** 网络状态不可用(wifi和GPRS均未启动和连接) */

public static final int NETWORK_UNAVAILABLE = 0;

/** wifi已连接 */

public static final int NETWORK_WIFI_CONNECTED = 1;

/** wifi未启动,GPRS已连接 */

public static final int NETWORK_GPRS_CONNECTED = 2;

/** wifi已启动,但未连接任意热点 */

public static final int NETWORK_WIFI_ENABLED = 3;

/** 切换了wifi接入点 */

public static final int NETWORK_ACTION_WIFI_POINT_CHANGED = 4;

/** 启动了WiFi的情况下,转换到已连接WiFi的状态 */

public static final int NETWORK_ACTION_WIFI_ENABLED_TO_CONNECTED = 5;

/** WiFi失去了连接,但仍处于启动状态 */

public static final int NETWORK_ACTION_WIFI_CONNECTED_TO_ENABLED = 6;

public static final int NETWORK_ACTION_UNKNOWN = -1;

public static final int NETWORK_ACTION_TURN_TO_AVAILABLE = 0;

public static final int NETWORK_ACTION_TURN_TO_UNAVAILABLE = 1;

public static final int NETWORK_ACTION_GPRS_TO_WIFI = 2;

public static final int NETWORK_ACTION_WIFI_TO_GPRS = 3;

private static int networkState = NETWORK_UNKNOWN;

// 在notifyNetworkStateChanged方法中使用。保存当前WiFi连接的名称,以便检查是否已切换了WiFi接入点

private static String currentSSID = null;

/**

* 获取当前的网络连接状态。

*

* @return NetworkUtil.NETWORK_UNAVAILABLE,

*         NetworkUtil.NETWORK_WIFI_CONNECTED ,

*         NetworkUtil.NETWORK_GPRS_CONNECTED, NetworkUtil.

*         NETWORK_WIFI_ENABLED

*/

public static int getNetworkState() {

if (networkState == NETWORK_UNKNOWN) {

init();

}

return networkState;

}

public static void init() {

Context context = MainApplication.getContext();

ConnectivityManager connectivityManager = (ConnectivityManager) context

.getSystemService(Context.CONNECTIVITY_SERVICE);

WifiManager wifiManager = (WifiManager) context

.getSystemService(Context.WIFI_SERVICE);

State wifiState = null;

if (connectivityManager.getNetworkInfo(

ConnectivityManager.TYPE_WIFI) != null) {

wifiState = connectivityManager.getNetworkInfo(

ConnectivityManager.TYPE_WIFI).getState();

}

State gprsState = null;

if (connectivityManager.getNetworkInfo(

ConnectivityManager.TYPE_MOBILE) != null) {

gprsState = connectivityManager.getNetworkInfo(

ConnectivityManager.TYPE_MOBILE).getState();

}

// if (wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLED) {

// if (wifiState == State.CONNECTED) {

// networkState = NETWORK_WIFI_CONNECTED;

// } else {

// networkState = NETWORK_WIFI_ENABLED;

// }

// } else {

// if (gprsState == State.CONNECTED) {

// networkState = NETWORK_GPRS_CONNECTED;

// } else {

// networkState = NETWORK_UNAVAILABLE;

// }

// }

if (wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLED) {

if (wifiState == State.CONNECTED) {

networkState = NETWORK_WIFI_CONNECTED;

} else {

if (gprsState == State.CONNECTED) {

networkState = NETWORK_GPRS_CONNECTED;

} else {

networkState = NETWORK_WIFI_ENABLED;

}

}

} else {

if (gprsState == State.CONNECTED) {

networkState = NETWORK_GPRS_CONNECTED;

} else {

networkState = NETWORK_UNAVAILABLE;

}

}

}

/** 发送网络状态发生了改变的广播。 */

public static void notifyNetworkStateChanged(Context context,

int stateBefore, int stateAfter) {

// Log.e("notifyNetworkStateChanged", "stateBefore = " + stateBefore

// + ", stateAfter = " + stateAfter);

int code = NETWORK_ACTION_UNKNOWN;

if (stateBefore == NETWORK_UNAVAILABLE && stateAfter != NETWORK_UNKNOWN

&& stateAfter != NETWORK_UNAVAILABLE) { // 网络状态不可用转化为可用

code = NETWORK_ACTION_TURN_TO_AVAILABLE;

} else if (stateBefore != NETWORK_UNKNOWN

&& stateBefore != NETWORK_UNAVAILABLE

&& stateAfter == NETWORK_UNAVAILABLE) { // 网络状态可用转化为不可用

code = NETWORK_ACTION_TURN_TO_UNAVAILABLE;

} else if (stateBefore == NETWORK_GPRS_CONNECTED

&& (stateAfter == NETWORK_WIFI_CONNECTED || stateAfter == NETWORK_WIFI_ENABLED)) { // GPRS转化为WIFI

code = NETWORK_ACTION_GPRS_TO_WIFI;

} else if ((stateBefore == NETWORK_WIFI_CONNECTED || stateBefore == NETWORK_WIFI_ENABLED)

&& stateAfter == NETWORK_GPRS_CONNECTED) { // WIFI转化为GPRS

code = NETWORK_ACTION_WIFI_TO_GPRS;

} else if (stateBefore == NETWORK_WIFI_CONNECTED

&& stateAfter == NETWORK_WIFI_CONNECTED) { // 未关闭WiFi,只是切换了WiFi接入点

WifiManager wifiManager = (WifiManager) context

.getSystemService(Context.WIFI_SERVICE);

// 获取WiFi接入点的名称

String ssid = wifiManager.getConnectionInfo().getSSID();

if (currentSSID != null && !currentSSID.equals(ssid)) {

code = NETWORK_ACTION_WIFI_POINT_CHANGED;

}

} else if (stateBefore == NETWORK_WIFI_ENABLED

&& stateAfter == NETWORK_WIFI_CONNECTED) { // WiFi连接了WiFi接入点

code = NETWORK_ACTION_WIFI_ENABLED_TO_CONNECTED;

} else if (stateBefore == NETWORK_WIFI_CONNECTED

&& stateAfter == NETWORK_WIFI_ENABLED) { // WiFi与接入点失去了连接

code = NETWORK_ACTION_WIFI_CONNECTED_TO_ENABLED;

}

// 如果是WiFi连接,则保存当前的ssid,以便检查WiFi连接是否已更换。

if (stateAfter == NETWORK_WIFI_CONNECTED) {

WifiManager wifiManager = (WifiManager) context

.getSystemService(Context.WIFI_SERVICE);

String ssid = wifiManager.getConnectionInfo().getSSID();

currentSSID = ssid; // 保存当前的SSID

}

if (code != NETWORK_ACTION_UNKNOWN) {

Intent intent = new Intent();

intent.setAction("com.suntek.mway.mobilepartner.NETWORK_STATE_CHANGED");

intent.putExtra("code", code);

context.sendBroadcast(intent);

}

}

/** 返回当前是否有可用网络 */

public static boolean isNetworkAvailable() {

ConnectivityManager connMgr = (ConnectivityManager) MainApplication.getContext()

.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();

return (networkInfo != null && networkInfo.isConnected());

}

/** 返回wifi信号是否为弱 */

public static boolean isWifiRSSIWeak(Context context) {

int rssi = getWifiRssi(context);

// 0 ~ -50 信号最强,-50 ~ -70 信号一般,-70 ~ -100 信号最差

if (rssi < -70) { // 信号最差

return true;

} else if (rssi < -60) { // 信号一般

return false;

} else { // 信号最强

return false;

}

}

/** 返回wifi信号是否为弱 */

public static boolean isWifiRSSIWeak(int rssi) {

// 0 ~ -50 信号最强,-50 ~ -70 信号一般,-70 ~ -100 信号最差

if (rssi < -70) { // 信号最差

return true;

} else if (rssi < -60) { // 信号一般

return false;

} else { // 信号最强

return false;

}

}

/** 返回wifi信号强度等级 0-2 */

public static int getWifiRSSILevel(int rssi) {

// 0 ~ -50 信号最强,-50 ~ -70 信号一般,-70 ~ -100 信号最差

if (rssi < -70) { // 信号最差

return 0;

} else if (rssi < -50) { // 信号一般

return 1;

} else { // 信号最强

return 2;

}

}

/** 获取Wifi信号强度 */

public static int getWifiRssi(Context context) {

WifiManager wifiManager = (WifiManager) context

.getSystemService(Context.WIFI_SERVICE);

WifiInfo wifiInfo = wifiManager.getConnectionInfo();

return wifiInfo.getRssi();

}

/** 判断当前是否移动网络 */

public static boolean isUseChinaMobile(Context context) {

if (!ServiceManager.isPhoneInService()) {

return false;

}

TelephonyManager telManager = (TelephonyManager) context

.getSystemService(Context.TELEPHONY_SERVICE);

String operator = telManager.getSimOperator();

if (operator != null) {

LogHelper.trace("operator=" + operator);

if (operator.equals("46000") || operator.equals("46002")) {

// 中国移动

return true;

} else if (operator.equals("46001")) {

// 中国联通

return false;

} else if (operator.equals("46003")) {

// 中国电信

return false;

}

}

return false;

}

/** 判断当前是否wifi网络 */

public static boolean isConnectWifi() {

Context context = MainApplication.getContext();

boolean isWifiConnect = false;

ConnectivityManager cm = (ConnectivityManager) context

.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo[] networkInfos = cm.getAllNetworkInfo();

for (int i = 0; i < networkInfos.length; i++) {

if (networkInfos[i].getState() == NetworkInfo.State.CONNECTED) {

if (networkInfos[i].getType() == ConnectivityManager.TYPE_MOBILE) {

// isWifiConnect = false;

}

if (networkInfos[i].getType() == ConnectivityManager.TYPE_WIFI) {

isWifiConnect = true;

}

}

}

return isWifiConnect;

}

}

				
时间: 2024-10-02 10:15:02

Android 实用工具网络篇(一)的相关文章

快速Android开发系列网络篇之Android-Async-Http

快速Android开发系列网络篇之Android-Async-Http 转:http://www.cnblogs.com/angeldevil/p/3729808.html 先来看一下最基本的用法 AsyncHttpClient client = new AsyncHttpClient(); client.get("http://www.google.com", new AsyncHttpResponseHandler() { @Override public void onSucce

快速Android开发系列网络篇之Retrofit

Retrofit是一个不错的网络请求库,用官方自己的介绍就是: A type-safe REST client for Android and Java 看官网的介绍用起来很省事,不过如果不了解它是怎么实现的也不太敢用,不然出问题了就不知道怎么办了.这几天比较闲就下下来看了一下,了解一下大概实现方法,细节就不追究了.先来看一个官网的例子,详细说明去网官看 简单示例 首先定义请求接口,即程序中都需要什么请求操作 public interface GitHubService { @GET("/use

快速Android开发系列网络篇之Volley

Volley是Google推出的一个网络请求库,已经被放到了Android源码中,地址在这里,先看使用方法 RequestQueue mRequestQueue = Volley.newRequestQueue(context); JsonObjectRequest req = new JsonObjectRequest(URL, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONO

Android实用工具类-GrallyAndPhotoUtils图片处理工具

目录 目录 概述 前言 拍照 创建存储拍照图片的文件 调用系统拍照程序 读取相册图片 获取返回URI中的图片路径 统一的回调处理 图片缩略图加载 加载流程 计算缩略图比例 缩略图加载 源码 图片加载结果 示例GIF 概述 此类是用于简便调用系统拍照及打开相册选择图片.通用于多种机型.(亲测魅族MX4,三星note 2,三星note 3) 前言 在执行拍照和打开相册之前,我们需要注意一下. 由于Android开放的系统,很多手机厂商是定制自己的系统的,那么就存在一个问题.尽管大部分时候拍照或者打开

Android 实用工具Hierarchy Viewer实战

在Android的SDK工具包中,有很多十分有用的工具,可以帮助程序员开发和测试Android应用程序,大大提高其工作效率.其中的一款叫Hierachy Viewer的可视化调试工具,可以很方便地在开发者设计,调试和调整界面时,提高用户的开发效率.本文将以一个实际例子讲解如何使用该款工具运用在Android的开发过程中.本文的读者对象为具备初步Android知识的用户. 步骤1 设计界面 在我们的这个例子中,有三个不同的界面,以方便我们演示使用Hierarchy Viewer.每一个界面都使用了

Android 快速开发框架网络篇-Android-Async-Http

一.基本用法 AsyncHttpClient client = new AsyncHttpClient(); client.get("http://www.google.com", new AsyncHttpResponseHandler() { @Override public void onSuccess(String response) { System.out.println(response); } }); 通过AsyncHttpClient类的实例就可以执行网络请求,包括g

Android开源项目第二篇——工具库篇

本文为那些不错的Android开源项目第二篇——开发工具库篇,主要介绍常用的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多媒体相关及其他. Android开源项目系列汇总已完成,包括: Android开源项目第一篇——个性化控件(View)篇 Android开源项目第二篇——工具库篇 Android开源项目第三篇——优秀项目篇 Android开源项目第四篇——开发及测试工具篇 Android开源项目第五篇——优秀个人和

Android性能调优篇之Hierarchy Viewer工具的使用

详细内容请查看我的简书地址:Android性能调优篇之Hierarchy Viewer工具的使用 或者我的个人博客地址:Android性能调优篇之Hierarchy Viewer工具的使用

Android之开源项目工具库篇

本文转自:http://www.trinea.cn/android/android-open-source-projects-dev-lib/ 本文中你可以找到那些精美App中各种有特性的View,如Gmail的左滑出菜单.Google plus的卡片式ListView,Pinterest的瀑布流,微信的左滑删除,微博的个页面下拉刷新等等. 通过这些项目你可以大幅度减少不必要的开发而将精力放在更重要的地方. 一.依赖注入DI 通过依赖注入减少View.服务.资源简化初始化,事件绑定等重复繁琐工作