联系人的基本操作

 

其实联系人那几个表刚开始看起来很绕的!

 

后来接触多了,慢慢的感觉好了点。

 

经常总结下,也方便以后回头查找!

 

这三个表:Raw_contacts, Data ,Contacts

 

Raw_contacts:这个表放的是联系人的唯一标识,ID啦!其他的两个表里面有个rawContactID是对应的外键。

 

Data :这个放的是联系人的具体的信息,像号码啦,邮箱啦,地址啦 之类的

 

Contacts:这个放的就是一条条的联系人,主要存的是display_name啊,有没号码啦。

 

其他还有一些子类也经常遇到像CommonDataKinds这样的!

 

刚开始插入一个联系人的时候查了好多资料,最后才发现姓名跟号码是要分开来插入的,因为类型不同!

 

其实这些例子在API里面都有的!

 

查询通讯录中的信息

 

 

ContentResolver contentResolver = this.getContext().getContentResolver(); 

String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";

Cursor nameCursor = contentResolver.query(Contacts.CONTENT_URI, nullnullnullsortOrder);

 

if(null != nameCursor && nameCursor .moveToFirst() ){

do{

String id = nameCursor .getInt(

nameCursor .getColumnIndex(ContactsContract.Contacts._ID));

//获取联系人姓名

String name =nameCursor .getString(

nameCursor .getColumnIndex(PhoneLookup.DISPLAY_NAME));

}while(nameCursor .moveToNext());

nameCursor .close();

}

 

 

//获取联系人号码查询

 

Cursor numCursor = ctx.getContentResolver().query(

ContactsContract.CommonDataKinds.Phone.CONTENT_URI,nullnullnullnull);

 

if(numCursor!=null&&numCursor.getCount()!=0){

do{

String nummber = numCursor.getString(numCursor.getColumnIndex(

ContactsContract.CommonDataKinds.Phone.NUMBER));

}while(numCursor.moveToNext());

numCursor.close();

}

 

//记得每次都要去关掉游标,上次就是因为没关游标导致的错误。忘记报的什么错误了!好像就是下标最多2000那样

 

 

插入一个新的联系人记录

 

 

代码懒得自己写了,引用wenlin56的帖子中 现成的代码,以下是原帖链接:

 

http://blog.csdn.net/wenlin56/archive/2010/12/14/6074437.aspx

 

有个要注意的地方就是插入详细信息到DATA里面 必须要先得到那个rawContactId,所以之前要插一个空值来获得这个!

 

 

 

ContentValues values = new ContentValues();

Uri rawContactUri = ctx.getContentResolver().insert(

RawContacts.CONTENT_URI, values);

// 然后获取系统返回的rawContactId , 就是新加入的这个联系人的 ID

long rawContactId = ContentUris.parseId(rawContactUri);

 // Andorid 中,将联系人的姓名、电话 分别存放在 data 表的同一个字段的两条记录当中 类型不同 因此要 Insert 两次

 

 

// 往data表入姓名数据

values.clear();

// raw_contacts_id 字段,是 raw_contacts表id 的外键,用于说明此记录属于哪一个联系人

values.put(Data.RAW_CONTACT_ID, rawContactId);

// mimitype_id 字段,用于描述此数据的类型,电话号码?Email?....

values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);

values.put(StructuredName.GIVEN_NAME, “唐自刚”);

ctx.getContentResolver().insert(

android.provider.ContactsContract.Data.CONTENT_URI, values);

 

// 往data表入电话数据

values.clear();

values.put(Data.RAW_CONTACT_ID, rawContactId);

values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);

values.put(Phone.NUMBER, “18610230851”);

values.put(Phone.TYPE, Phone.TYPE_MOBILE);

ctx.getContentResolver().insert(

android.provider.ContactsContract.Data.CONTENT_URI, values);

 

 

顺便补充下查询SIM卡联系人

 

 

Uri uri = Uri.parse("content://icc/adn");

ContentResolver cr = ctx.getContentResolver();

Cursor cursor = cr.query(uri, null, null, null, null);

//不遍历游标了,你看得懂的!

 

name = cursor.getString(cursor.getColumnIndex(People.NAME));

number = cursor.getString(cursor.getColumnIndex(People.NUMBER));

 

这篇就写到这里了! 想要继续看批量添加联系人的话 moveToNext();

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值