iOS-系统相关参数(版本、机型设备等)

1、app版本号

 

 

NSString * localVersionShort = [[NSBundlemainBundle]infoDictionary objectForKey:@"CFBundleShortVersionString"];

 

 

2、app名称

 

 NSString *app_Name = [[NSBundlemainBundle]infoDictionary objectForKey:@"CFBundleDisplayName"];

 

 

 

3、app build版本 

 

NSString *app_Name = [[NSBundlemainBundle]infoDictionary objectForKey:@"CFBundleVersion"];

 

 

 

4、设备信息

 

唯一标示符    NSLog(@"uniqueIdentifier: %@", [[UIDevicecurrentDevice]identifierForVendor]);

设备名称   NSLog(@"name: %@", [[UIDevicecurrentDevice]name]);

系统名字    NSLog(@"systemName: %@", [[UIDevicecurrentDevice]systemName]);

系统版本号    NSLog(@"systemVersion: %@", [[UIDevicecurrentDevice]systemVersion]);

类型,模拟器,真机    NSLog(@"model: %@", [[UIDevicecurrentDevice]model]);

本地模式    NSLog(@"localizedModel: %@", [[UIDevicecurrentDevice]localizedModel]);

获取设备方向

@property(nonatomic,readonly) UIDeviceOrientation orientation;       

是否开启监测电池状态 开启后 才可以正常获取电池状态

@property(nonatomic,getter=isBatteryMonitoringEnabled) 

BOOL batteryMonitoringEnabled NS_AVAILABLE_IOS(3_0);  // default is NO

获取电池状态

@property(nonatomic,readonly) UIDeviceBatteryState batteryState NS_AVAILABLE_IOS(3_0);  

获取电量

@property(nonatomic,readonly) float  batteryLevel NS_AVAILABLE_IOS(3_0);

设备方向的枚举如下:

typedef NS_ENUM(NSInteger, UIDeviceOrientation) 

{    

   UIDeviceOrientationUnknown,    UIDeviceOrientationPortrait,            // home键在下

    UIDeviceOrientationPortraitUpsideDown,  // home键在上

    UIDeviceOrientationLandscapeLeft,       // home键在右

    UIDeviceOrientationLandscapeRight,      // home键在左

    UIDeviceOrientationFaceUp,              // 屏幕朝上

    UIDeviceOrientationFaceDown             // 屏幕朝下

};

电池状态的枚举如下:

typedef NS_ENUM(NSInteger, UIDeviceBatteryState) {

    UIDeviceBatteryStateUnknown,

    UIDeviceBatteryStateUnplugged,   // 放电状态

    UIDeviceBatteryStateCharging,    // 充电未充满状态

    UIDeviceBatteryStateFull,        // 充电已充满

};

下面的方法关于监测屏幕状态:

//获取是否开启屏幕状态更改通知

@property(nonatomic,readonly,getter=isGeneratingDeviceOrientationNotifications) BOOL generatesDeviceOrientationNotifications;

//开始监测通知

- (void)beginGeneratingDeviceOrientationNotifications;     

//结束监测通知

- (void)endGeneratingDeviceOrientationNotifications;


相关通知:

//设备方向改变时发送的通知

UIKIT_EXTERN NSString *const UIDeviceOrientationDidChangeNotification;

//电池状态改变时发送的通知

UIKIT_EXTERN NSString *const UIDeviceBatteryStateDidChangeNotification   NS_AVAILABLE_IOS(3_0);

//电量改变时发送的通知

UIKIT_EXTERN NSString *const UIDeviceBatteryLevelDidChangeNotification   NS_AVAILABLE_IOS(3_0);

//距离传感器状态改变时发送的通知

UIKIT_EXTERN NSString *const UIDeviceProximityStateDidChangeNotification NS_AVAI

 

5、获得当前设备的型号

 

 

 

#include <sys/types.h>

#include <sys/sysctl.h>

#define CTL_HW 6

#define HW_MACHINE 1

#pragma mark 获得当前设备的型号

/**

 *  @author zm

 *

 *  @brief 获得当前设备的型号(型号跟踪到iPhone6S/iPad4/iPod5G)

 *

 *  @return 设备型号字符串

 */

- (NSString *)f_getCurrentDeviceModel

{

    int _mib[2];

    size_t len;

    char *machine;

    

    _mib[0] =CTL_HW;

    _mib[1] =HW_MACHINE;

    sysctl(_mib,2,NULL, &len,NULL,0);

    machine = malloc(len);

    sysctl(_mib,2, machine, &len,NULL,0);

    

    NSString *platform = [NSStringstringWithCString:machineencoding:NSASCIIStringEncoding];

    free(machine);

    

    if ([platformisEqualToString:@"iPhone1,1"])   return@"iPhone 1G";

    if ([platformisEqualToString:@"iPhone1,2"])   return@"iPhone 3G";

    if ([platformisEqualToString:@"iPhone2,1"])   return@"iPhone 3GS";

    if ([platformisEqualToString:@"iPhone3,1"])   return@"iPhone 4";

    if ([platformisEqualToString:@"iPhone3,3"])   return@"Verizon iPhone 4";

    if ([platformisEqualToString:@"iPhone4,1"])   return@"iPhone 4S";

    if ([platformisEqualToString:@"iPhone5,1"])   return@"iPhone 5 (GSM)";

    if ([platformisEqualToString:@"iPhone5,2"])   return@"iPhone 5 (GSM+CDMA)";

    if ([platformisEqualToString:@"iPhone5,3"])   return@"iPhone 5c (GSM)";

    if ([platformisEqualToString:@"iPhone5,4"])   return@"iPhone 5c (GSM+CDMA)";

    if ([platformisEqualToString:@"iPhone6,1"])   return@"iPhone 5s (GSM)";

    if ([platformisEqualToString:@"iPhone6,2"])   return@"iPhone 5s (GSM+CDMA)";

    if ([platformisEqualToString:@"iPhone7,1"])   return@"iPhone 6 Plus";

    if ([platformisEqualToString:@"iPhone7,2"])   return@"iPhone 6";

    if ([platformisEqualToString:@"iPhone8,1"])   return@"iPhone 6s Plus";

    if ([platformisEqualToString:@"iPhone8,2"])   return@"iPhone 6s";

    if ([platformisEqualToString:@"iPod1,1"])     return@"iPod Touch 1G";

    if ([platformisEqualToString:@"iPod2,1"])     return@"iPod Touch 2G";

    if ([platformisEqualToString:@"iPod3,1"])     return@"iPod Touch 3G";

    if ([platformisEqualToString:@"iPod4,1"])     return@"iPod Touch 4G";

    if ([platformisEqualToString:@"iPod5,1"])     return@"iPod Touch 5G";

    if ([platformisEqualToString:@"iPad1,1"])     return@"iPad";

    if ([platformisEqualToString:@"iPad2,1"])     return@"iPad 2 (WiFi)";

    if ([platformisEqualToString:@"iPad2,2"])     return@"iPad 2 (GSM)";

    if ([platformisEqualToString:@"iPad2,3"])     return@"iPad 2 (CDMA)";

    if ([platformisEqualToString:@"iPad2,4"])     return@"iPad 2 (WiFi)";

    if ([platformisEqualToString:@"iPad2,5"])     return@"iPad Mini (WiFi)";

    if ([platformisEqualToString:@"iPad2,6"])     return@"iPad Mini (GSM)";

    if ([platformisEqualToString:@"iPad2,7"])     return@"iPad Mini (GSM+CDMA)";

    if ([platformisEqualToString:@"iPad3,1"])     return@"iPad 3 (WiFi)";

    if ([platformisEqualToString:@"iPad3,2"])     return@"iPad 3 (GSM+CDMA)";

    if ([platformisEqualToString:@"iPad3,3"])     return@"iPad 3 (GSM)";

    if ([platformisEqualToString:@"iPad3,4"])     return@"iPad 4 (WiFi)";

    if ([platformisEqualToString:@"iPad3,5"])     return@"iPad 4 (GSM)";

    if ([platformisEqualToString:@"iPad3,6"])     return@"iPad 4 (GSM+CDMA)";

    if ([platformisEqualToString:@"iPad4,1"])     return@"iPad Air (WiFi)";

    if ([platformisEqualToString:@"iPad4,2"])     return@"iPad Air (Cellular)";

    if ([platformisEqualToString:@"iPad4,4"])     return@"iPad mini 2G (WiFi)";

    if ([platformisEqualToString:@"iPad4,5"])     return@"iPad mini 2G (Cellular)";

    if ([platformisEqualToString:@"i386"])        return@"Simulator";

    if ([platformisEqualToString:@"x86_64"])      return@"Simulator";

    return platform;

}

 

 

 

 

 

顺便附带 UIDevice、UIApplication、UIScreen讲解

 

 

UIDevice

 

 

通过UIDevice可以获取一个描述当前设备的单例。你可以获取以下设备相关的信息:设备名,设备型号,操作系统名称和版本。

我们还可以通过UIDevice实例检测设备的变化,比方横屏还是竖屏。Orientation属性代表了设备的方位,也可以通过注册UIDeviceOrientationDidChangeNotification通知消息来实时获取方位变化。在要使用这些数据前,必须先通过beginGeneratingDeviceOrientationNotifications方法调用开启该功能,然后调用endGeneratingDeviceOrientationNotifications禁用该功能。

此外,我们还能通过该实例获取关于电量状态变化的信息和通知信息(batteryState,batteryLevel)。还有就是关于接近传感数据(proximityState),接近传感器用于侦测用户是否拿着手机并紧贴在脸庞。同样的,只有在必要的时候才开启以上两项功能。

从iOS4.2开始,我们可以使用playInputClick实例方法响应用户自定义的键盘操作。

 

UIApplication

 

UIApplication是一个控制和协调运行中应用的中心。任何一个应用有且仅有一个UIApplication(或是一个UIApplication的一个子类)。一旦应用启动,UIApplicationMain就会被调用。在应用的某个任务中,这个函数会创建一个UIApplication单例。因此,你可以使用sharedApplication来获取该对象。

UIApplication的一个重要作用,就是它是所有用户操作事件传递链的开始。它也将由UIControl类传递给它的动作信息,进一步分发合适的目标类。此外,UIApplication对象维护了所有在当前APP中打开的windows的列表。应用对象一般都会有一个代理,用于处理应用运行时信息,如:应用开启,内存不足,应用关闭。因此应用有机会处理这些重要的信息。

APP之前可以通过openURL方法进行协作,如处理资源类似email和图像文件。比方,一个应用打开了调用了email URL,使用这个方法可以打开邮件客户端并显示信息。

UIApplication接口允许你管理设备相关的行为,具体如下:

在设备方位变化时,控制应用的反应;

临时阻断触摸事件。

开启和关闭接近传感器。

注册远程通知消息。

触发撤销或重做UI (applicationSupportsShakeToEdit)

检测一个安装好的应用是否可以打开一个URL(canOpenURL:).

在应用退到后台前,让它在后台还能再运行一下,完成一些收尾工作。

调度或中止本地通知。

协同处理接收到的远程控制事件。

重新恢复应用的状态。

绝大多数的应用不需要创建UIApplication子类,只需要使用UIApplication的代理函数管理系统和应用之间的交互。

如果你需要实现自定义一个事件或动作分发系统时,你才需要创建UIApplication子类。这样的话,你需要重写sendEvent或sendAction方法来自定义分发机制。我们尽量避免这种情况。

 

UIScreen

 

UIScreen对象定义了与硬件显示屏相关的属性。iOS设备有个主屏,外加0个或多个附屏。这个类可以获取所有与设备相关的屏幕。Screen类定义了bounds,以及其他属性如对比度。

在iOS8之前,screen的bounds属性一定反映了屏幕在竖屏情况的尺寸。旋转屏幕成为横屏或倒立情况都不会改变bounds属性。从iOS8开始,bounds属性参考设备方位的变化。依赖屏幕尺寸的应用可以使用fixedCoordinateSpace属性来修正点在坐标中的位置。

当用户连接或断开屏幕时,系统会发送通知给应用。利用代理可以长时间的监控通知信息。连接和断开的通知可能随时发生,也许这时你的应用在后台被挂起。在应用挂起时,通知会保存在队列中,直到你的app’在前台或后台又开始运行时。

但系统通知外部屏连接上时,你可以随意使用这个额外的屏幕空间。为使用这个空间,需要创建uiwindow对象,为新的screen进行赋值,显示到window上。屏幕支持多种分辨率,其中使用不同的像素宽高比。屏幕对象使用最普通的屏幕模式,你也可以设置适合你的模式。比方,如果你在游戏应用中使用OpenGL。

 

还可参考博主转载的文章ios开发-获取手机相关信息

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值