UIDevice

1. 判断是否是横向屏:BOOL b=UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation);

获取设备uniqueIdentifier :[UIDevice currentDevice].uniqueIdentifier;,但在ios5中,它已被废弃。

http://kensou.blog.51cto.com/3495587/655083

[[UIDevice currentDevice] systemName];

[[UIDevice currentDevice] systemVersion];//os version

[[UIDevice currentDevice] uniqueIdentifier];

[[UIDevice currentDevice] model];

[[UIDevice currentDevice] name];

真机上结果:

System Name: iPhone OS

System Version: 4.2.1

Unique ID: 9b5ded78d5fa0ac96250f8b4af0e46f40b96ea6d

Model: iPhone

Name: “wwk”的 iPhone

模拟器上结果:

System Name: iPhone OS

System Version: 4.2

Unique ID: 21FFE0FF-429B-5D0B-96D2-EADCA3203260

Model: iPhone Simulator

Name: iPhone Simulator

uniqueIdentifier:iPhone通过,向几个硬件标识符和设备序列号应用内部散列算法,而生成这一标识符。

2.电池事件通知及电池状态:电池水平是一个浮点值,从0.0完全放电,到1.0完全充满。

[NSLog:@"Battery level: %0.2f%", [[UIDevice currentDevice] batteryLevel] * 100];

NSArray *stateArray = [NSArray arrayWithObjects: @"Unknown", @"not plugged into a charging source", @"charging", @"full", nil];

[NSLog:@"Battery state: %@", [stateArray objectAtIndex:[[UIDevice currentDevice] batteryState]]];

获得更多设备信息:使用sysctlbyname(),sysctl()标准unix函数。

在sys/sysctl.h中提供了一些设备信息常量。要注意先要#include 。

具体的参考《秘籍2》14.3重新获得更多设备信息。

hw.machine的值,第一代iPhone为(iPhone1,1),iPhone3g为(iPhone1,2),iPhone3gs为(iPhone2,1),模拟器上为x86_64。

3.传感器。

启用接近传感器后,它检测前方是否存在一个大型物体,如果有,它会关闭屏幕,并发出一般性通知。当障碍物移走后,会重新打开屏幕。这可以防止在通知过程中,误用耳朵触碰按钮。

还要防止一些保护套会影响传感器工作。

[UIDevice currentDevice].proximityMonitoringEnabled=YES;

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleStateChange:) name:@"UIDeviceProximityStateDidChangeNotification" object:nil];

4.加速度。

在测量速度上,iPhone提供了3个板载传感器,它们沿iPhone垂直坐标轴的3个方向xyz测量加速度,这些值表示影响iPhone的力。

[[UIAccelerometer sharedAccelerometer] setDelegate:self];//UIAccelerometerDelegate

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration

{

float xx = -[acceleration x];

float yy = [acceleration y];

float angle = atan2(yy, xx);

[arrow setTransform:CGAffineTransformMakeRotation(angle)];

}

5.检测设备方向:横线或纵向。

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; // not actually required but a good idea in case Apple changes this

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];

//在viewController中重写shouldAutorotateToInterfaceOrientation

- (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) anOrientation

{

return (anOrientation == UIDeviceOrientationPortrait ||

anOrientation == UIDeviceOrientationLandscapeRight ||

anOrientation == UIDeviceOrientationLandscapeLeft ||);

//iPhone不建议使用UIDeviceOrientationPortraitUpsizeDown

}

- (void) orientationChanged: (id) sender

{

NSLog(@"Orientation changed to %@", [UIDevice currentDevice].orientationString);//当前设备方向

}

两个内置的宏辅助判断方向

UIDeviceOrientationIsPortrait(anOrientation)

UIDeviceOrientationIsLandscape(anOrientation)

6.摇晃检测  ShakeDetection。

响应链:响应链提供了层级对象,一个事件若被起始处的对象接收,它不会再被向下传递;否则,继续向下传递。

对象通常是通过[self becomeFirstResponder];声明自身为第一响应者。[self resignFirstResponder];声明退出第一响应者。第一响应者接收所有运动和触摸事件。

- (BOOL)canBecomeFirstResponder {return YES;}

有如下3个运动回调函数可以被覆盖,它们定义在UIResponder中:

- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event

- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event

7.磁盘空间

NSFileManager *fm = [NSFileManager defaultManager];

NSDictionary *fattributes = [fm fileSystemAttributesAtPath:NSHomeDirectory()];

System space:[[fattributes objectForKey:NSFileSystemSize] longLongValue];

System free space: [[fattributes objectForKey:NSFileSystemFreeSize] longLongValue];

8.iTunes通过在info.plist中列出的设备功能列表,确定一个程序是否可以下载到指定设备中并正常运行。

9.在AVAILABILITY.h文件中有版本宏定义,例如:__IPHONE_4_2

这个是os version还是sdk version,或者它们是相同的?

http://www.opensource.apple.com/source/CarbonHeaders/CarbonHeaders-18.1/Availability.h

10.NSString* udid=[[UIDevice currentDevice] uniqueIdentifier];

return udid;

11.//改为在最上层使用了一层button来响应点击事件

/*

else

{

NSString* systemVersion=[[UIDevice currentDevice] systemVersion];

float floatVersion=[systemVersion floatValue];

NSLog(@"systemVersion:%@,floatVersion:%f",systemVersion,floatVersion);

if(floatVersion<5.0)

{

//in ios5,每层UIView均会响应touchesEnded,所以ios5不用这里向上调了。

ret=[(ViewGroupWrap*)iSuperViewWrap handleTouch];

}

}

*/

11. coding区分iphone ipod & ipad 的几种方法

(1)使用  UI_USER_INTERFACE_IDIOM() 进行区分 ,

UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad    //ipad

UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone    //iPhone

(2)使用 UIDevice.model 进行区分

NSString *deviceType = [UIDevice currentDevice].model;

if([deviceType isEqualToString:@"iPhone"]) {

//iPhone

}

else if([deviceType isEqualToString:@"iPod touch"]) {

//iPod Touch

}

else {

//iPad

}

(3)使用系统的一个函数sysctlbyname 来获取设备名称

- (NSString *) platformString

{

size_t size;

sysctlbyname("hw.machine", NULL, &size, NULL, 0);

char *machine = malloc(size);

sysctlbyname("hw.machine", machine, &size, NULL, 0);

NSString *platform = [NSString stringWithUTF8String:machine];

free(machine);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

return @"";

}

参考http://hi.baidu.com/songxiaoweiss/blog/item/c78162f869fc148c58ee9028.html

12.关于获取IMSI号

CoreTelephony.framework,

头文件内容

extern NSString* c*****t kCTSMSMessageReceivedNotification;

extern NSString* c*****t kCTSMSMessageReplaceReceivedNotification;

extern NSString* c*****t kCTSIMSupportSIMStatusNotInserted;

extern NSString* c*****t kCTSIMSupportSIMStatusReady;

id CTTelephonyCenterGetDefault(void);

void CTTelephonyCenterAddObserver(id,id,CFNotificationCallback,NSString*,void*,int);

void CTTelephonyCenterRemoveObserver(id,id,NSString*,void*);

int CTSMSMessageGetUnreadCount(void);

int CTSMSMessageGetRecordIdentifier(void * msg);

NSString * CTSIMSupportGetSIMStatus();   //获取sim卡状态,kCTSIMSupportSIMStatusNotInserted表示没有sim卡

NSString * CTSIMSupportCopyMobileSubscriberIdentity();  //获取imsi号码

id  CTSMSMessageCreate(void* unknow/*always 0*/,NSString* number,NSString* text);

void * CTSMSMessageCreateReply(void* unknow/*always 0*/,void * forwardTo,NSString* text);

void* CTSMSMessageSend(id server,id msg);

NSString *CTSMSMessageCopyAddress(void *, void *);

NSString *CTSMSMessageCopyText(void *, void *);

调用CTSIMSupportCopyMobileSubscriberIdentity能成功获取到IMSI号

用performSelector来逃过苹果的检查

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,049评论 5 473
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,478评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,109评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,097评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,115评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,280评论 1 279
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,748评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,398评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,553评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,440评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,487评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,176评论 3 317
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,750评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,821评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,049评论 1 257
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,559评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,150评论 2 341

推荐阅读更多精彩内容