`
adashao
  • 浏览: 22000 次
  • 性别: 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添加联系人

    通过这个类,我们可以读取、写入、更新和删除联系人信息。 添加联系人通常涉及以下几个步骤: 1. **请求权限**:在AndroidManifest.xml文件中,必须声明`READ_CONTACTS`和`WRITE_CONTACTS`权限,以便应用能够读写...

    Android 动态添加联系人

    在Android系统中,动态添加联系人是一项常见的功能,它允许应用程序在运行时向用户的设备通讯录插入新的联系人信息。这个过程涉及到Android的Content Provider机制,权限管理,以及使用ContentResolver进行数据操作...

    Android代码-Android手机的通讯录联系人信息.zip

    这个名为"Android代码-Android手机的通讯录联系人信息.zip"的压缩包可能包含了一个Android应用的源代码,该应用与读取、修改或管理手机上的通讯录联系人信息有关。下面将详细介绍Android平台中处理通讯录联系人信息...

    Android手机的通讯录联系人信息.zip

    本资料包“Android手机的通讯录联系人信息.zip”提供了Android应用开发的源码示例,帮助开发者深入理解如何在Android平台上操作和管理联系人数据。 首先,Android的通讯录功能是基于Content Provider构建的,...

    Android Studio 获取手机联系人项目main文件

    我们可以遍历Cursor,将联系人信息展示在ListView中,或者执行其他操作。例如,获取联系人的姓名和电话号码: ```java while (cursor.moveToNext()) { String displayName = cursor.getString(cursor....

    Android模拟手机联系人app

    此外,UI设计方面,可以使用Android Studio提供的布局工具设计用户友好的界面,例如使用EditText用于输入联系人信息,Button用于执行添加、编辑和删除操作,ListView或RecyclerView用于显示联系人列表。同时,还可以...

    android 联系人模块例子

    更新联系人信息则使用`ContentResolver.update()`,同样需要提供URI、`ContentValues`和匹配条件。例如,若要更新某个联系人的电话号码,需提供联系人的ID和新的电话值。 5. **删除联系人**: 删除联系人使用`...

    Android手机通讯录制作

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

    android读取系统联系人

    我们需要遍历Cursor来获取联系人信息。例如,读取联系人ID和姓名: ```java while (cursor.moveToNext()) { String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); String name...

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

    在Android系统中,管理通讯录包括添加联系人和删除联系人是常见的操作,尤其是在开发相关的应用程序时。在处理这些功能时,必须考虑到Android权限管理和不同版本间的差异性。以下是关于这个主题的详细知识点: 1. *...

    android增加联系人到通讯录

    在Android平台上,添加联系人到用户的通讯录是一项常见的任务,涉及到对系统API的深度理解和权限管理。本示例,"android增加联系人到通讯录",将指导我们如何实现这一功能。下面,我们将深入探讨这一过程涉及的关键...

    Pro Android学习:联系人API

    通过这个API,开发者可以实现诸如读取联系人信息、添加新联系人、更新现有联系人、删除联系人以及管理联系人分组等一系列功能。在"Pro Android学习:联系人API"中,我们将深入探讨这些关键知识点。 首先,Android的...

    android手机联系人

    添加联系人通常涉及到以下步骤: 1. 获取ContentResolver实例,它是应用程序与Content Provider交互的桥梁。 2. 构建ContactDataKind对象,这代表了联系人中的一个特定类型的数据,如电话号码、电子邮件地址等。 3. ...

    Android 系统联系人操作

    更新联系人信息同样使用ContentValues,但需要先通过query()获取到要修改的联系人ID,然后用ContentResolver的update()方法进行更新。 6. **删除联系人**: 删除联系人可以通过ContentResolver的delete()方法,...

    android 联系人广播协议 代码

    在Android系统中,联系人管理是一项重要的功能,它允许用户存储、查看和管理他们的联系人信息。为了实现这一功能,Android提供了一套广播机制,即联系人广播协议,用于监听和响应联系人数据的更改。本文将深入探讨...

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

    添加联系人通常分为两个步骤:创建联系人数据和插入到数据库。首先,你需要构建一个`ContentValues`对象,填充联系人的相关信息,如姓名、电话、电子邮件等。例如: ```java ContentValues values = new ...

    获取手机联系人的简单DEMO

    我们可以通过ContentResolver查询ContentProvider来获取联系人信息。以下是一个基本的查询示例: ```java ContentResolver resolver = getContentResolver(); Cursor cursor = resolver.query(ContactsContract....

    android_实战_联系人

    在Android开发中,联系人管理是一项基础且重要的功能,它涉及到对系统中用户联系人的读取、添加、修改和删除操作。本项目实战——"android_实战_联系人",旨在帮助开发者深入理解和掌握Android的ContentProvider机制...

    Android Studio实现通讯录

    主页面包含`对联系人信息增删改查`这四种功能:在添加联系人页面,输入联系人信息,若联系人在数据库中不存在则可以添加成功;在删除和修改用户页面,都可以通过姓名搜索到指定联系人的信息,然后对联系人进行删除...

    Android手机的通讯录联系人信息.rar

    这个“Android手机的通讯录联系人信息.rar”压缩包可能包含了一些关于如何管理和操作Android设备上通讯录的资料。在这里,我们将深入探讨Android手机的通讯录联系人信息的相关知识点。 1. **联系人数据存储**: - ...

Global site tag (gtag.js) - Google Analytics