iphone判断当前网络连接类型

?Reachability只能区分出无网络、wifi和wwan(2G&2.5G&3G)类型的网络连接类型,只需重构networkStatusForFlags方法,即可详细区分出2G与3G网络 ?
?
1. [代码][C/C++]代码     
//Reachability.m 中 networkStatusForFlags 方法重构
- (NetworkStatus) networkStatusForFlags: (SCNetworkReachabilityFlags) flags
{
if ((flags & kSCNetworkReachabilityFlagsReachable) == 0)
{
return NotReachable;
}
    
BOOL retVal = NotReachable;

if ((flags & kSCNetworkReachabilityFlagsConnectionRequired) == 0)
{http://www.huiyi8.com/jiaoben/?
// if target host is reachable and no connection is required
//  then we‘ll assume (for now) that your on Wi-Fi
retVal = ReachableViaWiFi;
}

if ((((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) ||
         (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0))
{
        // ... and the connection is on-demand (or on-traffic) if the
        //     calling application is using the CFSocketStream or higher APIs
        if ((flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0)
        {jquery特效
            // ... and no [user] intervention is needed
            retVal = ReachableViaWiFi;
        }
    }
    
    if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN)
{
        if((flags & kSCNetworkReachabilityFlagsReachable) == kSCNetworkReachabilityFlagsReachable) {
            if ((flags & kSCNetworkReachabilityFlagsTransientConnection) == kSCNetworkReachabilityFlagsTransientConnection) {
                retVal = ReachableVia3G;
                if((flags & kSCNetworkReachabilityFlagsConnectionRequired) == kSCNetworkReachabilityFlagsConnectionRequired) {
                    retVal = ReachableVia2G;
                }
            }
        }
}
return retVal;
}

//检查当前网络连接是否正常
-(BOOL)connectedToNetWork
{
struct sockaddr_in zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;

SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
SCNetworkReachabilityFlags flags;

BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
CFRelease(defaultRouteReachability);

if (!didRetrieveFlags) {
printf("Error. Count not recover network reachability flags\n");
return NO;
}

BOOL isReachable = flags & kSCNetworkFlagsReachable;
BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
return (isReachable && !needsConnection) ? YES : NO;
}

//检查网络连接类型
-(void)checkNetworktype:(id)sender{
    NSString *connectionKind;
    if ([self connectedToNetWork]) {
hostReach = [Reachability reachabilityWithHostName:@"www.google.com"];
        switch ([hostReach currentReachabilityStatus]) {
            case NotReachable:
                connectionKind = @"没有网络链接";
                break;
            case ReachableViaWiFi:
                connectionKind = @"当前使用的网络类型是WIFI";
                break;
            case ReachableVia3G:
                connectionKind = @"当前使用的网络链接类型是WWAN(3G)";
                break;
            case ReachableVia2G:
                connectionKind = @"当前使用的网络链接类型是WWAN(2G)";
                break;    
            default:
                break;
        }
}else {
connectionKind = @"没有网络链接";
}
}

iphone判断当前网络连接类型

时间: 2024-10-09 02:24:54

iphone判断当前网络连接类型的相关文章

Android 判断当前网络连接类型

实际应用开发时,如果存在需要用户获取大量数据的情况,最好是先判断下网络类型,提示用户当前的网络类型,是否需要连接Wifi,etc.(手机流量太贵啦,当然土豪是无视这玩意的, (/ □ \)). 定义网络连接类型: public static final int NETTYPE_NULL = 0x00; //未连接网络 public static final int NETTYPE_WIFI = 0x01; //WIFI public static final int NETTYPE_MOBILE

Unity如何判断网络连接类型

今天遇到了一个问题,如何判断手机游戏当前的网络连接类型,是wifi还是234G? 起初准备在Android中写好插件供Unity调用,后来在网上浏览众神的帖子时,在csdn上看到了使用NetworkReachability的使用方法,于是自己的安卓机完美解决,屌丝惜肾无爱疯,希望有人可以试试在ios上是否同样可用. 上代码: [code]csharpcode: using UnityEngine; using System.Collections; public class Test : Mon

Unity判断网络连接类型

使用NetworkReachability判断手机游戏当前的网络连接类型,是wifi还是234G 1 using UnityEngine; 2 using System.Collections; 3 4 public class Test : MonoBehaviour { 5 6 string str; 7 // Use this for initialization 8 void Start () { 9 if (Application.internetReachability == Net

android当前网络连接类型判断

package net.nyist.netState; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; /**@author * *这是一个判断当前网络状态的工具类 * */ public class netState { /** * * @return 是否有活动的网络连接 */ public final boolean hasNetW

如何判断当前网络连接状态(网络是否正常)

众所周知,我们在开发APP时,涉及网络连接的时候,都会想着提前判断一下当前的网络连接状态,如果没有网络,就不再请求url,省去不必要的步骤,所以,这个如何判断?其实很简单. 前提:工程添加:SystemConfiguration.framework 然后在需要判断的类中包含头文件: #import "Reachability.h" 下面是我写的一个方法: #pragma mark - 检测网络连接 + (BOOL)isConnectionAvailable { BOOL isExist

VMWARE 之 网络连接类型的区别

一.连接类型 二.区别 Vmkernel 网络适配器 主要处理以下ESXI服务的流量,如:vSphere vMotion.iSCSI.NFS.FCoE.Fault Tolerance.vSAN 和主机管理.备注:此连接类型,必须绑定一个固定的IP地址 标准交换机的虚拟机端口组 主要用于:处理标准交换机上的虚拟机流量,通常用于处理虚拟机的流量,或各个业务系统的数据流量.备注:此连接类型,不需要绑定任何IP地址,网络管理员,通常把该物理岗卡设置为trunk模式,在该虚拟交揣机下的所有虚拟机,就可以使

Vmware workstation 网络连接类型

vmware workstation中使用频率比较高的三种网络连接方式,下面逐一总结一下 在vmware安装完成后,真实计算机上会创建两个虚拟网卡,默认情况下分别为VMnet1,VMnet8.如上图所见 桥接模式 虚拟机通过物理机的网卡进行通信,访问网络,并会占用IP地址,也可以访问同一网段的主机.(可以理解为就是一台真实主机) NAT模式 通过VMnet8网卡与物理机通信,不会占用本地的IP地址,虚拟机只能与物理机通信,无法与局域网内同网段的机器通信.如果物理机可以正确访问互联网,那么虚拟机也

delphi 判断前网络连接状态

function GetNetworkState: string; // 得到当前网络连接状态var NS: TNetworkState;begin NS := TNetworkState.Create; try if not NS.IsConnected then // 无网络 result := '0' else if NS.IsWifiConnected then // wifi result := '1' else if NS.IsMobileConnected then // 移动数据

判断手机网络连接状态

有时做Android开发需要用到网络来连接服务器,如果没有网络则进行提示.代码很简单,代码如下: public static boolean isNetworkAvailable(Context context) { ConnectivityManager mgr = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo[] info = mgr.getAllNetwo