zoukankan      html  css  js  c++  java
  • ios获取设备信息总结

    1、获取设备的信息

    1     UIDevice *device = [[UIDevice alloc] int];  
    2     NSString *name = device.name;       //获取设备所有者的名称  
    3     NSString *model = device.name;      //获取设备的类别  
    4     NSString *type = device.localizedModel; //获取本地化版本  
    5     NSString *systemName = device.systemName;   //获取当前运行的系统  
    6     NSString *systemVersion = device.systemVersion;//获取当前系统的版本  


    2、获取设备的唯一标示符

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


    3、为系统创建一个随机的标示符

     1     (NSString*) createUUID  
     2     {  
     3         NSString *id = [[NSUserDefaults standardUserDefaults] objectForKey:@"UUID"];    //获取标识为"UUID"的值  
     4         if(id == nil)  
     5         {  
     6             if([[[UIDevice currentDevice] systemVersion] floatValue] > 6.0)  
     7             {  
     8                 NSString *identifierNumber = [[NSUUID UUID] UUIDString];                //ios 6.0 之后可以使用的api  
     9                 [[NSUserDefaults standardUserDefaults] setObject:identifierNumber forKey:@"UUID"];  //保存为UUID  
    10                 [[NSUserDefaults standardUserDefaults] synchronize];  
    11             }  
    12             else{  
    13                 CFUUIDRef uuid = CFUUIDCreate(NULL);  
    14                 CFStringRef uuidString = CFUUIDCreateString(NULL, uuid);                    //ios6.0之前使用的api  
    15                 NSString *identifierNumber = [NSString stringWithFormat:@"%@", uuidString];  
    16                 [[NSUserDefaults standardUserDefaults] setObject:identifierNumber forKey:@"UUID"];  
    17                 [[NSUserDefaults standardUserDefaults] synchronize];  
    18                 CFRelease(uuidString);  
    19                 CFRelease(uuid);  
    20             }  
    21             return [[NSUserDefaults standardUserDefaults] objectForKey@"UUID"];  
    22         }  
    23         return id;  
    24     }  


    4、获取当前屏幕分辨率的信息

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


    5、获取运营商的信息
    需要先导入头文件

    1     #import <CoreTelephony/CTCarrier.h>  
    2     #import <CoreTelephony/CTTelephonyNetworkInfo.h>  
    3 
    4 创建对象
    5 
    6     CCTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init];  


    获取运行商的名称

    1     CTCarrier *carrier = [info subscriberCellularProvider];  
    2     NSString *mCarrier = [NSString stringWithFormat:@"%@",[carrier carrierName]];  


    获取当前网络的类型
    ios7之后可以按照以下方式获取。方便而且类型多

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


    类型有以下:

     1     CTRadioAccessTechnologyGPRS         //介于2G和3G之间,也叫2.5G ,过度技术    
     2     CTRadioAccessTechnologyEdge         //EDGE为GPRS到第三代移动通信的过渡,EDGE俗称2.75G   
     3     CTRadioAccessTechnologyWCDMA           
     4     CTRadioAccessTechnologyHSDPA            //亦称为3.5G(3?G)  
     5     CTRadioAccessTechnologyHSUPA            //3G到4G的过度技术  
     6     CTRadioAccessTechnologyCDMA1x       //3G      
     7     CTRadioAccessTechnologyCDMAEVDORev0    //3G标准  
     8     CTRadioAccessTechnologyCDMAEVDORevA    
     9     CTRadioAccessTechnologyCDMAEVDORevB    
    10     CTRadioAccessTechnologyeHRPD        //电信使用的一种3G到4G的演进技术, 3.75G       
    11     CTRadioAccessTechnologyLTE          //接近4G   


    ios7之前的话apple给我们提供了Reachability来获取。
    首先要导入SystemConfiguration.framework,把下载下来的Reachability.h和Reachability.m加进项目中

     1     Reachability *reach = [Reachability reachabilityWithHostName:@"www.apple.com"];  
     2     switch([reach currentReachabilityStatus])  
     3     {  
     4         case NotReachable:  //没有连接上  
     5             //do something  
     6             break;  
     7         case ReachableViaWiFi:  //通过wifi连接  
     8             //do something  
     9             break;  
    10         case ReachableViaWWAN:  //通过GPRS连接  
    11             //do something  
    12             break;  
    13         default:    <span style="white-space:pre">    </span>//未知情况  
    14             //do something  
    15             break;  
    16     }  

    http://blog.csdn.net/qijianli/article/details/19922653 这个博客还说了其它的方法,不过因为是调用私有API,所以没有采用。

    6、获取当前信号的强弱
    这个貌似没有给出官方的api,但是网上有人说可以用私有的api实现,但是通不过appStore的审核,方法如下:
    利用linux下动态库显式调用api的函数。先包含头文件 #import <dlfcn.h>

     1     (int) getSignalLevel  
     2     {  
     3     voidvoid *libHandle = dlopen("/System/Library/Frameworks/CoreTelephony.framework/CoreTelephony",RTLD_LAZY);//获取库句柄  
     4     int (*CTGetSignalStrength)(); //定义一个与将要获取的函数匹配的函数指针  
     5     CTGetSignalStrength = (int(*)())dlsym(libHandle,"CTGetSignalStrength"); //获取指定名称的函数  
     6       
     7     if(CTGetSignalStrength == NULL)  
     8         return -1;  
     9     else{  
    10         int level = CTGetSignalStrength();  
    11         dlclose(libHandle); //切记关闭库  
    12         return level  
    13         }  
    14     }  


    7、设备震动
    需要加入AudioToolbox framework,导入头文件 #import <AudioToolbox/AudioToolbox.h>
    在需要震动的地方添加代码:

    1     AudioServicesPlaySystemSound ( kSystemSoundID_Vibrate) ;  

    但是貌似这个不支持传入震动时间和模式,自己去控制吧。


    8、获取电池的相关信息

     1     @implementation BatterMonitor  
     2     //获取电池当前的状态,共有4种状态  
     3     -(NSString*) getBatteryState {    
     4         UIDevice *device = [UIDevice currentDevice];    
     5         if (device.batteryState == UIDeviceBatteryStateUnknown) {    
     6             return @"UnKnow";    
     7         }else if (device.batteryState == UIDeviceBatteryStateUnplugged){    
     8             return @"Unplugged";    
     9         }else if (device.batteryState == UIDeviceBatteryStateCharging){    
    10             return @"Charging";    
    11         }else if (device.batteryState == UIDeviceBatteryStateFull){    
    12             return @"Full";    
    13         }  
    14         return nil;   
    15     }   
    16     //获取电量的等级,0.00~1.00  
    17     -(float) getBatteryLevel {    
    18         return [UIDevice currentDevice].batteryLevel;  
    19     }   
    20       
    21     -(void) getBatteryInfo  
    22     {  
    23         NSString *state = getBatteryState();  
    24         float level = getBatteryLevel()*100.0;  
    25         //yourControlFunc(state, level);  //写自己要实现的获取电量信息后怎么处理  
    26     }  
    27       
    28     //打开对电量和电池状态的监控,类似定时器的功能  
    29     -(void) didLoad  
    30     {  
    31         [[UIDevice currentDevice] setBatteryMonitoringEnable:YES];  
    32         [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getBatteryInfo:) name:UIDeviceBatteryStateDidChangeNotification object:nil];  
    33         [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getBatteryInfo:) name:UIDeviceBatteryLevelDidChangeNotification object:nil];  
    34         [NSTimer scheduledTimerWithTimeInterval:0.5f target:self selector:@selector(getBatteryInfo:) userInfo:nil repeats:YES];  
    35     }  
    36     @end  


    9、app中打开一个网页
    这个比较简单,直接用提供的接口openURL即可。

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


    10、app中打开另一个app

    打开另一个app还是可以通过openURL来实现。但是要分两种情况。第一种是启动内置的应用,一般的电话,浏览器,短信和

    邮件可以直接调用并添加参数,譬如

    1     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://10086"]];  
    2     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://devprograms@apple.com"]];  
    3     [[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 identifier@添加的参数)关键是要和接收参数方定义好处理的方式。然后在需要打开的地方添加代码:

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


    如有错误,请不吝指正,谢谢

  • 相关阅读:
    [Java并发编程(三)] Java volatile 关键字介绍
    [Java并发编程(二)] 线程池 FixedThreadPool、CachedThreadPool、ForkJoinPool?为后台任务选择合适的 Java executors
    [Java并发编程(一)] 线程池 FixedThreadPool vs CachedThreadPool ...
    Raft 实现日志复制同步
    Paxos 实现日志复制同步(Multi-Paxos)
    Paxos 实现日志复制同步(Basic Paxos)
    解剖 Elasticsearch 集群
    解剖 Elasticsearch 集群
    小程序-textarea,input内文本浮在定位元素和弹框之上的解决
    将一个多重对象的所有值赋值给另一个对象
  • 原文地址:https://www.cnblogs.com/codemakerhj/p/5124258.html
Copyright © 2011-2022 走看看