在这里插入代码片
通过UIDevice类的对象,可以获取iOS设备如下的基本信息。
设备的名称,该名称可以在iOS设备的设置->通用->关于本机中设置,如shixin的iPhone6s
@property(nonatomic,readonly,strong) NSString *name;
设备的类型,例如.iPhone,iPod touch
@property(nonatomic,readonly,strong) NSString *model;
@property(nonatomic,readonly,strong) NSString *localizedModel; // localized version of model
操作系统版本号. 如:8.3, 9.2,10.0等
@property(nonatomic,readonly,strong) NSString *systemVersion;
每个iPhone或iPod Touch都有一个唯一的设备标识符(UUID),由40个字符或数字构成。通过UIDevice类可以获取到设备的UUID。
NSLog(@"identifierForVendor: %@", device.identifierForVendor.UUIDString);
通过UIDevice类,可以获取当前iOS设备电池的相关信息,包括当前电池的状态(充电中、未充电、已充满)以及电池的当前电量。
当需要获取iOS设备的电池信息时,需要首先打开batteryMonitoringEnabled属性,然后就可以通过batteryState以及batteryLevel来获取电池的状态信息。
是否开启电池监控,默认为NO
@property(nonatomic,getter=isBatteryMonitoringEnabled) BOOL batteryMonitoringEnabled ;
电池电量,取值0~1.0
@property(nonatomic,readonly) float batteryLevel ;
电池状态。其中,UIDeviceBatteryState有4种状态,分别为UIDeviceBatteryStateUnplugged(未充电)、UIDeviceBatteryStateCharging(充电中)、UIDeviceBatteryStateFull(已充满)、UIDeviceBatteryStateUnknown(未知状态)
@property(nonatomic,readonly) UIDeviceBatteryState batteryState;
在UIKit框架中,提供了用于电池状态变更时的通知(UIDeviceBatteryStateDidChangeNotification) , 当电池状态发生变更时,系统会给观察者发送通知。需要注意的是,在使用通知之前,需要预先在通知中心注册。
/获取电池信息
-(void)battery{
UIDevice *device=[UIDevice currentDevice];
//开启电池检测
device.batteryMonitoringEnabled=YES;
//注册通知,当电池状态改变时调用batteryStateChange方法
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(batteryStateChange) name:UIDeviceBatteryStateDidChangeNotification object:nil];
}
- (void)dealloc
{
//移除观察者
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
-(void)batteryStateChange{
UIDevice *device=[UIDevice currentDevice];
//获取当前电量
float batteryVolume=device.batteryLevel *100;
//计算电池电量百分比
NSString *batteryVolumeString=[NSString stringWithFormat:@"当前电量:%.0f%%",batteryVolume];
NSLog(@"%@",batteryVolumeString);
//根据电池状态切换时,给出提醒
switch (device.batteryState) {
case UIDeviceBatteryStateUnplugged:{
//提醒
NSString *string=[NSString stringWithFormat:@"未充电,%@",batteryVolumeString];
[self showAlert:string];
break;}
case UIDeviceBatteryStateCharging:{
//提醒
NSString *string=[NSString stringWithFormat:@"充电中,%@",batteryVolumeString];
[self showAlert:string];
break;}
case UIDeviceBatteryStateFull:{
//提醒
NSString *string=[NSString stringWithFormat:@"已充电,%@",batteryVolumeString];
[self showAlert:string];
break;}
case UIDeviceBatteryStateUnknown:{
[self showAlert:@"未知状态"];
break;
}
default:
break;
}
}
-(void)showAlert:(NSString *)string{
//警告框
UIAlertController *alert=[UIAlertController alertControllerWithTitle:@"时间" message:string preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *action=[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
[alert addAction:action];
[self presentViewController:alert animated:YES completion:nil];
}
在iPhone的正面顶部,提供了接近传感器。例如,在接听电话时,当用户的脸部接触手机顶部或者人为使用手指挡住iPhone顶部时,屏幕会自动的熄灭,从而避免误操作。通过UIDevice类中的proximityState属性可以获取当前接近传感器的状态。
在UIDevice类中,与接近传感器相关的属性如下所示。
接近传感器是否生效,默认情况下不生效
@property(nonatomic,getter=isProximityMonitoringEnabled) BOOL proximityMonitoringEnabled;
获取接近传感器的工作状态
@property(nonatomic,readonly) BOOL proximityState;
系统提供的内置通知,当传感器工作状态发送改变时会触发通知
UIKIT_EXTERN NSString *const UIDeviceProximityStateDidChangeNotification;
//接近传感器
-(void)proximity{
UIDevice *device=[UIDevice currentDevice];
//开启接近传感器
device.proximityMonitoringEnabled=YES;
//接近传感器通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(proximityStateChange) name:UIDeviceProximityStateDidChangeNotification object:nil];
}
-(void)proximityStateChange{
UIDevice *device=[UIDevice currentDevice];
if (device.proximityState==YES) {
NSLog(@"物体靠近");
}else{
NSLog(@"物体离开");
}
}
- (void)dealloc
{
//移除观察者
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
由于通过iPhone设备中的运动传感器,可以得到设备当前的加速度、磁力计以及陀螺仪数据,结合这些传感器提供的数据能够获取设备当前的方向信息。在UIDevice类中,对设备的方向信息进行了一次封装,不需要开发者通过计算传感器数据来获取设备朝向,而是直接通过UIDevice类中的orientation属性即可获取设备当前的朝向信息。
UIDevice类中,通过orientation属性可以获知设备六个方向的信息,除了横竖屏四个方向之外,还可以获取到正反放置的信息。
获取设备朝向信息
@property(nonatomic,readonly) UIDeviceOrientation orientation;
/*UIDeviceOrientation枚举类型*/
typedef NS_ENUM(NSInteger, UIDeviceOrientation) {
UIDeviceOrientationUnknown,
UIDeviceOrientationPortrait, // 竖屏,正常状态
UIDeviceOrientationPortraitUpsideDown, // 竖屏,倒置
UIDeviceOrientationLandscapeLeft, // 向左横屏
UIDeviceOrientationLandscapeRight, // 向右横屏
UIDeviceOrientationFaceUp, //正面朝上
UIDeviceOrientationFaceDown // 正面朝下
}
获取设备方向改变通知
UIKIT_EXTERN NSString *const UIDeviceOrientationDidChangeNotification;
当需要获取设备方向改变通知之前,需要提前调用beginGeneratingDeviceOrientationNotifications方法
-(void)beginGeneratingDeviceOrientationNotifications;
不需要调用设备方向改变通知时,调用该方法关闭通知
- (void)endGeneratingDeviceOrientationNotifications;
//方向传感器
-(void)orientation{
UIDevice *device=[UIDevice currentDevice];
//开启方向改变通知
[device beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChange) name:UIDeviceOrientationDidChangeNotification object:nil];
}
-(void)orientationChange{
UIDevice *device=[UIDevice currentDevice];
NSString *string;
switch (device.orientation) {
case UIDeviceOrientationPortrait:{
string= [NSString stringWithFormat:@"竖屏/正常"];
break;}
case UIDeviceOrientationPortraitUpsideDown:{
string = [NSString stringWithFormat:@"竖屏/倒置"];
break;}
case UIDeviceOrientationLandscapeLeft:{
string = [NSString stringWithFormat:@"横屏/左侧"];
break;}
case UIDeviceOrientationLandscapeRight:{
string = [NSString stringWithFormat:@"横屏/右侧"];
break;}
case UIDeviceOrientationFaceUp:{
string = [NSString stringWithFormat:@"正面朝上"];
break;}
case UIDeviceOrientationFaceDown:{
string = [NSString stringWithFormat:@"正面朝下"];
break;}
default:{
string = [NSString stringWithFormat:@"未知朝向"];
break;}
}
NSLog(@"%@",string);
}
- (void)dealloc
{
//移除观察者
[[NSNotificationCenter defaultCenter] removeObserver:self];
}