对联系人进行增删改查
我已經(jīng)將聯(lián)系人操作的方法進(jìn)行了封裝,暴露了幾個(gè)重要的方法,方便以后調(diào)用。
1.?public void printContactsList() //?獲取到的聯(lián)系人列表(用于測(cè)試用)
2.?public ArrayList<ContactBean> getContactsList() //?得到手機(jī)和SIM卡中的聯(lián)系人列表(姓名 + 電話號(hào)碼)
3.?public void add(String name, String phoneNumber) //?添加一個(gè)新的聯(lián)系人數(shù)據(jù)
4.?public boolean delete(String name) //?刪除單個(gè)聯(lián)系人數(shù)據(jù)
5.?public boolean update(String name, String phoneNumber) //?更新聯(lián)系人數(shù)據(jù)
6.?public boolean findNameByPhoneNumber(String phoneNumber) //?根據(jù)電話號(hào)碼查詢姓名
?
增刪改查通訊錄:http://blog.csdn.net/xiazdong/article/details/7713419
監(jiān)聽(tīng)聯(lián)系人的改變:http://www.eoeandroid.com/thread-234378-1-1.html
?
全部代碼:
package com.kale.contatctest;import java.util.ArrayList; import java.util.Collection;import android.content.ContentResolver; import android.content.ContentUris; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.Contacts.Data; import android.text.TextUtils; import android.util.Log; import android.widget.Toast;public class ContactsManager {private Context mContext = null;public ContactsManager(Context context) {mContext = context;}/*** @description 打印獲取到的聯(lián)系人列表(用于測(cè)試用)**/public void printContactsList() {System.out.println("showContactsList----------------->" + getContactsList().size());for (int i = 0; i < getContactsList().size(); i++) {ContactBean cb = new ContactBean();cb = getContactsList().get(i);System.out.println(i + 1 + " " + cb.getContactName() + " " + cb.getPhoneNumber());}}/*** @description 得到手機(jī)和SIM卡中的聯(lián)系人列表(姓名 + 電話號(hào)碼)** @return*/public ArrayList<ContactBean> getContactsList() {ArrayList<ContactBean> contactsList = new ArrayList<ContactBean>();Collection<ContactBean> collection = getPhoneList();contactsList.addAll(collection);collection.clear();collection = getSIMList();contactsList.addAll(collection);return contactsList;}/*** 將“手機(jī)通訊錄”聯(lián)系人添加到list中*/private ArrayList<ContactBean> getPhoneList() {Uri uri = Phone.CONTENT_URI;return getContactsList(uri);}/*** 將“手機(jī)SIM”聯(lián)系人添加到list中*/private ArrayList<ContactBean> getSIMList() {Uri uri = Uri.parse("content://icc/adn");return getContactsList(uri);}/*** @param uri* @return 根據(jù)URL來(lái)得到手機(jī)/SIM卡中的聯(lián)系人列表*/private ArrayList<ContactBean> getContactsList(Uri uri) {ArrayList<ContactBean> list = new ArrayList<ContactBean>();ContentResolver resolver = mContext.getContentResolver();/** 獲取庫(kù)Phone表字段,僅僅獲取電話號(hào)碼聯(lián)系* 它所指向的其實(shí)是“content://com.android.contacts/data/phones”。* 這個(gè)URL對(duì)應(yīng)著contacts表 和 raw_contacts表 以及 data表 所以說(shuō)我們的數(shù)據(jù)都是從這三個(gè)表中獲取的。*/String[] PHONES_PROJECTION = new String[] { Phone.DISPLAY_NAME, Phone.NUMBER, Phone.CONTACT_ID };Cursor phoneCursor = resolver.query(uri, PHONES_PROJECTION, null, null, null);if (phoneCursor != null) {while (phoneCursor.moveToNext()) {// 得到手機(jī)號(hào)碼String phoneNumber = phoneCursor.getString(1);// 當(dāng)手機(jī)號(hào)碼為空的或者為空字段 跳過(guò)當(dāng)前循環(huán),即使這個(gè)聯(lián)系人有名字也跳出循環(huán)if (TextUtils.isEmpty(phoneNumber)) {continue;}// 如果有電話好么,那么就得到聯(lián)系人名稱String contactName = phoneCursor.getString(0);ContactBean cb = new ContactBean();cb.setContactName(contactName);cb.setPhoneNumber(phoneNumber);list.add(cb);}phoneCursor.close(); // 關(guān)閉指針 }return list;}/*** 添加一個(gè)新的聯(lián)系人數(shù)據(jù)* * @param name* @param phoneNumber* @return 是否添加成功*/public void add(String name, String phoneNumber) {// 根據(jù)號(hào)碼找數(shù)據(jù),如果存在則不添加,因?yàn)橛刑?hào)碼但無(wú)名字是不允許的// if (!findNameByPhoneNumber(phoneNumber)) {// 插入raw_contacts表,并獲取_id屬性Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");ContentResolver resolver = mContext.getContentResolver();ContentValues values = new ContentValues();long contact_id = ContentUris.parseId(resolver.insert(uri, values));// 插入data表uri = Uri.parse("content://com.android.contacts/data");// 添加姓名values.put("raw_contact_id", contact_id);values.put(Data.MIMETYPE, "vnd.android.cursor.item/name");values.put("data2", name);// values.put("data1", "Jack"); resolver.insert(uri, values);values.clear();// 添加手機(jī)號(hào)碼values.put("raw_contact_id", contact_id);values.put(Data.MIMETYPE, "vnd.android.cursor.item/phone_v2");values.put("data2", "2"); // 2表示手機(jī)values.put("data1", phoneNumber);resolver.insert(uri, values);values.clear();}/*** 刪除單個(gè)聯(lián)系人數(shù)據(jù)* * @param name* @return 是否刪除成功*/public boolean delete(String name) {try {// 根據(jù)姓名求idUri uri = Uri.parse("content://com.android.contacts/raw_contacts");ContentResolver resolver = mContext.getContentResolver();Cursor cursor = resolver.query(uri, new String[] { Data._ID }, "display_name = ?", new String[] { name }, null);if (cursor.moveToFirst()) {int id = cursor.getInt(0);// 根據(jù)id刪除data中的相應(yīng)數(shù)據(jù)resolver.delete(uri, "display_name = ?", new String[] { name });uri = Uri.parse("content://com.android.contacts/data");resolver.delete(uri, "raw_contact_id = ?", new String[] { id + "" });return true;}} catch (Exception e) {e.printStackTrace();}Toast.makeText(mContext, "刪除失敗", Toast.LENGTH_SHORT).show();return false;}/** // 刪除全部聯(lián)系人,十分耗時(shí)間。有錯(cuò)誤 public boolean deleteAllContact() { ContentResolver* resolver = mContext .getContentResolver(); Cursor contactsCur =* resolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null,* null); while(contactsCur.moveToNext()){ //獲取ID String rawId =* contactsCur.* getString(contactsCur.getColumnIndex(ContactsContract.Contacts._ID));* //刪除 String where = ContactsContract.Data._ID + " =?"; String[]* whereparams = new String[]{rawId};* resolver.delete(ContactsContract.RawContacts.CONTENT_URI, where,* whereparams); } if(contactsCur.moveToNext() == false){ return true; }* return false; }*//** //刪除全部數(shù)據(jù) public boolean deleteAll(){ getContentResolver().delete(* ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId), null,* null); try { ContentResolver resolver = mContext .getContentResolver();* Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");* resolver.delete(uri, "display_name= true", new String[]{"true"}); uri =* Uri.parse("content://com.android.contacts/data"); resolver.delete(uri,* "raw_contact_id= true", new String[]{"true"});* * } catch (Exception e) { Toast.makeText(mContext, "刪除失敗",* Toast.LENGTH_SHORT).show(); e.printStackTrace(); } return false; }*//*** @description 更新聯(lián)系人數(shù)據(jù)* * @param name* @param phoneNumber* @return 是否更新成功*/public boolean update(String name, String phoneNumber) {try {// 根據(jù)姓名求id,再根據(jù)id刪除Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");ContentResolver resolver = mContext.getContentResolver();Cursor cursor = resolver.query(uri, new String[] { Data._ID }, "display_name = ?", new String[] { name }, null);if (cursor.moveToFirst()) {int id = cursor.getInt(0);Uri mUri = Uri.parse("content://com.android.contacts/data");// 對(duì)data表的所有數(shù)據(jù)操作ContentResolver mResolver = mContext.getContentResolver();ContentValues values = new ContentValues();values.put("data1", phoneNumber);mResolver.update(mUri, values, "mimetype=? and raw_contact_id=?", new String[] { "vnd.android.cursor.item/phone_v2", id + "" });return true;}} catch (Exception e) {e.printStackTrace();}Toast.makeText(mContext, "修改失敗", Toast.LENGTH_SHORT).show();return false;}/*** @description 根據(jù)電話號(hào)碼查詢姓名** @param phoneNumber* @return 查詢是否成功*/public boolean findNameByPhoneNumber(String phoneNumber) {// URI = content://com.android.contacts/data/phones/filter/#Uri uri = Uri.parse("content://com.android.contacts/data/phones/filter/" + phoneNumber);ContentResolver resolver = mContext.getContentResolver();// 從raw_contact表中返回display_nameCursor cursor = resolver.query(uri, new String[] { Data.DATA4 }, null, null, null); if (cursor.moveToFirst()) {Log.d("ContactsManager", "找到這個(gè)號(hào)碼");return true;} else {Log.e("ContactsManager", "沒(méi)找到這個(gè)號(hào)碼");return false;}}}?
總結(jié)
以上是生活随笔為你收集整理的对联系人进行增删改查的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【转载】(EM算法)The EM Alg
- 下一篇: Oracle 11g RAC featu