TestContacts.java:
package waga.android.study.TestContacts; import android.app.Activity; import android.content.ContentResolver; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.provider.ContactsContract; import android.provider.ContactsContract.RawContacts; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.widget.TextView; public class TestContacts extends Activity { TextView myTextView; String str; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); setTitle(R.string.ReadContact); } // 创建选项菜单 @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.layout.menu, menu); return true; } // 响应选项菜单 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { // 新建联系人 case R.id.menu_add: { // new一 个Intent对 象 , 并指定class Intent intent = new Intent(); intent.setClass(this, NewContactActivity.class); startActivity(intent); return true; } // 删除联系人 case R.id.menu_delete: { // new一 个Intent对 象 , 并指定class Intent intent = new Intent(); intent.setClass(this, DeleteContactActivity.class); startActivity(intent); return true; } // 更新联系人 case R.id.menu_update: { // new一 个Intent对 象 , 并指定class Intent intent = new Intent(); intent.setClass(this, UpdateContactActivity.class); startActivity(intent); return true; } // 退出 case R.id.menu_exit: { finish(); return true; } } return false; } @Override protected void onResume() { super.onResume(); TextView myTextView = (TextView)findViewById(R.id.ContactsInfo); str = ""; // 读取所有的联系人 readAllContacts(); myTextView.setText(str); } // 读取所有的联系人 public void readAllContacts() { ContentResolver cr = getContentResolver(); Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); if (cur.getCount() > 0) { while (cur.moveToNext()) { String rawContactsId = ""; String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); str += "ContactID:" + id + "\n"; // 读取rawContactsId Cursor rawContactsIdCur = cr.query(RawContacts.CONTENT_URI, null, RawContacts.CONTACT_ID +" = ?", new String[]{id}, null); if (rawContactsIdCur.moveToFirst()) { rawContactsId = rawContactsIdCur.getString(rawContactsIdCur.getColumnIndex(RawContacts._ID)); str += "RawContactsID:" + rawContactsId + "\n"; } rawContactsIdCur.close(); str += "姓名:" + name + "\n"; /* Android文档:ContactsContract.CommonDataKinds.Phone: CONTENT_URI:The content:// style URI for all data records of the CONTENT_ITEM_TYPE MIME type, combined with the associated raw contact and aggregate contact data. */ // 读取号码 if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { //Uri phoneUri=Uri.parse("content://com.android.contacts/data/phones"); // 下面的ContactsContract.CommonDataKinds.Phone.CONTENT_URI可以用phoneUri代替 Cursor PhoneCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, //ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID +" = ?", new String[]{rawContactsId}, null); while (PhoneCur.moveToNext()) { String number = PhoneCur.getString(PhoneCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); String numberType = PhoneCur.getString(PhoneCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)); str += numberType + ":" + number + "\n"; } PhoneCur.close(); } // 读取Email //Uri emailUri=Uri.parse("content://com.android.contacts/data/emails"); // 下面的ContactsContract.CommonDataKinds.Email.CONTENT_URI可以用emailUri代替 Cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", new String[]{id}, null); while (emailCur.moveToNext()) { String email = emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); String emailType = emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE)); str += emailType + ":" + email + "\n"; } /*Email类型: 1:TYPE_HOME 2:TYPE_WORK 3:TYPE_OTHER 4:TYPE_MOBILE */ emailCur.close(); // 读取备注 String noteWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; String[] noteWhereParams = new String[]{id, ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE}; Cursor noteCur = cr.query(ContactsContract.Data.CONTENT_URI, null, noteWhere, noteWhereParams, null); if (noteCur.moveToFirst()) { String note = noteCur.getString(noteCur.getColumnIndex(ContactsContract.CommonDataKinds.Note.NOTE)); str += "备注:" + note + "\n"; } noteCur.close(); // 读取邮政地址 String addrWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; String[] addrWhereParams = new String[]{id,ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE}; Cursor addrCur = cr.query(ContactsContract.Data.CONTENT_URI, null, addrWhere, addrWhereParams, null); while(addrCur.moveToNext()) { String poBox = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POBOX)); String street = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET)); String city = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY)); String state = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION)); String postalCode = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE)); String country = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY)); String type = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE)); if (poBox != "") { str += "POBOX:" + poBox + "\n"; } if (street != "") { str += "STREET:" + street + "\n"; } if (city != "") { str += "CITY:" + city + "\n"; } if (state != "") { str += "REGION:" + state + "\n"; } if (postalCode != "") { str += "POSTCODE:" + postalCode + "\n"; } if (country != "") { str += "COUNTRY:" + country + "\n"; } if (type != "") { str += "TYPE:" + type + "\n"; } } addrCur.close(); // 读取即时消息 String imWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; String[] imWhereParams = new String[]{id, ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE}; Cursor imCur = cr.query(ContactsContract.Data.CONTENT_URI,null, imWhere, imWhereParams, null); while(imCur.moveToNext()) { String imName = imCur.getString(imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA)); String imType = imCur.getString(imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.PROTOCOL)); str += imType + ":" + imName + "\n"; } imCur.close(); // 读取公司及职位 String orgWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; String[] orgWhereParams = new String[]{id,ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE}; Cursor orgCur = cr.query(ContactsContract.Data.CONTENT_URI,null, orgWhere, orgWhereParams, null); while (orgCur.moveToNext()) { String orgName = orgCur.getString(orgCur.getColumnIndex(ContactsContract.CommonDataKinds.Organization.DATA)); String title = orgCur.getString(orgCur.getColumnIndex(ContactsContract.CommonDataKinds.Organization.TITLE)); str += orgName + ":" + title + "\n"; } orgCur.close(); str += "\n"; } } } }
NewContactActivity:
package waga.android.study.TestContacts; import android.app.Activity; import android.content.ContentUris; import android.content.ContentValues; import android.net.Uri; import android.os.Bundle; import android.provider.ContactsContract; import android.provider.ContactsContract.RawContacts; import android.provider.ContactsContract.CommonDataKinds.Email; import android.provider.ContactsContract.CommonDataKinds.Im; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.CommonDataKinds.StructuredName; import android.provider.ContactsContract.Contacts.Data; import android.view.View; import android.widget.Button; import android.widget.EditText; public class NewContactActivity extends Activity { EditText edittext_name; EditText edittext_number; EditText edittext_email; EditText edittext_qq; Button btn_Save; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.new_contact); setTitle(R.string.menu_newContact); edittext_name = (EditText)findViewById(R.id.EditText_name); edittext_number = (EditText)findViewById(R.id.EditText_number); edittext_email = (EditText)findViewById(R.id.EditText_email); edittext_qq = (EditText)findViewById(R.id.EditText_qq); btn_Save =(Button)findViewById(R.id.Button_Save); edittext_name.setText("test-1"); edittext_number.setText("13636431707-1"); edittext_email.setText("[email]test1@sim.com[/email]"); edittext_qq.setText("27015155-1"); btn_Save.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { String strName = edittext_name.getText().toString(); String strNumber = edittext_number.getText().toString(); String strEmail = edittext_email.getText().toString(); String strQQ = edittext_qq.getText().toString(); // 新建联系人 insert(strName, strNumber, strEmail, strQQ); // 结束activity finish(); } }); } // 新建联系人 public boolean insert(String given_name, String mobile_number, String work_email, String im_qq) { try { ContentValues values = new ContentValues(); // 下面的操作会根据RawContacts表中已有的rawContactId使用情况自动生成新联系人的rawContactId Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values); long rawContactId = ContentUris.parseId(rawContactUri); // 向data表插入姓名数据 if (given_name != "") { values.clear(); values.put(Data.RAW_CONTACT_ID, rawContactId); values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); values.put(StructuredName.GIVEN_NAME, given_name); getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values); } // 向data表插入电话数据 if (mobile_number != "") { values.clear(); values.put(Data.RAW_CONTACT_ID, rawContactId); values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE); values.put(Phone.NUMBER, mobile_number); values.put(Phone.TYPE, Phone.TYPE_MOBILE); getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values); } // 向data表插入Email数据 if (work_email != "") { values.clear(); values.put(Data.RAW_CONTACT_ID, rawContactId); values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE); values.put(Email.DATA, work_email); values.put(Email.TYPE, Email.TYPE_WORK); getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values); } // 向data表插入QQ数据 if (im_qq != "") { values.clear(); values.put(Data.RAW_CONTACT_ID, rawContactId); values.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE); values.put(Im.DATA, im_qq); values.put(Im.PROTOCOL, Im.PROTOCOL_QQ); getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values); } } catch (Exception e) { return false; } return true; } }
DeleteContactActivity:
package waga.android.study.TestContacts; import android.app.Activity; import android.content.ContentUris; import android.os.Bundle; import android.provider.ContactsContract.RawContacts; import android.view.View; import android.widget.Button; import android.widget.EditText; public class DeleteContactActivity extends Activity { EditText edittext_rawContactId; Button btn_Delete; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.delete_contact); setTitle(R.string.menu_deleteContact); edittext_rawContactId = (EditText)findViewById(R.id.EditText_rawContactId); btn_Delete =(Button)findViewById(R.id.Button_Delete); btn_Delete.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { long rawContactId = Long.parseLong(edittext_rawContactId.getText().toString()); // 新建联系人 delete(rawContactId); // 结束activity finish(); } }); } // 删除联系人 public void delete(long rawContactId) { getContentResolver().delete(ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId), null, null); //getContentResolver().delete(ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, rawContactId), null, null); } } **************************** UpdateContactActivity: package waga.android.study.TestContacts; import android.app.Activity; import android.content.ContentValues; import android.os.Bundle; import android.provider.ContactsContract; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.view.View; import android.widget.Button; import android.widget.EditText; public class UpdateContactActivity extends Activity { EditText edittext_rawContactId; EditText edittext_NewNumber; Button btn_Update; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.update_contact); setTitle(R.string.menu_updateContact); edittext_rawContactId = (EditText)findViewById(R.id.EditText_rawContactId_Delete); edittext_NewNumber = (EditText)findViewById(R.id.EditText_newNumber); btn_Update =(Button)findViewById(R.id.Button_Update); btn_Update.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { String strRawContactId = edittext_rawContactId.getText().toString(); String strNewNumber = edittext_NewNumber.getText().toString(); // 更新联系人 update(strRawContactId, strNewNumber); // 结束activity finish(); } }); } // 更新联系人 public void update(String rawRawContactId, String NewNumber) { ContentValues values = new ContentValues(); values.put(Phone.NUMBER, NewNumber); values.put(Phone.TYPE, Phone.TYPE_MOBILE); String Where = ContactsContract.Data.RAW_CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; String[] WhereParams = new String[]{rawRawContactId, Phone.CONTENT_ITEM_TYPE, }; getContentResolver().update(ContactsContract.Data.CONTENT_URI, values, Where, WhereParams); } }