`
adashao
  • 浏览: 21405 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android 删除手机联系人,添加手机联系人,更新手机联系人信息

阅读更多
添加联系人


private void addContact(Context context, String name,
String organisation,String phone, String fax, String email, String address,String website){

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

//在名片表插入一个新名片
ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null).withValue(ContactsContract.RawContacts._ID, 0).withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null).withValue(
ContactsContract.RawContacts.AGGREGATION_MODE,ContactsContract.RawContacts.AGGREGATION_MODE_DISABLED).build());

// add name
//添加一条新名字记录;对应RAW_CONTACT_ID为0的名片
if (!name.equals("")) {
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(
ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE).withValue(
ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,name).build());
}

//添加昵称
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(
ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Nickname.CONTENT_ITEM_TYPE).withValue(ContactsContract.CommonDataKinds.Nickname.NAME,"Anson昵称").build());

// add company
if (!organisation.equals("")) {
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE).withValue(
ContactsContract.CommonDataKinds.Organization.COMPANY,organisation).withValue(
ContactsContract.CommonDataKinds.Organization.TYPE,ContactsContract.CommonDataKinds.Organization.TYPE_WORK).build());
}

// add phone
if (!phone.equals("")) {
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE).withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,phone).withValue(ContactsContract.CommonDataKinds.Phone.TYPE,1).build());
}

// add Fax
if (!fax.equals("")) {
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).withValueBackReference(
ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(
ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE).withValue(
ContactsContract.CommonDataKinds.Phone.NUMBER,fax)
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE,
ContactsContract.CommonDataKinds.Phone.TYPE_FAX_WORK).build());
}



// add email
if (!email.equals("")) {
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(
ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(
ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE).withValue(ContactsContract.CommonDataKinds.Email.DATA,email).withValue(ContactsContract.CommonDataKinds.Email.TYPE,1).build());
}

// add address
if (!address.equals("")) {
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(
ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE).withValue(
ContactsContract.CommonDataKinds.StructuredPostal.STREET,address)
.withValue(ContactsContract.CommonDataKinds.StructuredPostal.TYPE,
ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK).build());
}

// add website
if (!website.equals("")) {
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE).withValue(
ContactsContract.CommonDataKinds.Website.URL,website)
.withValue(
ContactsContract.CommonDataKinds.Website.TYPE,
ContactsContract.CommonDataKinds.Website.TYPE_WORK).build());
}

// add IM
String qq1="452824089";
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).withValueBackReference(
ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(
ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE).withValue(
ContactsContract.CommonDataKinds.Im.DATA1,qq1)
.withValue(
ContactsContract.CommonDataKinds.Im.PROTOCOL,
ContactsContract.CommonDataKinds.Im.PROTOCOL_QQ).build());

// add logo image
// Bitmap bm = logo;
// if (bm != null) {
// ByteArrayOutputStream baos = new ByteArrayOutputStream();
// bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
// byte[] photo = baos.toByteArray();
// if (photo != null) {
//
// ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
// .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
// .withValue(ContactsContract.Data.MIMETYPE,
// ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE)
// .withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, photo)
// .build());
// }
// }

try {
context.getContentResolver().applyBatch(
ContactsContract.AUTHORITY, ops);
} catch (Exception e){
}

}


1.删除联系人
private void delContact(Context context, String name) {

Cursor cursor = getContentResolver().query(Data.CONTENT_URI,new String[] { Data.RAW_CONTACT_ID },

ContactsContract.Contacts.DISPLAY_NAME + "=?",new String[] { name }, null);

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

if (cursor.moveToFirst()) {
do {
long Id = cursor.getLong(cursor.getColumnIndex(Data.RAW_CONTACT_ID));

ops.add(ContentProviderOperation.newDelete(
ContentUris.withAppendedId(RawContacts.CONTENT_URI,Id)).build());
try {
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
}
catch (Exception e){}
} while (cursor.moveToNext());
cursor.close();
}
}


更新联系人信息

private void updateContact(Context context,String oldname, String name, String phone, String email,String website, String organization, String note) {

Cursor cursor = getContentResolver().query(Data.CONTENT_URI,new String[] { Data.RAW_CONTACT_ID },

ContactsContract.Contacts.DISPLAY_NAME + "=?",new String[] { oldname }, null);
cursor.moveToFirst();
String id = cursor.getString(cursor.getColumnIndex(Data.RAW_CONTACT_ID));
cursor.close();
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();


更新电话号码

ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(

Data.RAW_CONTACT_ID + "=?" + " AND "+ ContactsContract.Data.MIMETYPE + " = ?" +
" AND " + Phone.TYPE + "=?",new String[] { String.valueOf(id),Phone.CONTENT_ITEM_TYPE,
String.valueOf(Phone.TYPE_HOME) }).withValue(Phone.NUMBER, phone).build());

// 更新email
ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(Data.RAW_CONTACT_ID + "=?" + " AND "+ ContactsContract.Data.MIMETYPE + " = ?" +" AND " + Email.TYPE + "=?",new String[] { String.valueOf(id),Email.CONTENT_ITEM_TYPE,
String.valueOf(Email.TYPE_HOME) }).withValue(Email.DATA, email).build());

// 更新姓名
ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(Data.RAW_CONTACT_ID + "=?" + " AND "+ ContactsContract.Data.MIMETYPE + " = ?",new String[] { String.valueOf(id),StructuredName.CONTENT_ITEM_TYPE }).withValue(StructuredName.DISPLAY_NAME, name).build());

// 更新网站
ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(Data.RAW_CONTACT_ID + "=?" + " AND "+ ContactsContract.Data.MIMETYPE + " = ?",new String[] { String.valueOf(id),Website.CONTENT_ITEM_TYPE }).withValue(Website.URL, website).build());

// 更新公司
ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(Data.RAW_CONTACT_ID + "=?" + " AND "+ ContactsContract.Data.MIMETYPE + " = ?",new String[] { String.valueOf(id),Organization.CONTENT_ITEM_TYPE })
.withValue(Organization.COMPANY, organization).build());

// 更新note
ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(Data.RAW_CONTACT_ID + "=?" + " AND "+ ContactsContract.Data.MIMETYPE + " = ?",new String[] { String.valueOf(id),Note.CONTENT_ITEM_TYPE }).withValue(Note.NOTE, note).build());

try{
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
} catch (Exception e) {
}
}


添加权限
<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
<uses-permission android:name="android.permission.WRITE_CONTACTS"></uses-permission>

///联系人分组操作
Cursor cursor = getContentResolver().query(Groups.CONTENT_URI,null,null,null,null); 
for (cursorAll.moveToFirst();!(cursorAll.isAfterLast());cursorAll.moveToNext()) { 
组名:cursor.getString(cursor.getColumnIndex(Groups.TITLE)); 
组id:curso.getLong(cursor.getColumnIndex(Groups._ID)); 

 
新建组(名字为name): 
    ContentValues values = new ContentValues(); 
    String name = "同学";
   values.put(Groups.TITLE, name); 
    getContentResolver().insert(Groups.CONTENT_URI, values); 
 
删除组(Id为groupId): 
    getContentResolver().delete(Uri.parse(Groups.CONTENT_URI +"?" +ContactsContract.CALLER_IS_SYNCADAPTER + "=true"),Groups._ID+"="+groupId,null); 
 
给组重命名(oldName;newName;groupId): 
Uri uri = ContentUris.withAppendedId(Groups.CONTENT_URI, groupId); 
ContentValues values = new ContentValues(); 
values.put(Groups.TITLE,newName); 
getContentResolver().update(uri,values,null,null); 
 
给组添加成员(groupId,personId): 
ContentValues values = new ContentValues();       
values.put(ContactsContract.CommonDataKinds.GroupMembership.RAW_CONTACT_ID,personId);       
values.put(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID,groupId);       
values.put(ContactsContract.CommonDataKinds.GroupMembership.MIMETYPE,ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE);         
getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values); 
 
给组移除成员(groupId,personId): 
getContentResolver().delete(ContactsContract.Data.CONTENT_URI,ContactsContract.CommonDataKinds.GroupMembership.RAW_CONTACT_ID + "=? and " +ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID + "=? and " +ContactsContract.CommonDataKinds.GroupMembership.MIMETYPE + "=?",new String[]{"" + personId,"" + groupId,ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE}); 

注:
1 添加成员到分组的personId是指RawContacts._ID,而不是Contacts._ID。
2 当一个联系人名片里有几个联系人的情况时,要把每个RawContacts._ID都添加进分组。

这个问题很严重啊,使用Contacts._ID,碰到有合并的联系人以后,关于分组的所有操作都会错乱掉。
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    android 往通讯录中添加和删除联系人

    android 往通讯录中添加和删除联系人

    通讯录添加联系人删除联系人

    动态申请权限没加,需要自己加 删除所有联系人时,注意下自己的手机的安卓版本 我这边只有6.0和7.0的手机,发现清理时有些不太一样

    Android开发实验---通讯录.docx

    关于通讯录获取联系人信息以及联系人信息的存储结构的分析。 2. 解决添加联系人的表中添加数据以及读取已保存的数据 3. 实现通讯录的基本功能的具体实现。 4. 对通讯录界面的具体设计,给人一种方便的操作通道。 5....

    Android_联系人数据库介绍以及对联系人的基本操作

    该表保存了所有的手机测联系人,每个联系人占一行,该表保存了联系人的ContactID、联系次数、最后一次联系的时间、是否含有号码、是否被添加到收藏夹等信息。 2、raw_contacts表 该表保存了所有创建过的手机测...

    Android手机通讯录制作

    点击通讯录主界面选项菜单中的“添加联系人”菜单项,进入添加联系人界面,输入联系人的基本信息,包括姓名、手机号码、家庭地址、单位名称、Email、QQ号这些信息,姓名和手机号码必须不为空,且唯一。点击通讯录中...

    android 实现手机通讯录代码

    android实现手机通讯录,参照手机中的通讯录软件,编写一个简单的通讯录程序,包括添加联系人、删除联系人、修改联系人、查询联系人等基本功能,每条记录至少包含联系人姓名和电话号码两个字段 。

    通讯录实现添加,删除,查找联系人,密码锁功能.doc

    通讯录实现添加,删除,查找,修改联系人,密码锁功能,可选择性保存联系人姓名,电话,性别,学号,地址等

    android版手机通讯录

    简单手机通讯录的实现,查询手机联系人,添加手机联系人,删除手机联人,可打电话,发短信功能。

    phoneContact:基于android原生的android联系人。实现增加联系人、删除、查看、搜索、分类、备份、搜索功能

    电话联系方式 基于android原生的android联系人。实现增加联系人、删除、查看、搜索、分类、备份、搜索功能

    android联系人管理

    联系人管理器:可以新建、编辑、删除联系人,可以添加、删除、重命名分组,可以移动联系人到另一个分组,有生日的联系人还可以在生日当天进行生日提醒。包中含有注解详细的源码及界面截图,设计简陋仅供大家参考!

    Android通讯录分组联系人更新

    Android 调用系统通讯录 新建分组,添加分组数据 删除分组数据

    Android Studio我的电话簿APP

    用户可以查看联系人信息,修改联系人信息,删除联系人信息,添加联系人,清空联系人列表。亮点是可以对指定联系人打电话和发短信。生成APK后可安装到手机中真实实现打电话和发短信。亲测有效,本人期末做的程序,挺...

    Android studio 通讯录开发

    使用Android开发 简单 强悍 适合初学者,代码具有登录界面,注册界面,添加通讯录联系人,修改联系人,删除联系人,查询联系人等多个功能,简单使用十分适合初学者练习 参考使用 内有apk 可直接在手机上运行

    通讯录(安卓源码,可以添加联系人和删除,查找,对联系人可以拨打,发短信)

    基于安卓eclipse上开发,可以实现对联系人的添加,删除,查找,拨打,发短信等功能,无错。

    基于android手机通讯录的设计与实现的毕业论文

    - 实现通讯录的基本功能,包括添加、删除、编辑和搜索联系人信息。 - 实现通讯录数据的备份和恢复功能,以便在需要时可以轻松地还原数据。 - 提供联系人信息的分类和分组功能,方便用户根据自己的需求进行管理和查找...

    仿通讯录 实现快速查找

    模仿手机通讯录效果,可用于查看通讯录联系人。

    天天手机助手

    获取手机SIM卡联系人,支持添加、修改、删除联系人,快速查找联系人,通讯等操作 2、电池管理 可以显示电池当前的电量,温度,电压,电池充电时进行实时保护; 3、照相机 可以调焦进行拍照,开启和关闭闪关灯,...

    Android联系人ContentProvider

    用ContentProvider实现联系人的获取,添加,删除,修改,也可拨打电话,发送信息。

    简易手机通讯录

    主界面,通过listview 展示所有联系人信息,并在没有联系人时给出友好提示  2.主界面.显示最近查看的某个联系人信息  3.主界面,可以长按某联系人项,弹出菜单,删除该联系人;删除联系人后,在手机通知栏弹出信息给...

Global site tag (gtag.js) - Google Analytics