android获取手机通讯录

对于android还是新手,所以网上找了很多资源,总结起来如下;

1、通讯录存在sqlite里,可以通过类Cursor获取,这个就是一个表,表里面有通讯录里面的名字==

2、通讯录可能存在一个或多个相同名字不同号码,要注意

3、通讯录里面的ID对应Name,Name对应多个或Num

上代码:

public void getPhoneNumMsg(final Context context, final PhoneMsgCallback phoneMsgCallback){
JSONObject jsonData = new JSONObject();
int count = 0;
/*
* 获取手机通讯录数据

 *参数含义:

第一个参数:是一个URI,指向需要查询的表;

第二个参数:需要查询的列名,是一个数组,可以返回多个列;

第三个参数:需要查询的行,where表示需要满足的查询条件,where语句里面可以有?号;

第四个参数:是一个数组,用来替代上面where语句里面的问号;

第五个参数:表示排序方式;


*/
Cursor cursor = context.getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI,
null, 
null, 
null, 
null);
/*
* 判断数据是不是空的,要是空的直接回调,不是空的继续找
*/
if(cursor!=null){

/*
* 光标开始移动
*/
while(cursor.moveToNext()){
String name =

cursor.getString(

cursor.getColumnIndex(

ContactsContract.Contacts.DISPLAY_NAME

//获取当前光标上的名字

));


String phoneId = 

cursor.getString(

cursor.getColumnIndex(

ContactsContract.Contacts._ID

));

//获取当前光标上的ID(可根据这个ID找号码,因为号码可能是多个的)
String hasNum =

cursor.getString(

cursor.getColumnIndex(

ContactsContract.Contacts.HAS_PHONE_NUMBER

));

//判断是否有号码存在
String number = "";
if(("1").equals(hasNum)){
/*
* 数据查询,在表里找对应的ID,将对应的全部取出
*/
Cursor phones = 

context.getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
null, 
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + phoneId,
null, 
null);

 
if(phones.moveToFirst()){
do {
number =

phones.getString(

phones.getColumnIndex(

ContactsContract.CommonDataKinds.Phone.NUMBER

));

//在对应的ID数据上找号码,一个名字对应多个号码,对应一个ID
count++;
try {
 jsonData.put(name, number);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} while (phones.moveToNext());

//这里一定要这么写,千万别觉得我获取号码就行了,这样会丢了数据
continue;
} 
}
count++;
try {
  jsonData.put(name, number);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

//我自己写的回调,不用管
phoneMsgCallback.callback(count, jsonData);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值