【IOS開(kāi)發(fā)基礎(chǔ)系列】設(shè)備信息專(zhuān)題

????????iOS的APP的應(yīng)用開(kāi)發(fā)的過(guò)程中,有時(shí)為了bug跟蹤或者獲取用反饋的需要自動(dòng)收集用戶設(shè)備嘁锯、系統(tǒng)信息请毛、應(yīng)用信息等等志鞍,這些信息方便開(kāi)發(fā)者診斷問(wèn)題,當(dāng)然這些信息是用戶的非隱私信息方仿,是通過(guò)開(kāi)發(fā)api可以獲取到的固棚。那么通過(guò)那些api可以獲取這些信息呢,iOS的SDK中提供了UIDevice仙蚜,NSBundle此洲,NSLocale。

1 UIDevice類(lèi)

????????UIDevice提供了多種屬性委粉、類(lèi)函數(shù)及狀態(tài)通知呜师,幫助我們?nèi)轿涣私庠O(shè)備狀況。從檢測(cè)電池電量到定位設(shè)備與臨近感應(yīng)贾节,UIDevice所做的工作就是為應(yīng)用程序提供用戶及設(shè)備的一些信息汁汗。UIDevice類(lèi)還能夠收集關(guān)于設(shè)備的各種具體細(xì)節(jié),例如機(jī)型及iOS版本等栗涂。其中大部分屬性都對(duì)開(kāi)發(fā)工作具有積極的輔助作用知牌。下面的代碼簡(jiǎn)單的使用UIDevice獲取手機(jī)屬性。

1.1 獲取設(shè)備基本信息

?????UIDevice *device_=[[UIDevice alloc] init];

? ? NSLog(@"設(shè)備所有者的名稱--%@",device_.name);

? ? NSLog(@"設(shè)備的類(lèi)別-----%@",device_.model);

? ? NSLog(@"設(shè)備的的本地化版本-%@",device_.localizedModel);

? ? NSLog(@"設(shè)備運(yùn)行的系統(tǒng)---%@",device_.systemName);

? ? NSLog(@"當(dāng)前系統(tǒng)的版本---%@",device_.systemVersion);

? ? NSLog(@"設(shè)備唯一識(shí)別碼-----%@",device_.identifierForVendor.UUIDString);

? ? //得到設(shè)備屏幕高度

? ? float screenHeight=[UIScreen mainScreen].bounds.size.height;


打印結(jié)果如下

2013-03-08 17:31:13.944

WaiMai[14982:907] 設(shè)備所有者的名稱--“zhangqingfeng” iPhone

2013-03-08 17:31:13.951

WaiMai[14982:907] 設(shè)備的類(lèi)別-----iPhone

2013-03-08 17:31:13.953

WaiMai[14982:907] 設(shè)備的的本地化版本-iPhone

2013-03-08 17:31:13.957

WaiMai[14982:907] 設(shè)備運(yùn)行的系統(tǒng)---iPhone OS

2013-03-08 17:31:13.961

WaiMai[14982:907] 當(dāng)前系統(tǒng)的版本---6.0.1

2013-03-08 17:31:13.969

WaiMai[14982:907] 設(shè)備識(shí)別碼-----7305AFE8-66C0-4C6B-8173-1AA61E9F837D

2013-03-08 17:31:14.178 WaiMai[14982:1703]?


1.2 獲取設(shè)備的唯一標(biāo)示符

NSString?*identifier?=?[[[UIDevice?currentDevice]?identifierForVendor]?UUIDString];??


1.3 獲取當(dāng)前屏幕分辨率的信息

CGRect?rect?=?[[UIScreen?mainScreen]?bounds];

CGFloat?scale?=?[[UIScreen?mainScreen].scale];

CGFloat?width?=?rect.size.width?*?scale;

CGFloat?height?=?rect.size.height?*?scale;??


1.4 設(shè)備震動(dòng)

????????需要加入AudioToolbox.framework,導(dǎo)入頭文件#import<AudioToolbox/AudioToolbox.h>斤程,在需要震動(dòng)的地方添加代碼:

AudioServicesPlaySystemSound?(?kSystemSoundID_Vibrate)?;

????????但是貌似這個(gè)不支持傳入震動(dòng)時(shí)間和模式角寸,自己去控制吧。

1.5 獲取電池的相關(guān)信息

@implementation?BatterMonitor

//獲取電池當(dāng)前的狀態(tài)忿墅,共有4種狀態(tài)

- (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;

}

//獲取電量的等級(jí)扁藕,0.00~1.00

- (float)?getBatteryLevel?{

????return?[UIDevice?currentDevice].batteryLevel;

}

-(void)?getBatteryInfo

{

????NSString*state?=?getBatteryState();

????floatlevel?=?getBatteryLevel()*100.0;

????//yourControlFunc(state,?level);??//寫(xiě)自己要實(shí)現(xiàn)的獲取電量信息后怎么處理

}

//打開(kāi)對(duì)電量和電池狀態(tài)的監(jiān)控,類(lèi)似定時(shí)器的功能

-(void)?didLoad

{

????[[UIDevice?currentDevice]?setBatteryMonitoringEnable:YES];

????[[NSNotificationCenter?defaultCenter]?addObserver:?self?selector:@selector(getBatteryInfo:)?name:UIDeviceBatteryStateDidChangeNotification?object: nil];

????[[NSNotificationCenter?defaultCenter]?addObserver:self?selector:@selector(getBatteryInfo:)?name:UIDeviceBatteryLevelDidChangeNotification?object:nil];

????[NSTimer?scheduledTimerWithTimeInterval:0.5f?target:?self?selector:@selector(getBatteryInfo:)?userInfo: nil?repeats:YES];

}

@end??


2 運(yùn)營(yíng)商信息CoreTelephony

2.1 獲取運(yùn)行商的名稱

需要先導(dǎo)入頭文件

#import <CoreTelephony/CTCarrier.h>

#import <CoreTelephony/CTTelephonyNetworkInfo.h>


創(chuàng)建對(duì)象

CCTelephonyNetworkInfo?*info?=?[[CTTelephonyNetworkInfo?alloc]?init];

CTCarrier?*carrier?=?[info?subscriberCellularProvider];

NSString?*mCarrier?=?[NSString?stringWithFormat:@"%@",[carrier?carrierName]];


2.2 獲取當(dāng)前網(wǎng)絡(luò)的類(lèi)型

ios7之后可以按照以下方式獲取疚脐。方便而且類(lèi)型多

NSString?*mConnectType?=?[[NSString?alloc]?initWithFormat: @"%@", info.currentRadioAccessTechnology];


類(lèi)型有以下:

????1亿柑、CTRadioAccessTechnologyGPRS?????????//介于2G和3G之間,也叫2.5G?,過(guò)度技術(shù)??

????2亮曹、CTRadioAccessTechnologyEdge?????????//EDGE為GPRS到第三代移動(dòng)通信的過(guò)渡橄杨,EDGE俗稱2.75G?

????3秘症、CTRadioAccessTechnologyWCDMA

????4、CTRadioAccessTechnologyHSDPA????????????//亦稱為3.5G(3?G)

????5式矫、CTRadioAccessTechnologyHSUPA????????????//3G到4G的過(guò)度技術(shù)

????6乡摹、CTRadioAccessTechnologyCDMA1x???????//3G????

????7、CTRadioAccessTechnologyCDMAEVDORev0????//3G標(biāo)準(zhǔn)

????8采转、CTRadioAccessTechnologyCDMAEVDORevA

????9聪廉、CTRadioAccessTechnologyCDMAEVDORevB

????10、CTRadioAccessTechnologyeHRPD????????//電信使用的一種3G到4G的演進(jìn)技術(shù)故慈,?3.75G?????

????11板熊、CTRadioAccessTechnologyLTE??????????//接近4G?


????ios7之前的話apple給我們提供了Reachability來(lái)獲取。

????首先要導(dǎo)入SystemConfiguration.framework察绷,把下載下來(lái)的Reachability.h和Reachability.m加進(jìn)項(xiàng)目中干签。

Reachability?*reach?=?[Reachability?reachabilityWithHostName:@"www.apple.com"];

switch ([reach?currentReachabilityStatus])

{

????case?NotReachable:??//沒(méi)有連接上

????????//do?something

????????break;

????case?ReachableViaWiFi:??//通過(guò)wifi連接

????????//do?something

????????break;

????case?ReachableViaWWAN:??//通過(guò)GPRS連接

????????//do?something

????????break;

????default:????????//未知情況

????????//do?something

????????break;

}

http://blog.csdn.net/qijianli/article/details/19922653?這個(gè)博客還說(shuō)了其它的方法,不過(guò)因?yàn)槭钦{(diào)用私有API拆撼,所以沒(méi)有采用容劳。

2.3 獲取當(dāng)前信號(hào)的強(qiáng)弱

????????這個(gè)貌似沒(méi)有給出官方的api,但是網(wǎng)上有人說(shuō)可以用私有的api實(shí)現(xiàn)闸度,但是通不過(guò)appStore的審核竭贩,方法如下:

????????利用linux下動(dòng)態(tài)庫(kù)顯式調(diào)用api的函數(shù)。先包含頭文件#import<dlfcn.h>

-(int)?getSignalLevel

{

????void?*libHandle?=?dlopen("/System/Library/Frameworks/CoreTelephony.framework/CoreTelephony",RTLD_LAZY);//獲取庫(kù)句柄

????int?(*CTGetSignalStrength)();?//定義一個(gè)與將要獲取的函數(shù)匹配的函數(shù)指針

????CTGetSignalStrength?=?(int(*)())dlsym(libHandle,"CTGetSignalStrength");?//獲取指定名稱的函數(shù)

????if (CTGetSignalStrength?==?NULL)

????????return -1;

????else{

????????int level?=?CTGetSignalStrength();

????????dlclose(libHandle);?//切記關(guān)閉庫(kù)

????????return level

????}

}??


3 NSBundle

????????bundle是一個(gè)目錄,其中包含了程序會(huì)使用到的資源.這些資源包含了如圖像,聲音,編譯好的代碼,nib文件(用戶也會(huì)把bundle稱為plug-in). 對(duì)應(yīng)bundle,cocoa提供了類(lèi)NSBundle.一個(gè)應(yīng)用程序看上去和其他文件沒(méi)有什么區(qū)別.但是實(shí)際上它是一個(gè)包含了nib文件,編譯代碼,以及其他資源的目錄.我們把這個(gè)目錄叫做程序的main bundle莺禁。通過(guò)這個(gè)路徑可以獲取到應(yīng)用的信息留量,例如應(yīng)用名、版本號(hào)等哟冬。

//app應(yīng)用相關(guān)信息的獲取

NSDictionary?*dicInfo?=?[[NSBundle?mainBundle]?infoDictionary];

//????CFShow(dicInfo);

NSString?*strAppName?=?[dicInfo?objectForKey:@"CFBundleDisplayName"];

NSLog(@"App應(yīng)用名稱:%@",?strAppName);


NSString?*strAppVersion?=?[dicInfo?objectForKey:@"CFBundleShortVersionString"];

NSLog(@"App應(yīng)用版本:%@",?strAppVersion);


NSString?*strAppBuild?=?[dicInfo?objectForKey:@"CFBundleVersion"];

NSLog(@"App應(yīng)用Build版本:%@",?strAppBuild);?


4 NSLocale

????????NSLocale可以獲取用戶的本地化信息設(shè)置楼熄,例如貨幣類(lèi)型,國(guó)家柒傻,語(yǔ)言孝赫,數(shù)字较木,日期格式的格式化红符,提供正確的地理位置顯示等等。下面的代碼獲取機(jī)器當(dāng)前語(yǔ)言和國(guó)家代碼伐债。

//Getting?the?User’s?Language

NSArray?*languageArray?=?[NSLocale?preferredLanguages];

NSString?*language?=?[languageArray?objectAtIndex:0];

NSLog(@"語(yǔ)言:%@",?language);//en


NSLocale?*locale?=?[NSLocale?currentLocale];

NSString?*country?=?[locale?localeIdentifier];

NSLog(@"國(guó)家:%@",?country);?//en_US?


5 參考鏈接

ios獲取設(shè)備系統(tǒng)信息

http://blog.sina.com.cn/s/blog_9693f61a01017h0k.html

iOS學(xué)習(xí)筆記(十三)——獲取手機(jī)信息(UIDevice预侯、NSBundle、NSLocale)

http://blog.csdn.net/xyz_lmn/article/details/8968196

ios獲取設(shè)備信息總結(jié)

http://blog.csdn.net/decajes/article/details/41807977

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIDevice_Class/Reference/UIDevice.html

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSBundle_Class/Reference/Reference.html

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSLocale_Class/Reference/Reference.html

http://mobile.tutsplus.com/tutorials/iphone/ios-sdk-accessing-device-data-with-uidevice-and-nslocale/

iOS獲取運(yùn)營(yíng)商信息(IMSI)

http://blog.csdn.net/liu537192/article/details/49512957

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末峰锁,一起剝皮案震驚了整個(gè)濱河市萎馅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌虹蒋,老刑警劉巖糜芳,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件飒货,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡峭竣,警方通過(guò)查閱死者的電腦和手機(jī)塘辅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)皆撩,“玉大人扣墩,你說(shuō)我怎么就攤上這事】竿蹋” “怎么了呻惕?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)滥比。 經(jīng)常有香客問(wèn)我亚脆,道長(zhǎng),這世上最難降的妖魔是什么盲泛? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任型酥,我火速辦了婚禮,結(jié)果婚禮上查乒,老公的妹妹穿的比我還像新娘弥喉。我一直安慰自己,他們只是感情好玛迄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布由境。 她就那樣靜靜地躺著,像睡著了一般蓖议。 火紅的嫁衣襯著肌膚如雪虏杰。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,208評(píng)論 1 299
  • 那天勒虾,我揣著相機(jī)與錄音纺阔,去河邊找鬼。 笑死修然,一個(gè)胖子當(dāng)著我的面吹牛笛钝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播愕宋,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼玻靡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了中贝?” 一聲冷哼從身側(cè)響起囤捻,我...
    開(kāi)封第一講書(shū)人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎邻寿,沒(méi)想到半個(gè)月后蝎土,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體视哑,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年誊涯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了黎炉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡醋拧,死狀恐怖慷嗜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情丹壕,我是刑警寧澤庆械,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站菌赖,受9級(jí)特大地震影響缭乘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜琉用,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一堕绩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧邑时,春花似錦奴紧、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至浅浮,卻和暖如春沫浆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背滚秩。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工专执, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人郁油。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓本股,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親已艰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子痊末,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容