1. 程式人生 > >iOS獲取裝置全域性資訊方法總結(如訊號,電量,裝置標示)

iOS獲取裝置全域性資訊方法總結(如訊號,電量,裝置標示)

iOS獲取裝置全域性資訊方法總結

為系統建立一個隨機的標示符

(NSString*) createUUID  
{  
    NSString *id = [[NSUserDefaults standardUserDefaults] objectForKey:@"UUID"];    //獲取標識為"UUID"的值  
    if(id == nil)  
    {  
        if([[[UIDevice currentDevice] systemVersion] floatValue] > 6.0)  
        {  
            NSString
*identifierNumber = [[NSUUID UUID] UUIDString]; //ios 6.0 之後可以使用的api [[NSUserDefaults standardUserDefaults] setObject:identifierNumber forKey:@"UUID"]; //儲存為UUID [[NSUserDefaults standardUserDefaults] synchronize]; } else{ CFUUIDRef uuid = CFUUIDCreate(NULL
); CFStringRef uuidString = CFUUIDCreateString(NULL, uuid); //ios6.0之前使用的api NSString *identifierNumber = [NSString stringWithFormat:@"%@", uuidString]; [[NSUserDefaults standardUserDefaults] setObject:identifierNumber forKey:@"UUID"]; [[NSUserDefaults
standardUserDefaults] synchronize]; CFRelease(uuidString); CFRelease(uuid); } return [[NSUserDefaults standardUserDefaults] [email protected]"UUID"]; } return id; }

1、獲取裝置的資訊

UIDevice *device = [[UIDevice alloc] int];  
NSString *name = device.name;       //獲取裝置所有者的名稱  
NSString *model = device.name;      //獲取裝置的類別  
NSString *type = device.localizedModel; //獲取本地化版本  
NSString *systemName = device.systemName;   //獲取當前執行的系統  
NSString *systemVersion = device.systemVersion;//獲取當前系統的版本  

獲取裝置的唯一標示符

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

4、獲取當前螢幕解析度的資訊

CGRect rect = [[UIScreen mainScreen] bounds];  
CGFloat scale = [[UIScreen mainScreen].scale];  
CGFloat width = rect.size.width * scale;  
CGFloat height = rect.size.height * scale;  

5、獲取運營商的資訊
需要先匯入標頭檔案

#import <CoreTelephony/CTCarrier.h>  
#import <CoreTelephony/CTTelephonyNetworkInfo.h>

建立物件

CCTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init];  
CTCarrier *carrier = [info subscriberCellularProvider];  
NSString *mCarrier = [NSString stringWithFormat:@"%@",[carrier carrierName]];  

獲取當前網路的型別
ios7之後可以按照以下方式獲取。方便而且型別多

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

型別有以下:

CTRadioAccessTechnologyGPRS         //介於2G和3G之間,也叫2.5G ,過度技術    
CTRadioAccessTechnologyEdge         //EDGE為GPRS到第三代行動通訊的過渡,EDGE俗稱2.75G   
CTRadioAccessTechnologyWCDMA           
CTRadioAccessTechnologyHSDPA            //亦稱為3.5G(3?G)  
CTRadioAccessTechnologyHSUPA            //3G到4G的過度技術  
CTRadioAccessTechnologyCDMA1x       //3G      
CTRadioAccessTechnologyCDMAEVDORev0    //3G標準  
CTRadioAccessTechnologyCDMAEVDORevA    
CTRadioAccessTechnologyCDMAEVDORevB    
CTRadioAccessTechnologyeHRPD        //電信使用的一種3G到4G的演進技術, 3.75G       
CTRadioAccessTechnologyLTE          //接近4G   

ios7之前的話apple給我們提供了Reachability來獲取。
首先要匯入SystemConfiguration.framework,把下載下來的Reachability.h和Reachability.m加進專案中(Reachability.h和Reachability.m見之前的部落格,自己寫了一個demo,可以下載下來用)

Reachability *reach = [Reachability reachabilityWithHostName:@"www.apple.com"];  
switch([reach currentReachabilityStatus])  
{  
    case NotReachable:  //沒有連線上  
        //do something  
        break;  
    case ReachableViaWiFi:  //通過wifi連線  
        //do something  
        break;  
    case ReachableViaWWAN:  //通過GPRS連線  
        //do something  
        break;  
    default:    <span style="white-space:pre">    </span>//未知情況  
        //do something  
        break;  
}  

6、獲取當前訊號的強弱
這個貌似沒有給出官方的api,但是網上有人說可以用私有的api實現,但是通不過appStore的稽核,方法如下:
利用Linux下動態庫顯式呼叫api的函式。先包含標頭檔案 #import <dlfcn.h>

-(int) getSignalLevel  
{  
void *libHandle = dlopen("/System/Library/Frameworks/CoreTelephony.framework/CoreTelephony",RTLD_LAZY);//獲取庫控制代碼  
int (*CTGetSignalStrength)(); //定義一個與將要獲取的函式匹配的函式指標  
CTGetSignalStrength = (int(*)())dlsym(libHandle,"CTGetSignalStrength"); //獲取指定名稱的函式  

if(CTGetSignalStrength == NULL)  
    return -1;  
else{  
    int level = CTGetSignalStrength();  
    dlclose(libHandle); //切記關閉庫  
    return level;  
    }  
}  

7、裝置震動
需要加入AudioToolbox framework,匯入標頭檔案 #import <AudioToolbox/AudioToolbox.h>
在需要震動的地方新增程式碼:

AudioServicesPlaySystemSound ( kSystemSoundID_Vibrate) ; 

但是貌似這個不支援傳入震動時間和模式,自己去控制吧。

8、獲取電池的相關資訊

@implementation BatterMonitor  
//獲取電池當前的狀態,共有4種狀態  
-(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;   
}   
//獲取電量的等級,0.00~1.00  
-(float) getBatteryLevel {    
    return [UIDevice currentDevice].batteryLevel;  
}   

-(void) getBatteryInfo  
{  
    NSString *state = getBatteryState();  
    float level = getBatteryLevel()*100.0;  
    //yourControlFunc(state, level);  //寫自己要實現的獲取電量資訊後怎麼處理  
}  

//開啟對電量和電池狀態的監控,類似定時器的功能  
-(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  

9、app中開啟一個網頁
這個比較簡單,直接用提供的介面openURL即可。

NSString *url = @"www.apple.com"  
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];  

10、app中開啟另一個app
開啟另一個app還是可以通過openURL來實現。但是要分兩種情況。第一種是啟動內建的應用,一般的電話,瀏覽器,簡訊和
郵件可以直接呼叫並新增引數,譬如

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://10086"]];  
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://[email protected]"]];  
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://10086"]];  

第二種情況是要開啟自己開發的app,這種情況則要為將要開啟的app註冊一個URL協議。這個可以在專案的檔案info.plist中註冊。主要操作為:
Step1. 右鍵,選擇“Add Row”
Step2. Key值選擇“URL types”
Step3. 開啟“Item 0″,然後為該key增加一個URL identifier。可以是任何值,但建議用“反域名”(例如 “com.fcplayer.testHello”)。
Step4. 在“Item 0”下再加一行。
Step5. 選擇“URL Schemes” 作為Key。
Step6. 輸入你的URL協議名 (例如“testHello://” 應寫做“testHello”)。如果有必要,你可以在這裡加入多個協議。
其實在開啟的時候只需要URL Schemes即可,URL identifier是可選項。如果需要傳送引數,可以在URL Schemes://新增你的引數,格式和網頁開發的傳遞引數差不多。(又或者URL Schemes://URL [email protected]新增的引數)關鍵是要和接收引數方定義好處理的方式。然後在需要開啟的地方新增程式碼:

NSString *url = @"URL Schemes的路徑"  
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];