湖南地区CORS测量,一般使用什么手机卡,用手机怎么测量长度开热点连接时影响精度吗?

Posts - 38,
Articles - 5,
Comments - 34
如果离成功只有一步之遥,那谁都会咬牙坚持下来;如果忽然发现距离很远,那谁都会放弃。而关键的一咬牙,上了一个层次,有人就会春风得意,越活越成功;有人没上去,永远在苦逼中挣扎求生存。然后想,原来在当时,我们俩的距离才那么近。
20:58 by Rudrj2, ... 阅读,
在开发应用中,经常要获取本地手机的通讯录,特别是sns相关类的应用。因为通讯录属于隐私,所以在开发过程中如果要获取通讯录应该征求用户的同意。通讯录一般存在两个地方,一个是本地手机上,一个是存在sim卡上。下面分别讨论一下怎样获取这两个地方的联系人。(在这里我只获取联系人name 和number)android通过contentProvider将通讯录的数据暴露出来,所以只要有一个正确的URI就可以通过contentprovider获取到通讯录数据。贴代码:
1 //取本机通讯录
2 public static HashMap&String, ContractInfo& getPhoneContracts(Context mContext){
3 HashMap&String, ContractInfo& map = new HashMap&String, ContractInfo&();
4 ContentResolver resolver = mContext.getContentResolver();
5 // 获取手机联系人
6 Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,null, null, null, null); //传入正确的uri
7 if(phoneCursor!=null){
8 while(phoneCursor.moveToNext()){
9 int nameIndex = phoneCursor.getColumnIndex(Phone.DISPLAY_NAME); //获取联系人name
10 String name = phoneCursor.getString(nameIndex);
11 String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(Phone.NUMBER)); //获取联系人number
12 if(TextUtils.isEmpty(phoneNumber)){
13 continue;
15 //以下是我自己的数据封装。
16 ContractInfo contractInfo = new ContractInfo();
17 contractInfo.setName(name);
18 contractInfo.setPhoneNumber(getNumber(phoneNumber));
19 contractInfo.setFrom(PHONE);
20 map.put(getNumber(phoneNumber), contractInfo);
22 phoneCursor.close();
28 接下来看获取sim卡的方法,sim卡的uri有两种可能content://icc/adn与content://sim/adn (一般情况下是第一种)
29 public static HashMap&String, ContractInfo& getSimContracts(Context mContext){
30 //读取SIM卡手机号,有两种可能:content://icc/adn与content://sim/adn
31 HashMap&String, ContractInfo& map = new HashMap&String, ContractInfo&();
33 ContentResolver resolver = mContext.getContentResolver();
34 Uri uri = Uri.parse("content://icc/adn");
35 Cursor phoneCursor = resolver.query(uri,null, null, null, null);
36 if(phoneCursor!=null){
37 while(phoneCursor.moveToNext()){
38 String name = phoneCursor.getString(phoneCursor.getColumnIndex("name"));
39 String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex("number"));
40 if(TextUtils.isEmpty(phoneNumber)){
41 continue;
43 //以下是我自己的数据封装。
44 ContractInfo contractInfo = new ContractInfo();
45 contractInfo.setName(name);
46 contractInfo.setPhoneNumber(getNumber(phoneNumber));
47 contractInfo.setFrom(SIM);
48 map.put(getNumber(phoneNumber), contractInfo);
50 phoneCursor.close();8881人阅读
经过两天的低迷,状态在慢慢的回归了,生活还要继续,人生还需奋斗!
祝:好人一生平安!!!
========================================================================
题目描述:
1.创建AddressBook类. 1)使?用字典作为容器,字典的Key值为分组名(姓名?首字?母,?大写),value值为数组,数组
中存放联系?人(Person实例).(5分) 2)添加联系?人.要求(20分)
不能有重名).
a.判断姓名和电话不能为空否则添加失败. b.判断是否已经存在分组,存在直接存储.不存在创建分组后再存储.(注:联系?人
c.添加成功返回YES,姓名为空或者有重名的添加失败返回NO. d.数据使?用Person存储.
e.?方法:- (BOOL)addPerson:(Person *)aP
3)按照姓名删除联系?人.(15分)
a.?方法:- (BOOL)deletePersonWithName:(NSString*)aPersonN b.删除成功返回YES,否则返回NO; c.当删除联系?人后分组为空时,需要删除该分组。
4)删除?一个分组.(10分)
a:?方法:- (BOOL)deleteGroup:(NSString *)aGroupN b.删除成功返回YES,否则返回NO;
5)根据电话查找某个联系?人.(10分)
a:?方法:-(Person *)findPersonWithPhoneNum:(NSString *)aPhoneN b:如果找到返回该联系?人,否则返回nil. c.忽略电话重复问题,只返回第?一个查找到的联系?人。
6)根据性别查找联系?人,并将查到的联系?人按照年龄升序排序(15分) a:?方法:-(NSArray *)findPersonsWithSex:(NSString *)aS b:查找到联系?人放?入数组,排序的时候使?用block.
7)根据姓名,更改联系?人信息.(10分) a:?方法:-(BOOL)changePersonWithName:(NSString *)name phoneNum:
(NSString *)aNum sex:(NSString *)aSex age:(NSUInteger) aA b:找到该联系?人并修改该成功返回YES,否则返回NO
c.修改电话、性别、年龄,参数不能为空。
8)展?示通讯录中的所有联系?人信息(5分) a:?方法:-(void)showA
b.通过重写description?方法展?示联系?人信息 。
2.使?用Person类.(属性:姓名,年龄,性别,电话,分组) 1)分组是姓名?首字?母(?大写),使?用提供的NSString类??目中的?方法获取。 2)重写description?方法,输出“姓名:张三 性别:男 年龄:22 电话:
”.(5分) 3)定义Person类的便利构造器?方法,?方法包含参数:姓名、年龄、性别、电话.(5分)
3.main函数中的实现 1).创建?一个AddressBook类的实例(通讯录).
2).使?用便利构造器创建四个Person类的实例(联系?人). 姓名:Lucy 性别:?女 电话:123 年龄:21
姓名:Joe 性别:男 电话:456 年龄:17
姓名:Baby 性别:?女 电话:789 年龄:27
姓名:Linda 性别:?女 电话:000 年龄:21 3).调?用添加联系?人?方法,将四个联系?人添加到通讯录中.? 4).根据电话查找联系?人,并打印(查找电话:456); 5).根据性别查找联系?人,并将查到的联系?人按照年龄升序排序,并打印(查找性别:?女) 6).根据姓名,更改联系?人信息.(修改Linda的信息: 性别:?女 电话:012 年龄:25); 7).按照姓名删除联系?人,并展?示通信录中所有?人信息.(删除联系?人:Baby)
8).删除?一个分组,并展?示通信录中所有?人信息.(删除L组)
=========================================================================
AddressBook.h:
&span style=&font-size:18&&- (BOOL)addPerson:(Person *)aP
- (BOOL)isGroupExist:(NSString *)groupN
- (Person *)selectPersonWithName:(NSString *)
- (BOOL)deletePersonWithName:(NSString *)aPersonN
- (BOOL)deleteGroup:(NSString *)aGroupN
- (Person *)findPersonWithPhoneNum:(NSString *)aPhoneN
- (NSArray *)findPersonsWithSex:(NSString *)aS
- (BOOL)changePersonWithName:(NSString *)name phone:(NSString *)aNum sex:(NSString *)aSex age:(NSUInteger)aA
- (void)showA&/span&AddressBook.m:
&span style=&color:#333333;&&&span style=&font-size: 18&&// 根据姓名查找对应的人
&/span&&span style=&font-size:18&&- (Person *)selectPersonWithName:(NSString *)name
NSString * grup = [name uppercasePinYinFirstLetter];
isGupExist = [self isGroupExist:grup];
if (!isGupExist) {
NSMutableArray * arr = [_dic objectForKey:grup];
for (Person * per in arr) {
if ([per.name isEqualToString:name]) {
// 判断是否存在guoupName组
- (BOOL)isGroupExist:(NSString *)groupName
for (NSString * key in _dic) {
if ([key isEqualToString:groupName]) {
return YES;
return NO;
// 添加联系人
- (BOOL)addPerson:(Person *)aPerson
Person * per = [self selectPersonWithName:aPerson.name];
if (per) {
NSLog(@&The Person is
return NO;
BOOL isGroupExt = [self isGroupExist:aPerson.group];
if (!isGroupExt) {
NSMutableArray *arr = [NSMutableArray array];
[_dic setObject:arr forKey:aPerson.group];
[arr addObject:aPerson];
NSMutableArray * arr = [_dic objectForKey:aPerson.group];
[arr addObject:aPerson];
return YES;
// 按照姓名删除联系人
- (BOOL)deletePersonWithName:(NSString *)aPersonName
Person * per = [self selectPersonWithName:aPersonName];
if (per == nil) {
NSLog(@&The Person Is Not Exist!&);
return NO;
NSMutableArray *arr = [_dic objectForKey:per.group];
[arr removeObject:per];
if (arr == nil) { // [arr count]==0
[_dic removeObjectForKey:per.group];
return YES;
// 删除一个分组
- (BOOL)deleteGroup:(NSString *)aGroupName
BOOL isGroubExt = [self isGroupExist:aGroupName];
if (!isGroubExt) {
NSLog(@&The Group Is Not Exist!&);
return NO;
[_dic removeObjectForKey:aGroupName];
return YES;
// 根据电话查找某个联系人
- (Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum
for (NSString * key in _dic) {
NSMutableArray * arr = [_dic objectForKey:key];
for (Person * per in arr) {
if ([per.phone isEqualToString:aPhoneNum]) {
// 根据性别查找联系人,并将查到的联系人按照年龄的升序排序
- (NSArray *)findPersonsWithSex:(NSString *)aSex
NSMutableArray * result = [NSMutableArray array];
for (NSString *key in _dic) {
NSMutableArray *arr = [_dic objectForKey:key];
for (Person *per in arr) {
if ([per.sex isEqualToString:aSex]) {
[result addObject:per];
NSArray * arr1 = [result sortedArrayUsingComparator:^NSComparisonResult(Person *obj1, Person *obj2) {
if (obj1.age & obj2.age) {
return NSOrderedD
else if(obj1.age == obj2.age)
return NSOrderedS
return NSOrderedA
return arr1;
// 根据姓名,更改练习人信息
- (BOOL)changePersonWithName:(NSString *)name phone:(NSString *)aNum sex:(NSString *)aSex age:(NSUInteger)aAge
Person *per = [self selectPersonWithName:name];
if (!per) {
NSLog(@&NO Person!&);
return NO;
per.name =
per.phone = aN
per.sex = aS
per.age = aA
return YES;
// 展示通讯录中的所有联系人信息
- (void)showAll
for (NSString *key in _dic) {
NSMutableArray * arr = [_dic objectForKey:key];
for (Person *per in arr) {
NSLog(@&%@&,per);
- (void)dealloc
[_dic release];
[super dealloc];
// 单独给NSMutableDictiona类型的dic分配空间&/span&&/span&&span style=&color:#333333;&&&span style=&font-size:18&&// 也可在主函数中单独给dic分配NSMutableDictionary空间,这里就没用重定义了
- (instancetype)init
self = [super init];
if (self) {
_dic = [[NSMutableDictionary alloc]init];
}&/span&&span style=&font-size: 18&&
&/span&&/span&这里用到了一个uppercasePinYinFirstLetter方法,用来取出NSString类型字符串的首字母并把它转化为大写,这是在NSString的分类(类目)中实现的。
我定义的分类是NSString+firstCapitalLetter,把这个类目当做模板来用,别的工程把该类目考入能直接用。
NSString+firstCapitalLetter.h中实现
&span style=&font-size:18&&#import &Foundation/Foundation.h&
#define ALPHA @&ABCDEFGHIJKLMNOPQRSTUVWXYZ#&
char pinyinFirstLetter(unsigned short hanzi);
@interface NSString (firstCapitalLetter)
// 提供首字母大写
- (NSString *) uppercasePinYinFirstL
- (NSString *) lowercasePinYinFirstL
@end&/span&NSString+firstCapitalLetter.m
#import &NSString+firstCapitalLetter.h&
#define HANZI_START 19968
#define HANZI_COUNT 20902
static char firstLetterArray[HANZI_COUNT] =
&ydkqsxnwzssxjbymgcczqpssqbycdscdqldylybssjgyqzjjfgcclzznwdwzjljpfyynnjjtmynzwzhflzppqhgccyynmjqyxxgd&;
char pinyinFirstLetter(unsigned short hanzi)
int index = hanzi - HANZI_START;
if (index &= 0 && index &= HANZI_COUNT)
return firstLetterArray[index];
@implementation NSString(firstCapitalLetter)
- (NSString *) uppercasePinYinFirstLetter
unichar firstLetter = [self characterAtIndex:0];
char cFirstLetter = pinyinFirstLetter(firstLetter);
return [[NSString stringWithFormat:@&%c&,cFirstLetter] uppercaseString];
- (NSString *) lowercasePinYinFirstLetter
unichar firstLetter = [self characterAtIndex:0];
char cFirstLetter = pinyinFirstLetter(firstLetter);
return [[NSString stringWithFormat:@&%c&,cFirstLetter] lowercaseString];
模板用就行
==============================================
&span style=&font-size:14&&@property(nonatomic,copy)NSString *
@property(nonatomic,assign)NSI
@property(nonatomic,copy) NSString *
@property(nonatomic,copy)NSString *
@property(nonatomic,copy)NSString *
// person的便利构造器
+ (instancetype)personWithName:(NSString *)name
age:(NSInteger)age
sex:(NSString *)sex
phone:(NSString *)
- (instancetype)initWithName:(NSString *)name age:(NSInteger)age sex:(NSString *)sex phone:(NSString *)&/span&Person.m
- (void)setName:(NSString *)name
if (_name != name) {
[_name release];
_name = [name copy];
self.group = [name uppercasePinYinFirstLetter];
最近事情有些多,有些伤心
- (NSString *)description
return [NSString stringWithFormat:@&name=%@,age=%ld,sex=%@,phone=%@&,_name,_age,_sex,_phone];
+ (instancetype)personWithName:(NSString *)name
age:(NSInteger)age
sex:(NSString *)sex
phone:(NSString *)phone
Person * per = [[Person alloc]initWithName:name age:age sex:sex phone:phone];
return [per autorelease];
- (instancetype)initWithName:(NSString *)name age:(NSInteger)age sex:(NSString *)sex phone:(NSString *)phone
if (self = [super init]) {
self.phone =
//=================
self.group = [name uppercasePinYinFirstLetter];
=================================================================
// 此句只能给AddressBook中的dic分配了一个指针的空间大小
AddressBook * addressBook = [[AddressBook alloc]init];
// 单独给NSMutableDictionary类型的dic分配空间
// 如果不使用AddressBook.m的init方法则用这一句就可以替代它
addressBook.dic = [[NSMutableDictionary alloc] init];
Person * per1 = [Person personWithName:@&Lucy& age:21 sex:@&女& phone:@&123&];
Person * per2 = [Person personWithName:@&Joe& age:17 sex:@&男& phone:@&456&];
Person * per3 = [Person personWithName:@&Baby& age:27 sex:@&女& phone:@&789&];
Person * per4 = [Person personWithName:@&Linda& age:21 sex:@&女& phone:@&000&];
//========================
[addressBook addPerson:per1];
[addressBook addPerson:per2];
[addressBook addPerson:per3];
[addressBook addPerson:per4];
[addressBook showAll];
//========================
Person * p = [addressBook findPersonWithPhoneNum:@&456&];
NSLog(@&NULL!&);
NSLog(@&%@&,p);
//========================
NSArray * arr = [addressBook findPersonsWithSex:@&女&];
NSLog(@&%@&,arr);
//========================
[addressBook changePersonWithName:@&Linda& phone:@&012& sex:@&女& age:25];
NSLog(@&%@&,[addressBook selectPersonWithName:@&Linda&]);
//========================
[addressBook deletePersonWithName:@&Baby&];
[addressBook showAll];
//========================
[addressBook deleteGroup:@&L&];
[addressBook showAll];[addressBook showAll];
==================================================================
人活在世,不仅仅为了自己,更多的是不要让那些关心你的人失望!!!!
=======================================================
强烈推荐大家,扫描下面二维码,关注公众号,满满的都是干货~~~
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:115925次
积分:2006
积分:2006
排名:第16036名
原创:80篇
转载:11篇
评论:39条
我们是一群热爱移动开发的猿们,
关注我们一起成长:
(2)(1)(2)(4)(1)(24)(24)(1)(1)(31)查看:49929|回复:8
初级工程师
获得手机通讯录联系人信息复制内容到剪贴板代码:& && & /**得到手机通讯录联系人信息**/&&
& && & private void getPhoneContacts() {&&
& & ContentResolver resolver = mContext.getContentResolver();&&
& & // 获取手机联系人&&
& & Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,PHONES_PROJECTION, null, null, null);&&
& & if (phoneCursor != null) {&&
& && &&&while (phoneCursor.moveToNext()) {&&
& && &&&//得到手机号码&&
& && &&&String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX);&&
& && &&&//当手机号码为空的或者为空字段 跳过当前循环&&
& && &&&if (TextUtils.isEmpty(phoneNumber))&&
& && && && &&&
& && &&&//得到联系人名称&&
& && &&&String contactName = phoneCursor.getString(PHONES_DISPLAY_NAME_INDEX);&&
& && &&&//得到联系人ID&&
& && &&&Long contactid = phoneCursor.getLong(PHONES_CONTACT_ID_INDEX);&&
& && &&&//得到联系人头像ID&&
& && &&&Long photoid = phoneCursor.getLong(PHONES_PHOTO_ID_INDEX);&&
& && &&&//得到联系人头像Bitamp&&
& && &&&Bitmap contactPhoto =&&
& && &&&//photoid 大于0 表示联系人有头像 如果没有给此人设置头像则给他一个默认的&&
& && &&&if(photoid & 0 ) {&&
& && && && &Uri uri =ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,contactid);&&
& && && && &InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(resolver, uri);&&
& && && && &contactPhoto = BitmapFactory.decodeStream(input);&&
& && &&&}else {&&
& && && && &contactPhoto = BitmapFactory.decodeResource(getResources(), R.drawable.contact_photo);&&
& && &&&}&&
& && &&&mContactsName.add(contactName);&&
& && &&&mContactsNumber.add(phoneNumber);&&
& && &&&mContactsPhonto.add(contactPhoto);&&
& && &&&}&&
& && &&&phoneCursor.close();&&
& && & }&&获得手机sim卡联系人信息
sim卡和手机本人 获取的方式类似 只是url有点不一样 ,须要注意的一点是 sim卡&&是没有联系人头像的。复制内容到剪贴板代码:& && & /**得到手机SIM卡联系人人信息**/&&
& && & private void getSIMContacts() {&&
& & ContentResolver resolver = mContext.getContentResolver();&&
& & // 获取Sims卡联系人&&
& & Uri uri = Uri.parse(&content://icc/adn&);&&
& & Cursor phoneCursor = resolver.query(uri, PHONES_PROJECTION, null, null,&&
& && &&&null);&&
& & if (phoneCursor != null) {&&
& && &&&while (phoneCursor.moveToNext()) {&&
& && &&&// 得到手机号码&&
& && &&&String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX);&&
& && &&&// 当手机号码为空的或者为空字段 跳过当前循环&&
& && &&&if (TextUtils.isEmpty(phoneNumber))&&
& && && && &&&
& && &&&// 得到联系人名称&&
& && &&&String contactName = phoneCursor&&
& && && && &.getString(PHONES_DISPLAY_NAME_INDEX);&&
& && &&&//Sim卡中没有联系人头像&&
& && &&&mContactsName.add(contactName);&&
& && &&&mContactsNumber.add(phoneNumber);&&
& && &&&}&&
& && &&&phoneCursor.close();&&
& && & }&&调用系统拨打电话的界面 ,代码如下。
&tel:& + 电话号码复制内容到剪贴板代码:& & //调用系统方法拨打电话&&
& & Intent dialIntent = new Intent(Intent.ACTION_CALL, Uri&&
& && &&&.parse(&tel:& + mContactsNumber.get(position)));&&
& & startActivity(dialIntent);&&最重要的是须要AndroidManifest.xml中 加入权限 否则代码会报错的。 千万别忘了。
复制内容到剪贴板代码:&!-- 读取联系人权限 --&& &
&uses-permission android:name=&android.permission.READ_CONTACTS&/&&&
&!-- 拨打电话权限 --&&&
&uses-permission android:name=&android.permission.CALL_PHONE&/&&&
提示: 作者被禁止或删除 内容自动屏蔽
路过也来看看:handshake
初级工程师
都是路过啊, 哈哈
2.0之后不能这么用了......
楼主 用什么软件获取通讯录啊····
资深技术经理
引用:原帖由 stevenxu2013 于
00:42 发表
楼主 用什么软件获取通讯录啊···· 这个自己写个应用就可以获取了。
中级工程师
:)1 路过,学习:victory:一行代码获取通讯录联系人,并进行A~Z排序( 已对名字第二个字做排序处理 )
查看次数:1519
下载次数:325
上传时间:
大小:2 KB
1.PPGetAddressBook对AddressBook框架(iOS9之前)和Contacts框架(iOS9之后)做了对应的封装处理;
2.支持获取按联系人姓名首字拼音A~Z排序(重点:已经对姓名的第二个字做了处理,排序更准确!);
3.支持获取原始顺序的联系人,未分组,可自行处理.
Github上为最新版本,有详细介绍,会持续更新!
地址: /jkpang/PPGetAddressBook , 觉得好用还请Star一波哈.
您还没有登录!请或
下载过该代码的还下载了
本周热门下载
&2017 Chukong Technologies,Inc.
京公网安备89通讯录的制作 C_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
通讯录的制作 C
上传于|0|0|暂无简介
阅读已结束,如果下载本文需要使用5下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩6页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 支付宝用手机卡充值 的文章

 

随机推荐