【最新iOS获取设备信息】:UIDevice,NSBundle,NSLocale

iOS开发中获取设备的信息指的是像设备号、应用名称以及国家语言等非用户隐私信息,这些信息多数我们都可以在开发时在Xcode工程中就可以看到,同时我们可以利用提供的UIDevice,NSBundle,NSLocale三个类来获取一些我们开发中常用到的信息。


【最新iOS获取设备信息】:UIDevice,NSBundle,NSLocale_第1张图片

UIDevice

UIDevice可以帮我们获取移动设备的基本信息:设备名称、设备模式、系统名称、系统版本、设备唯一标识符以及设备方向和设备电量等等。

其中的设备方向是个枚举变量UIDeviceOrientation(TV中禁止使用),源代码中的定义为:

typedef NS_ENUM(NSInteger, UIDeviceOrientation) {
    UIDeviceOrientationUnknown,
    UIDeviceOrientationPortrait,            // 设备垂直,home键在下   
    UIDeviceOrientationPortraitUpsideDown,  // 设备翻转,home键在上
    UIDeviceOrientationLandscapeLeft,       // 设备水平,home件在左
    UIDeviceOrientationLandscapeRight,      // 设备水平,home件在右
    UIDeviceOrientationFaceUp,              // 设备平放,面朝上    
    UIDeviceOrientationFaceDown             // 设备平放,面朝下
} __TVOS_PROHIBITED;

UIDevice中的信息在SDK源码中定义如下:

@property(nonatomic,readonly,strong) NSString    *name;              // e.g. "My iPhone"
@property(nonatomic,readonly,strong) NSString    *model;             // e.g. @"iPhone", @"iPod touch"
@property(nonatomic,readonly,strong) NSString    *localizedModel;    // 本地化的设备模式
@property(nonatomic,readonly,strong) NSString    *systemName;        // e.g. @"iOS"
@property(nonatomic,readonly,strong) NSString    *systemVersion;     // e.g. @"4.0"
@property(nonatomic,readonly) UIDeviceOrientation orientation __TVOS_PROHIBITED;       
// 返回当前的设备方向,如果还没有产生设备方向通知(设备方向未发生改变)的话返回UIDeviceOrientationUnknown

@property(nullable, nonatomic,readonly,strong) NSUUID      *identifierForVendor NS_AVAILABLE_IOS(6_0);      
// 可用于唯一标识设备的一个UUID

测试实例代码:

// 1.UIDevice
UIDevice *device = [UIDevice currentDevice]; // 获取当前的device

/** 设备基本信息 **/
NSString *name = [device name];// @"iPhone 5S"
NSString *model = [device model];// @"iPhone"
NSString *localizedModel = [device localizedModel];// @"iPhone"
NSString *systemName = [device systemName];// @"iPhone OS"
NSString *systemVersion = [device systemVersion];// @"9.3.2"

/** 设备方向 **/
UIDeviceOrientation orientation = [device orientation]; // UIDeviceOrientationUnknown

/** 设备电量 **/
device.batteryMonitoringEnabled = YES; // 开启电量监听
float batteryLevel = [UIDevice currentDevice].batteryLevel; // 0~1.0对应电量0~100%,-1.0表示电量未知
device.batteryMonitoringEnabled = NO; // 关闭电量监听

/** 设备ID **/
NSUUID *identifierForVendor = [device identifierForVendor];

NSBundle

我们主要用到类NSBundle的mainbundle,一个包含了nib文件,编译代码等资源的目录,这个目录下有一个infoDictionary,通过这个信息字典我们可以获取有关当前应用的一些基本信息,像应用名称、应用版本等等。

测试示例代码:

// 2.NSBundle
NSDictionary *info_dic = [[NSBundle mainBundle] infoDictionary]; // 获取当前设备的信息字典
NSDictionary *localized_info_dic = [[NSBundle mainBundle] localizedInfoDictionary]; // 本地化的信息字典

NSString *app_name = [info_dic objectForKey:@"CFBundleDisplayName"]; // 应用名称 @"Demo"
NSString *app_version = [info_dic objectForKey:@"CFBundleShortVersionString"]; // 应用版本 @"1.0"
NSString *app_build_version = [info_dic objectForKey:@"CFBundleVersion"]; // 应用build版本 @"1"

NSLocale

顾名思义,NSLocale这个类是用于获取一些本地化信息的,例如:国家、时间日期和语言等等。这里主要展示常用到的获取国家和语言代码的方法。

测试示例代码:

// 3.NSLocale
// 3.1 获取偏好语言
NSArray *languageArray = [NSLocale preferredLanguages];
NSString *language = [languageArray objectAtIndex:0]; // @"en_HK"

// 3.2 获取本地化国家或地区代号
NSLocale *locale = [NSLocale currentLocale]; // 当前本地化对象
NSString *country = [locale localeIdentifier]; // @"en_HK"

你可能感兴趣的:(iOS沉思录)