简介
在iOS项目中难免会涉及到获取当前iPhone设备的各种信息, 包括设备名称,硬件信息,系统版本,屏幕尺寸和分辨率, 运营商,电池情况, 检测SIM卡等等.
尤其是获取设备唯一标示, 使用的地方比较多, 但方法可行的并不多, 获取唯一标示方法将在以后的文章中说明.
获取设备相关信息
//设备相关信息的获取
NSString *strName = [[UIDevice currentDevice] name];
NSLog(@"设备名称:%@", strName);//eg: "My iPhone"
NSString *strModel = [[UIDevice currentDevice] model];
NSLog(@"设备模式:%@", strModel);// eg: @"iPhone", @"iPod touch"
NSString *strLocModel = [[UIDevice currentDevice] localizedModel];
NSLog(@"本地设备模式:%@", strLocModel);// localized version of model
NSString *strSysName = [[UIDevice currentDevice] systemName];
NSLog(@"系统名称:%@", strSysName);// eg: @"iOS"
NSString *strSysVersion = [[UIDevice currentDevice] systemVersion];
NSLog(@"系统版本号:%@", strSysVersion);// eg: @"4.0"
NSString *strId = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
NSLog(@"设备唯一标识:%@", strId);//UUID,5.0可用, 6.0后可以获取, 但每次启动应用 UUID 会不一样, 基本就废了
获取硬件信息
NSString *hardware = [DeviceUtil hardwareDescription];
NSLog(@"%@",hardware);
获取屏幕尺寸、宽度、高度
/** 获取屏幕尺寸、宽度、高度 */
CGSize size = [UIScreen mainScreen].bounds.size;
//图片的倍数
NSInteger multiple = [UIScreen mainScreen].scale;
//获取设备分辨率
CGSize resolution = [[UIScreen mainScreen] currentMode].size;
NSLog(@"%f,%f,%ld",size.width,resolution.width,multiple);
获取网络状态
- (void)getNetworkReachabilityByAFN
{
//AFNetworking通过呼叫某个服务器来监测网络状态,因此建议呼叫大型门户网站
//创建一个请求队列的管理对象
AFHTTPRequestOperationManager * manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:@"www.baidu.com"]];
//监控网络状态
[manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusNotReachable:
NSLog(@"网络未连接");
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"3G网络");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"WIFI网络");
break;
default:
break;
}
}];
//启动监控
[manager.reachabilityManager startMonitoring];
}
- (void)getNetworkReachability
{
Reachability *reach = [Reachability reachabilityWithHostName:@"www.apple.com"];
switch([reach currentReachabilityStatus])
{
case NotReachable: //没有连接上
//do something
break;
case ReachableViaWiFi: //通过wifi连接
//do something
break;
case ReachableViaWWAN: //通过GPRS连接
//do something
break;
default: <span style="white-space:pre"> </span>//未知情况
//do something
break;
}
}
}
获取当前信号强弱
这个貌似没有给出官方的api,但是网上有人说可以用私有的api实现,但是通不过appStore的审核,方法如下:
利用linux下动态库显式调用api的函数。先包含头文件 #import <dlfcn.h>
- (int) getSignalLevel
{
voidvoid *libHandle = dlopen("/System/Library/Frameworks/CoreTelephony.framework/CoreTelephony",RTLD_LAZY);//获取库句柄
int (*CTGetSignalStrength)(); //定义一个与将要获取的函数匹配的函数指针
CTGetSignalStrength = (int(*)())dlsym(libHandle,"CTGetSignalStrength"); //获取指定名称的函数
if(CTGetSignalStrength == NULL)
return -1;
else{
int level = CTGetSignalStrength();
dlclose(libHandle); //切记关闭库
return level
}
}
获取电池情况
-(NSString*) getBatteryState
{
UIDevice *device = [UIDevice currentDevice];
if (device.batteryState == UIDeviceBatteryStateUnknown) {
return @"UnKnow";
}else if (device.batteryState == UIDeviceBatteryStateUnplugged){
return @"Unplugged";
}else if (device.batteryState == UIDeviceBatteryStateCharging){
return @"Charging";
}else if (device.batteryState == UIDeviceBatteryStateFull){
return @"Full";
}
return nil;
}
//获取电量的等级,0.00~1.00
-(float) getBatteryLevel
{
return [UIDevice currentDevice].batteryLevel;
}
打印结果
检测设备是否安装sim卡
- (BOOL)isSIMInstalled
{
CTTelephonyNetworkInfo *networkInfo = [[CTTelephonyNetworkInfo alloc] init];
CTCarrier *carrier = [networkInfo subscriberCellularProvider];
if (!carrier.isoCountryCode) {
NSLog(@"No sim present Or No cellular coverage or phone is on airplane mode.");
return NO;
}
return YES;
}