Android SDK2.0 通讯录(一)

2014-11-24 09:19:52 · 作者: · 浏览: 0

以下代码是通过测试类来测试该方法,注释里的部分是通过ContactsContract.Contacts这个类里的常量获取uri以及id。
而方法中确实通过查看SQLite来获取字段的


package wjh.android.contact;


import java.util.ArrayList;


import android.content.ContentProviderOperation;


import android.content.ContentProviderResult;


import android.content.ContentResolver;


import android.content.ContentUris;


import android.content.ContentValues;


import android.database.Cursor;


import android.net.Uri;


import android.provider.ContactsContract;


import android.provider.ContactsContract.RawContacts;


import android.provider.ContactsContract.CommonDataKinds.Email;


import android.provider.ContactsContract.CommonDataKinds.Phone;


import android.provider.ContactsContract.CommonDataKinds.StructuredName;


import android.provider.ContactsContract.Contacts.Data;


import android.test.AndroidTestCase;


import android.util.Log;


public class ContactTest extends AndroidTestCase {


private static final String TAG = "ContactTest";


public void testGetContacts() throws Throwable {


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


String uriStr = "content://com.android.contacts/contacts";


Uri uri = Uri.parse(uriStr);


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


// 遍历联系人


while (cursor.moveToNext()) {


// 联系人 ID


int contactId = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts._ID));


// 联系人显示名称


String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));


// 联系人电话号码需要对另一个表进行查询,所以用到另一个 uri:content://com.android.contacts/data/phones


Cursor phones = getContext().getContentResolver().query(


ContactsContract.CommonDataKinds.Phone.CONTENT_URI,


null,


ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " // 根据上一步获取的联系人 id 来查询


+ contactId, null, null);


String phone = "";


while (phones.moveToNext()) {


// "data1"字段,所以此处也可以直接写 "data1",但不推荐


phone = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));


}


// 再查询 Email。uri 为 : content://com.android.contacts/data/emails


Cursor emails = getContext().getContentResolver().query(


ContactsContract.CommonDataKinds.Email.CONTENT_URI,


null,


ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = "


+ contactId, null, null);


while (emails.moveToNext()) {



String emailAddress = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));


Log.i("RongActivity", "emailAddress=" + emailAddress);


}


emails.close();


Log.i(TAG, "Contact [contactId= "+ contactId +"name=" + name + ", phone=" + phone + "]");


}


}


public void testInsert() {


ContentValues values = new ContentValues();


//首先向RawContacts.CONTENT_URI执行一个空值插入(raw_contacts 表), 为了获取生成的联系人 ID


Uri rawContactUri = this.getContext().getContentResolver().insert(RawContacts.CONTENT_URI, values);


long rawContactId = ContentUris.parseId(rawContactUri);



//往data表入姓名数据


values.clear();


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


values.put(Data.RAW_CONTACT_ID, rawContactId);


// mimityp