《The iPhone Developer's Cookbook》
没什么好说的,直接上代码:
1、UIDevice+Reachability.h:
#import <UIKit/UIKit.h> @interface UIDevice (Reachability) + (BOOL) networkAvailable; + (BOOL) activeWLAN; + (BOOL) activeWWAN; @end
2、UIDevice+Reachability.m:
#import <SystemConfiguration/SystemConfiguration.h> #include <arpa/inet.h> #include <netdb.h> #include <net/if.h> #include <ifaddrs.h> #import "UIDevice-Reachability.h" @implementation UIDevice (Reachability) SCNetworkConnectionFlags connectionFlags; + (NSString *) localWiFiIPAddress { BOOL success; struct ifaddrs * addrs; const struct ifaddrs * cursor; success = getifaddrs(&addrs) == 0; if (success) { cursor = addrs; while (cursor != NULL) { // the second test keeps from picking up the loopback address if (cursor->ifa_addr->sa_family == AF_INET && (cursor->ifa_flags & IFF_LOOPBACK) == 0) { NSString *name = [NSString stringWithUTF8String:cursor->ifa_name]; if ([name isEqualToString:@"en0"]) // Wi-Fi adapter return [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)cursor->ifa_addr)->sin_addr)]; } cursor = cursor->ifa_next; } freeifaddrs(addrs); } return nil; } #pragma mark Checking Connections + (void) pingReachabilityInternal { BOOL ignoresAdHocWiFi = NO; struct sockaddr_in ipAddress; bzero(&ipAddress, sizeof(ipAddress)); ipAddress.sin_len = sizeof(ipAddress); ipAddress.sin_family = AF_INET; ipAddress.sin_addr.s_addr = htonl(ignoresAdHocWiFi ? INADDR_ANY : IN_LINKLOCALNETNUM); // Recover reachability flags SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (struct sockaddr *)&ipAddress); BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &connectionFlags); CFRelease(defaultRouteReachability); if (!didRetrieveFlags) printf("Error. Could not recover network reachability flags\n"); } + (BOOL) networkAvailable { [self pingReachabilityInternal]; BOOL isReachable = ((connectionFlags & kSCNetworkFlagsReachable) != 0); BOOL needsConnection = ((connectionFlags & kSCNetworkFlagsConnectionRequired) != 0); return (isReachable && !needsConnection) ? YES : NO; } + (BOOL) activeWWAN { if (![self networkAvailable]) return NO; return ((connectionFlags & kSCNetworkReachabilityFlagsIsWWAN) != 0); } + (BOOL) activeWLAN { return ([UIDevice localWiFiIPAddress] != nil); } @end
相关推荐
### UIDevice扩展知识点详解 #### 一、概述 在iOS开发过程中,经常需要获取设备的各种信息,例如系统版本、设备类型、电池状态等。通过扩展`UIDevice`类,可以方便地实现这些功能。这份文档提供了`UIDevice`类的...
4. **网络状态**:虽然`UIDevice`本身不直接提供网络状态的检查,但可以通过其扩展方法获取网络连接类型,例如是否连接到WiFi或者蜂窝数据。 5. **硬件加速功能**:`hasAccelerometer`和`hasGyro`属性可以判断设备...
UIDevice类是一个单例,其唯一的实例( [UIDevice currentDevice] ) 代表了当前使用的设备。 通过这个实例,可以获得设备的相关信息(包括系统名称,版本号,...也可以使用使用该实例来监测设备的特征(比如物理方向)
UIDevice是苹果提供的一种系统服务接口,允许开发者获取设备的各种信息,包括硬件配置、电池状态、网络状态等。 首先,我们需要导入UIKit框架,因为UIDevice类就包含在这个框架中: ```swift import UIKit ``` ...
UIDeviceComplete 填充缺失部分的UIDevice扩展。这个库是关于什么的? UIDeviceComplete是一个iOS库,旨在作为UIDevice扩展的集合,它提供UIDevice当前缺少的功能,例如确定您拥有哪个iOS设备(即iPhone X,iPhone 8...
官方提供的UiAutomator、UiDevice和Instrumentation是三个非常重要的工具,用于进行UI层面的自动化测试。下面将详细介绍这三个工具及其应用。 首先,`UiAutomator`是Android SDK中的一个测试框架,主要用于测试跨...
`Reachability`是苹果官方提供的一个库,用于检测设备的网络连接状态,包括是否连接到互联网、网络类型(如WiFi或蜂窝数据)以及网络是否可用。通过集成`Reachability`,开发者可以及时了解用户的网络环境,从而做出...
然而,原始的`UIDevice`类在使用时可能较为繁琐,需要多次调用不同的方法来获取完整的设备信息。针对这种情况,开发者们通常会进行封装,以简化代码并提高效率。`DeviceKit`就是这样一个开源项目,它是对`UIDevice`...
这个"IOS应用源码——获取当前硬件可用内存的例子UIDevice.zip"提供了一个简单的示例,演示了如何利用Apple的UIKit框架中的UIDevice类来获取iOS设备的当前可用内存。下面将详细介绍这个知识点及其相关背景。 首先,...
在iOS应用开发中,`UIDevice`类是获取设备相关信息...无论是获取设备基本信息,还是监测电池状态,甚至利用传感器数据,`UIDevice`都是实现这些功能的基石。理解并熟练运用这些方法,对于开发高质量的iOS应用至关重要。
在Swift编程语言中,`UIDevice`是Apple提供的一个核心框架类,用于获取关于设备的信息,如设备模型、系统版本等。然而,由于`UIDevice`是引用类型(即类),在某些场景下可能会带来一些问题,比如可能导致意外的副...
这个压缩包"IOS应用源码之获取当前硬件可用内存的例子UIDevice .zip"提供了一个示例代码,用于演示如何利用苹果的UIKit框架中的UIDevice类来获取iOS设备的当前可用内存。这篇文章将深入探讨这个知识点,并详细解释其...
这个压缩包"IOS应用源码Demo-获取当前硬件可用内存的例子UIDevice-毕设学习.zip"提供了一个实例,教你如何利用`UIDevice`类来获取设备的可用内存信息,这对于进行性能优化和调试非常有用。下面将详细介绍这一知识点...
UIDevice-DisplayName displayName()返回iOS设备的友好名称,其中不包括特定的类型信息(即“ iPhone X”) displayName(includeType: true)返回iOS设备的友好名称,其中还包括设备类型(例如“ iPhone X(GSM)”)...
在iOS开发中,`uidevice-extension`涉及到一个关键的话题,即如何获取移动设备的IMEI(国际移动设备识别码)地址。IMEI是每个手机独一无二的标识符,通常用于跟踪和识别设备。然而,苹果公司对隐私保护有着严格的...
这些信息可以通过苹果的Foundation框架中的类如UIDevice来获取。在iOS助手的源码中,可能有专门的模块用于处理这些信息的获取和解析。 为了实现这些功能,开发者需要掌握Objective-C或Swift编程语言,并熟悉Apple的...
"MGCopyAnswer-From-UIDevice"项目就是针对这种情况,它展示了如何利用非公开的UIDevice方法来获取iPhone或iPad的私有设备信息。 首先,我们要明确的是,使用私有API是违反Apple的App Store审核指南的,这可能导致...
在iOS中,我们可以利用`UIDevice`类来获取这些信息。`UIDevice`是苹果提供的一个核心框架类,它提供了关于当前设备的基本信息。要获取设备型号,可以使用`model`属性,这个属性返回的是设备的本地化型号名称。例如,...
通过扩展`UIDevice`,我们可以增加自定义的方法来识别设备类型,如iPhone、iPad、iPod touch等。这通常涉及到检查设备的模型标识符和屏幕尺寸。例如,可以创建一个名为 `isiPhone` 的分类方法,检查设备的型号是否...