获取手机通讯录里的电话号码


获取iPhone用户手机号

使用下面的函数可以返回用户的手机号: extern NSString *CTSettingCopyMyPhoneNumber(); 然后调用即可。 由于这个函数是包含在CoreTelephony中,所以只能用于非官方iPhone SDK。

使用下面的函数可以返回用户的手机号:

 

extern NSString *CTSettingCopyMyPhoneNumber();

 

然后调用即可。

 

由于这个函数是包含在CoreTelephony中,所以只能用于非官方iPhone SDK。


为了调用系统的通讯录界面与相应功能,需要引入AddressBook.framework与AddressBookUI.framework,同时,在源文件中需要包含同文件<AddressBook/AddressBook.h>,<AddressBookUI/AddressBookUI.h>.

首先申明变量:

 

ABPeoplePickerNavigationController *picker;

在需要的地方调用显示选择联系人界面,同时设置ABPeoplePickerNavigationControllerDelegate委托:

 

if(!picker){

    picker = [[ABPeoplePickerNavigationController allocinit];

    // place the delegate of the picker to the controll

    picker.peoplePickerDelegate = self;

}

 

// showing the picker

[self presentModalViewController:picker animated:YES];


选择联系人界面如下图所示:

 

 

- (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker 

  shouldContinueAfterSelectingPerson:(ABRecordRef)person 

{

return YES;

}

该方法在用户选择通讯录一级列表的某一项时被调用,通过person可以获得选中联系人的所有信息,但当选中的联系人有多个号码,而我们又希望用户可以明确的指定一个号码时(如拨打电话),返回YES允许通讯录进入联系人详情界面:


当用户点击某个字段时,会调用如下方法:

 

- (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker

  shouldContinueAfterSelectingPerson:(ABRecordRef)person

property:(ABPropertyID)property

  identifier:(ABMultiValueIdentifier)identifier

{

 

if (property == kABPersonPhoneProperty) {

ABMutableMultiValueRef phoneMulti = ABRecordCopyValue(person, property);

 

int index = ABMultiValueGetIndexForIdentifier(phoneMulti,identifier);

 

NSString *phone = (NSString*)ABMultiValueCopyValueAtIndex(phoneMulti, index);

 

//do something

 

 

 

 

[phone release];

 

 

 

 

 

[peoplePicker dismissModalViewControllerAnimated:YES];

 

}


return NO;


}

联系人信息中可能有很多字段,首先需要判断选择的是否为电话号码字段.当满足要求时,获取联系人信息,通过标识符获得用户选择的号码在该联系人号码列表中的索引,最后通过索引获得选中的电话号码.


最后还需要实现如下方法使得用户在点击"取消"按钮时关闭联系人选择界面:

 

- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker 

{

    // assigning control back to the main controller

    [picker dismissModalViewControllerAnimated:YES];

iPhone获取通讯录里电话号码  

2|字号 订阅

ABAddressBookRef addressBook = ABAddressBookCreate();
peopleArray = (NSMutableArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);
for (id *people in peopleArray)
{
ABMultiValueRef phones = (ABMultiValueRef) ABRecordCopyValue(people, kABPersonPhoneProperty);
int nCount = ABMultiValueGetCount(phones);
for(int i = 0 ;i < nCount;i++)
{
NSString *phonelLable    = (NSString *)ABMultiValueCopyLabelAtIndex(phones, i);
NSString *phoneNO    = (NSString *)ABMultiValueCopyValueAtIndex(phones, i);  // 这个就是电话号码
}
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安卓开发获取手机通讯录信息可以通过ContentResolver和Cursor实现。具体步骤如下: 1.在AndroidManifest.xml文件中添加获取通讯录权限 2.创建ContentResolver对象 3.创建Cursor对象,使用ContentResolver的query()方法查询通讯录数据 4.遍历Cursor对象,获取通讯录数据 下面是一个示例代码: ``` if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { //permission not granted, request for permission ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, PERMISSION_READ_CONTACTS); }else { //permission granted, read contacts readContacts(); } private void readContacts() { ContentResolver contentResolver = getContentResolver(); Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); if (cursor != null && cursor.moveToFirst()) { do { //获取联系人姓名 String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); //获取联系人电话号码 Cursor phoneCursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + cursor.getString( cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID)), null, null); if (phoneCursor != null && phoneCursor.moveToFirst()) { do { String phone = phoneCursor.getString(phoneCursor.getColumnIndex( ContactsContract.CommonDataKinds.Phone.NUMBER)); //处理联系人姓名和电话号码数据 } while (phoneCursor.moveToNext()); phoneCursor.close(); } } while (cursor.moveToNext()); cursor.close(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值