今天在做客户端的时候,里面有个意见反馈功能。

调用系统带的邮件功能,发送邮件到指定邮箱。

然后我就想,应该在邮件正文部分添加手机相关内容,比如型号,版本,应用程序的版本等等,这样不仅使用者方便,开发者也能更好的分析。

于是,学习了相关的知识,在这里与大家分享。

iOS的APP的应用开发的过程中,有时为了bug跟踪或者获取用反馈的需要自动收集用户设备、系统信息、应用信息等等,这些信息方便开发者诊断问题,当然这些信息是用户的非隐私信息,是通过开发api可以获取到的。那么通过那些api可以获取这些信息呢,iOS的SDK中提供了UIDevice,NSBundle,NSLocale。

在次之前,补充个内容。UIDevice是无法获得具体的设备型号的。

要获得设备型号,比如(iphone 4s, iphone5)这样的,要通过这样的办法。

1.引入头文件。

#include <sys/types.h>

#include <sys/sysctl.h>

2.获取型号

//手机型号。

size_t size;

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

char *machine = (char*)malloc(size);

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

NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding];

这里得到的platform是个设备型号。  比如iphone5,2.

所以如果想更完美点,可以自己根据字符串判断。

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

一。UIDevice

UIDevice提供了多种属性、类函数及状态通知,帮助我们全方位了解设备状况。从检测电池电量到定位设备与临近感应,UIDevice所做的工作就是为应用程序提供用户及设备的一些信息。UIDevice类还能够收集关于设备的各种具体细节,例如机型及iOS版本等。其中大部分属性都对开发工作具有积极的辅助作用。下面的代码简单的使用UIDevice获取手机属性。

//    [[UIDevice currentDevice] systemName]; // 系统名
// [[UIDevice currentDevice] systemVersion]; //版本号
// [[UIDevice currentDevice] model]; //类型,模拟器,真机
// [[UIDevice currentDevice] uniqueIdentifier]; //唯一识别码
// [[UIDevice currentDevice] name]; //设备名称
// [[UIDevice currentDevice] localizedModel]; // 本地模式
//设备相关信息的获取
NSString *strName = [[UIDevice currentDevice] name];
NSLog(@"设备名称:%@", strName);//e.g. "My iPhone" NSString *strId = [[UIDevice currentDevice] uniqueIdentifier];
NSLog(@"设备唯一标识:%@", strId);//UUID,5.0后不可用 NSString *strSysName = [[UIDevice currentDevice] systemName];
NSLog(@"系统名称:%@", strSysName);// e.g. @"iOS" NSString *strSysVersion = [[UIDevice currentDevice] systemVersion];
NSLog(@"系统版本号:%@", strSysVersion);// e.g. @"4.0" NSString *strModel = [[UIDevice currentDevice] model];
NSLog(@"设备模式:%@", strModel);// e.g. @"iPhone", @"iPod touch" NSString *strLocModel = [[UIDevice currentDevice] localizedModel];
NSLog(@"本地设备模式:%@", strLocModel);// localized version of model //地方型号 (国际化区域名称) NSString* phoneModel = [[UIDevice currentDevice] model];
NSLog(@"手机型号: %@",phoneModel ); //手机型号

二。NSBundle

bundle是一个目录,其中包含了程序会使用到的资源. 这些资源包含了如图像,声音,编译好的代码,nib文件(用户也会把bundle称为plug-in). 对应bundle,cocoa提供了类NSBundle.一个应用程序看上去和其他文件没有什么区别. 但是实际上它是一个包含了nib文件,编译代码,以及其他资源的目录. 我们把这个目录叫做程序的main bundle。通过这个路径可以获取到应用的信息,例如应用名、版本号等。

    //app应用相关信息的获取
NSDictionary *dicInfo = [[NSBundle mainBundle] infoDictionary];
// CFShow(dicInfo); NSString *strAppName = [dicInfo objectForKey:@"CFBundleDisplayName"];
NSLog(@"App应用名称:%@", strAppName); // 当前应用名称 NSString *strAppVersion = [dicInfo objectForKey:@"CFBundleShortVersionString"];
NSLog(@"App应用版本:%@", strAppVersion); // 当前应用软件版本 比如:1.0.1 NSString *strAppBuild = [dicInfo objectForKey:@"CFBundleVersion"];
NSLog(@"App应用Build版本:%@", strAppBuild); // 当前应用版本号码 int类型

三。NSLocale

    //Getting the User’s Language
NSArray *languageArray = [NSLocale preferredLanguages];
NSString *language = [languageArray objectAtIndex:0];
NSLog(@"语言:%@", language);//en NSLocale *locale = [NSLocale currentLocale];
NSString *country = [locale localeIdentifier];
NSLog(@"国家:%@", country); //en_US

下面简单的展示下我在邮件中加入的相关内容。 不过因为是在模拟器跑的,一些内容显示的不是很具体。

具体的可以自己移植到真机去试试。

下面是发送邮件代码:

    //选中发送邮件形式
if (buttonIndex == 0)
{
// mail note if ([MFMailComposeViewController canSendMail])
{
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self; //设置收件人,可以设置多人
[picker setToRecipients:[NSArray arrayWithObjects:@"hitwhylz@163.com",nil]];
//设置主题
//设备相关信息的获取
NSString *strName = [[UIDevice currentDevice] name]; //e.g. "My iPhone"
NSString *strSysVersion = [[UIDevice currentDevice] systemVersion]; // e.g. @"4.0"
NSString *strModel = [[UIDevice currentDevice] model]; // e.g. @"iPhone", @"iPod touch"
NSString* phoneModel = [[UIDevice currentDevice] model]; //手机型号
//app应用相关信息的获取
NSDictionary *dicInfo = [[NSBundle mainBundle] infoDictionary];
NSString *strAppName = [dicInfo objectForKey:@"CFBundleDisplayName"]; // 当前应用名称
NSString *strAppVersion = [dicInfo objectForKey:@"CFBundleShortVersionString"];
// 当前应用软件版本 比如:1.0.1 [picker setSubject: @"客户端意见反馈"];
[picker setMessageBody:[NSString stringWithFormat:@"设备名称:%@ \n系统版本号:%@\n设备模式:%@\n手机型号: %@\nApp应用名称:%@\nApp应用版本:%@\n",strName,strSysVersion,strModel,phoneModel,strAppName,strAppVersion] isHTML:NO]; [self presentModalViewController:picker animated:YES];
} else
{
msg = @"无法正常发送邮件,请重新设置。";
[self alertWithTitle:nil msg:msg]; }
}

下面是运行截图。

学习的路上,与君共勉。

转自:http://blog.csdn.net/hitwhylz/article/details/12714861

ios开发-获取手机相关信息的更多相关文章

  1. PHP获取手机相关信息

    该PHP操作类实现获取手机号手机头信息,取UA,取得手机类型,判断是否是opera,判断是否是m3gate,取得HA,取得手机IP 代码如下: <?php /** * @desc 手机操作类 获 ...

  2. iOS开发——获取手机当前WiFi名和MAC地址

    获取手机WiFi信息. iOS9以前的方法,还是能用,警告就警告吧!iOS9以后使用的是苹果最新的API框架,NetworkExtension/NEHotspotHelper.h,这个框架,第一次开放 ...

  3. iOS开发 获取手机信息(UIDevice,NSBundle,NSlocale)

    在开发中,需要获取当前设备的一些信息,可以通过UIDevice,NSbundle,NSlocale获取. UIDevice UIDevice 提供了多种属性,类函数及状态通知,可以检测手机电量,定位, ...

  4. iOS获取手机相关信息

    iOS具体的设备型号: #include <sys/types.h> #include <sys/sysctl.h> - (void)test { //手机型号. size_t ...

  5. ios开发获取SIM卡信息

    .加入一个Framework(CoreTelephony.framework). .引入头文件 #import<CoreTelephony/CoreTelephonyDefines.h> ...

  6. iOS开发-获取设备型号信息

    开发中有的时候查看设计统计数据,或者通过日志查看错误信息,这个时候我们就需要获取获取设备信息,看下关于设备有几种方法: NSLog(@"%@",[[UIDevice current ...

  7. iOS开发-Swift获取手机设备信息(UIDevice)

    使用UiDevice获取设备信息 获取设备名称 let name = UIDevice.currentDevice().name 获取设备系统名称 let systemName = UIDevice. ...

  8. Expo大作战(三十九)--expo sdk api之 DocumentPicker,Contacts(获取手机联系人信息),Branch

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  9. 【转】android 安卓APP获取手机设备信息和手机号码的代码示例

    http://blog.csdn.net/changemyself/article/details/7421476 下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓 ...

随机推荐

  1. C++代码优化方法总结

    C++代码优化方法总结 优化是一个非常大的主题,本文并不是去深入探讨性能分析理论,算法的效率,况且我也没有这个能力.我只是想把一些可以简单的应用到你的C++代码中 的优化技术总结在这里,这样,当你遇到 ...

  2. Confluence - Online Team Collaboration Tool

    Confluence - 在线的团队协作沟通工具,包含 meeting 管理, wiki 等等功能 https://www.atlassian.com/software/confluence

  3. 微信client内部推荐项目总结

    如今实习的公司在面向企业提供招聘服务领域数一数二,而下半年的产品重点就在于移动端微信招聘项目.而这次内推项目开发属于微信招聘一个分支.     一.内推综述     乐帝之前读<招聘与录用> ...

  4. [elk]logstash统计api访问失败率

    处理原始日志 日志从moogoo导出来的 { "mobile" : "13612345678", "isp" : "中国移动_广东 ...

  5. js生成二维码的jquery组件–qrcode

    js生成二维码的jquery组件–qrcode 2015/01/30 / 2508 VIEWS / JAVASCRIPT, JQUERY 有一些耗cpu的计算,完全可以在客户端上计算,比如生成二维码. ...

  6. 【亲测好用!】shell批量采集百度下拉框关键词

    [亲测好用!]shell批量采集百度下拉框关键词 SEO工具  方法  11个月前 (11-18)  2153浏览 3条评论 百度已收录 一直想写一篇用shell采集百度下拉框关键词的教程,个人感觉用 ...

  7. 每日英语:The First Day On A Job Is Tough Work

    Why is the first day on the job often the worst? New employees tend to be greeted with stacks of ben ...

  8. 每日英语:Air Pollution From Coal Use Cuts Lifespans in China, Study Shows

    Air pollution from coal combustion likely cut life expectancy in parts of China by more than five ye ...

  9. Lucene用法10个小结 (zhuan)

    http://www.cfanz.cn/index.PHP?c=article&a=read&id=303149 *********************************** ...

  10. [driver]linux内核动态加载模块

    问题: 1. 把编译好的模块放到板子/lib/modules对应文件夹下,并且执行了depmod -a, 比如pl2303.ko, 那么下一次插入pl2303的串口线,是否可以识别,也就是自动加载pl ...