ZNDS智能电视网 推荐当贝市场

TV应用下载 / 资源分享区

软件下载 | 游戏 | 讨论 | 电视计算器

综合交流 / 评测 / 活动区

交流区 | 测硬件 | 网站活动 | Z币中心

新手入门 / 进阶 / 社区互助

新手 | 你问我答 | 免费刷机救砖 | ROM固件

查看: 12089|回复: 0
上一主题 下一主题
[教程]

对通讯录的各项操作,完整版,经过测试,方便后来者

[复制链接]
跳转到指定楼层
楼主
发表于 2013-8-28 16:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
79 本帖最后由 YooHi 于 2013-7-1 19:26 编辑       新手一枚,刚学到此处,综合前人经验,搞定此处理,方便后来者,错误及待优化之处往高手指点,感谢!   
   
---------------------------------------------------MainActivity------------------------------------------------------------------------------------------------------   
package com.eboy.readwritecontact;   
import android.os.Bundle;   
import android.app.Activity;   
import android.util.Log;   
import android.view.Menu;   
import com.eboy.test.*;   
public class MainActivity extends Activity {   
String strName = "";   
String strPhone = "";   
String strAllContacts = "";   
   
final String tag ="MainThread";   
ContactsOptions ct = new ContactsOptions();   
   
    @Override   
    public void onCreate(Bundle savedInstanceState) {   
        super.onCreate(savedInstanceState);   
        setContentView(R.layout.activity_main);   
           
        try {   
   //添加用户信息   
   //String name, String phone, String email, String address, String nickname,   
   //String organization, String website, String QQ   
   ct.AddOneContact(this, "张三", "33333333333", "88888888@139.com", "江苏省徐州市,221600",   
     "zhangsan", "中国石化", "http://www.yoohi.com.cn", "12345678");   
      
         //依据号码查询姓名/邮箱/。。。。。。,多个返回之间用下划线"_"分割   
   //(Context,number,name,mimetype)   
         strName = ct.QueryContacts(this, "13916061000", "", "vnd.android.cursor.item/email_v2");   
         //String str[] = strName.split("_");//int i = str.length;   
            
         //依据姓名查询号码/邮箱/。。。。。。。。,多个返回之间用下划线"_"分割   
   strPhone = ct.QueryContacts(this, "","First", "vnd.android.cursor.item/email_v2");   
   Log.i(tag, "strName:" + strName + "  strPhone:" + strPhone);   
      
   //String str1[] = strPhone.split("_");//int i = str1.length;   
      
   //查询所有用户列表及对应信息   
   strAllContacts = ct.ReadAllContacts(this);   
   Log.i(tag, strAllContacts);   
      
         //String name, String phone, String email, String address, String nickname,   
   //String organization, String website, String QQ   
         //name_phone_email_address_nickname_organization_website_qq_   
         String contact[] = {"first_13011111111_hello@china.com__nickname_easyfly_www.yoohi.cn_87654321_",   
           "second_13022222222_hello@china.com__nickname_easyfly_www.yoohi.cn_87654321_",   
           "third_13033333333_thanks@china.com_江苏徐州_peter_yoohi_www.yoohi.com.cn_12345678_",   
           "four_13044444444_zhejiang@china.com_中国上海_michael_easyfly_www.yoohi.taobao.com_88884444_"};   
         ct.AddContactsInTransaction(this,contact);   
            
         //update contact   
         ct.UpdateContact(this, "second", "88888888888");   
            
         //(Context,name1_name2_name3_)   
         ct.DeleteContact(this, "first_second_third_four_");   
            
            
            
  } catch (Exception e) {   
   e.printStackTrace();   
   Log.i(tag, "---------------------------------------");   
  }   
    }   
    @Override   
    public boolean onCreateOptionsMenu(Menu menu) {   
        getMenuInflater().inflate(R.menu.activity_main, menu);   
        return true;   
    }   
}   
------------------------------------------ContactsOptions ---------------------------------------------------------------------------------------------------------------   
package com.eboy.test;   
import java.util.ArrayList;   
import android.content.ContentProviderOperation;   
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.Data;   
import android.test.AndroidTestCase;   
import android.util.Log;   
/*   
1.先读取contacts表,获取ContactsID;   
2.再在raw_contacts表中根据ContactsID获取RawContactsID;   
3.然后就可以在data表中根据RawContactsID获取该联系人的各数据了;   
*/   
public class ContactsOptions extends AndroidTestCase {   
private String strQuery = "";   
private String strReadAll = "";   
private static final String tag = "TestContact";   
// 查询指定电话的联系人姓名,邮箱,   
public String QueryContacts(Context context, String number, String name,   
   String mimetype) throws Exception {   
  if (context == null || (name.length() == 0 && number.length() == 0))   
   return strQuery;   
  String str = "";   
  strQuery = "";   
  Uri uri = Uri   
    .parse("content://com.android.contacts/data/phones/filter/"   
      + number);   
  ContentResolver resolver = context.getContentResolver();   
  // 按照号码查询名字   
  if (number.length() > 0) {   
   Cursor cursor = resolver.query(uri,   
     new String[] { Data.DISPLAY_NAME }, null, null, null);   
   if (cursor.moveToFirst()) {   
    strQuery = cursor.getString(0);   
    name = strQuery;   
    // 表示通过号码查询其他内容   
    if (mimetype.length() > 0) {   
     strQuery = "";   
    }   
    // Log.i(tag, strQuery);   
   }   
   cursor.close();   
  }   
  // 按照名字查询号码   
  if (name.length() > 0) {   
   uri = Uri.parse("content://com.android.contacts/data");   
   Cursor cursor = resolver.query(uri, new String[] { Data.DATA1,   
     Data.MIMETYPE }, "display_name=?", new String[] { name },   
     null);   
   if (cursor.moveToFirst()) {   
    do {// 遍历所有的电话号码   
     // str = cursor.getString(0);   
     // Log.i("遍历:", str+"/");   
     if (cursor.getString(cursor.getColumnIndex("mimetype"))   
       .equals(mimetype)) {   
      str = "";   
      str = cursor.getString(0);   
      strQuery += str.replace("-", "") + "_";   
     }   
    } while (cursor.moveToNext());   
   }   
   cursor.close();   
   return strQuery;// phone   
  }   
  return strQuery;   
}   
// 读取通讯录的全部的联系人   
// 需要先在raw_contact表中遍历id,并根据id到data表中获取数据   
public String ReadAllContacts(Context context) {   
  Uri uri = Uri.parse("content://com.android.contacts/contacts"); // 访问raw_contacts表   
  ContentResolver resolver = context.getContentResolver();   
  Cursor cursor = resolver.query(uri, new String[] { Data._ID }, null,   
    null, null); // 获得_id属性   
  while (cursor.moveToNext()) {   
   StringBuilder buf = new StringBuilder();   
   int id = cursor.getInt(0);// 获得id并且在data中寻找数据   
   buf.append("id=" + id);   
   uri = Uri.parse("content://com.android.contacts/contacts/" + id   
     + "/data"); // 如果要获得data表中某个id对应的数据,则URI为content://com.android.contacts/contacts/#/data   
   Cursor cursor2 = resolver.query(uri, new String[] { Data.DATA1,   
     Data.MIMETYPE }, null, null, null); // data1存储各个记录的总数据,mimetype存放记录的类型,如电话、email等   
   while (cursor2.moveToNext()) {   
    String data = cursor2   
      .getString(cursor2.getColumnIndex("data1"));   
    if (cursor2.getString(cursor2.getColumnIndex("mimetype"))   
      .equals("vnd.android.cursor.item/name")) { // 如果是名字   
     buf.append(",name=" + data);   
    } else if (cursor2   
      .getString(cursor2.getColumnIndex("mimetype")).equals(   
        "vnd.android.cursor.item/phone_v2")) { // 如果是电话   
     data = data.replace("-", "");   
     buf.append(",phone=" + data);   
    } else if (cursor2   
      .getString(cursor2.getColumnIndex("mimetype")).equals(   
        "vnd.android.cursor.item/email_v2")) { // 如果是email   
     buf.append(",email=" + data);   
    } else if (cursor2   
      .getString(cursor2.getColumnIndex("mimetype")).equals(   
        "vnd.android.cursor.item/nickname")) { // 如果是昵称   
     buf.append(",nickname=" + data);   
    } else if (cursor2   
      .getString(cursor2.getColumnIndex("mimetype")).equals(   
        "vnd.android.cursor.item/postal-address_v2")) { // 如果是地址   
     buf.append(",address=" + data);   
    } else if (cursor2   
      .getString(cursor2.getColumnIndex("mimetype")).equals(   
        "vnd.android.cursor.item/organization")) { // 如果是组织   
     buf.append(",organization=" + data);   
    } else if (cursor2   
      .getString(cursor2.getColumnIndex("mimetype")).equals(   
        "vnd.android.cursor.item/website")) { // 如果是website   
     buf.append(",website=" + data);   
    } else if (cursor2   
      .getString(cursor2.getColumnIndex("mimetype")).equals(   
        "vnd.android.cursor.item/note")) { // 如果是note   
     buf.append(",note=" + data);   
    }   
   }   
   String str = buf.toString();   
   strReadAll += "
" + str;   
  }   
  return strReadAll;   
}   
// 单条添加   
public void AddOneContact(Context context, String name, String phone,   
   String email, String address, String nickname, String organization,   
   String website, String QQ) {   
  // 插入raw_contacts表,并获取_id属性   
  Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");   
  ContentResolver resolver = context.getContentResolver();   
  ContentValues values = new ContentValues();   
  long contact_id = ContentUris.parseId(resolver.insert(uri, values));   
  // 插入data表   
  uri = Uri.parse("content://com.android.contacts/data");   
  // add Name   
  if (name.length() > 0) {   
   values.put("raw_contact_id", contact_id);   
   values.put(Data.MIMETYPE, "vnd.android.cursor.item/name");   
   // values.put("data2", "zs001");   
   values.put("data1", name);   
   resolver.insert(uri, values);   
   values.clear();   
  }   
  // add Phone   
  if (phone.length() > 0) {   
   values.put("raw_contact_id", contact_id);   
   values.put(Data.MIMETYPE, "vnd.android.cursor.item/phone_v2");   
   // values.put("data2", "2"); // 手机   
   values.put("data1", phone);   
   resolver.insert(uri, values);   
   values.clear();   
  }   
  // add email   
  if (email.length() > 0) {   
   values.put("raw_contact_id", contact_id);   
   values.put(Data.MIMETYPE, "vnd.android.cursor.item/email_v2");   
   // values.put("data2", "2");   
   values.put("data1", email);   
   resolver.insert(uri, values);   
   values.clear();   
  }   
  // add address   
  if (address.length() > 0) {   
   values.put("raw_contact_id", contact_id);   
   values.put(Data.MIMETYPE,   
     "vnd.android.cursor.item/postal-address_v2");   
   // values.put("data2", "2");   
   values.put("data1", address);   
   resolver.insert(uri, values);   
   values.clear();   
  }   
  // add nickname   
  if (nickname.length() > 0) {   
   values.put("raw_contact_id", contact_id);   
   values.put(Data.MIMETYPE, "vnd.android.cursor.item/nickname");   
   // values.put("data2", "2");   
   values.put("data1", nickname);   
   resolver.insert(uri, values);   
   values.clear();   
  }   
  // add organization   
  if (organization.length() > 0) {   
   values.put("raw_contact_id", contact_id);   
   values.put(Data.MIMETYPE, "vnd.android.cursor.item/organization");   
   // values.put("data2", "2");   
   values.put("data1", organization);   
   resolver.insert(uri, values);   
   values.clear();   
  }   
  // add website   
  if (website.length() > 0) {   
   values.put("raw_contact_id", contact_id);   
   values.put(Data.MIMETYPE, "vnd.android.cursor.item/website");   
   // values.put("data2", "2");   
   values.put("data1", website);   
   resolver.insert(uri, values);   
   values.clear();   
  }   
  // add QQ   
  if (QQ.length() > 0) {   
   values.put("raw_contact_id", contact_id);   
   values.put(Data.MIMETYPE, "vnd.android.cursor.item/note");   
   // values.put("data2", "2"); // 单位   
   values.put("data1", QQ);   
   resolver.insert(uri, values);   
   values.clear();   
  }   
}   
// 批量添加   
public void AddContactsInTransaction(Context context, String contacts[])   
   throws Exception {   
  Uri uri;   
  ContentResolver resolver = context.getContentResolver();   
  ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();   
  String str[] = null;   
  for (int i = 0; i < contacts.length; i++) {   
   str = contacts.split("_");   
   uri = Uri.parse("content://com.android.contacts/raw_contacts");   
   // 向raw_contact表添加一条记录   
   // 此处.withValue("account_name", null)一定要加,不然会抛NullPointerException   
   ContentProviderOperation operation1 = ContentProviderOperation   
     .newInsert(uri).withValue("account_name", null).build();   
   operations.add(operation1);   
   // 向data添加数据   
   uri = Uri.parse("content://com.android.contacts/data");   
   // 添加姓名   
   ContentProviderOperation operation2 = ContentProviderOperation   
     .newInsert(uri)   
     .withValueBackReference("raw_contact_id", 3 * i)   
     // withValueBackReference的第二个参数表示引用operations[0]的操作的返回id作为此值   
     .withValue("mimetype", "vnd.android.cursor.item/name")   
     .withValue("data1", str[0]).build();   
   operations.add(operation2);   
   // 添加手机数据   
   ContentProviderOperation operation3 = ContentProviderOperation   
     .newInsert(uri)   
     .withValueBackReference("raw_contact_id", 3 * i)   
     .withValue("mimetype", "vnd.android.cursor.item/phone_v2")   
     .withValue("data2", "1").withValue("data1", str[1]).build();// data2部分数据代表home,mobile,work等等属性   
   operations.add(operation3);   
  }   
  resolver.applyBatch("com.android.contacts", operations);   
}   
// 删除某人通讯录,name格式name1_name2_name3_.......以_结束   
public void DeleteContact(Context context, String name) throws Exception {   
  Uri uri;   
  String str[] = name.split("_");// 姓名list   
  for (int i = 0; i < str.length; i++) {   
   // 根据姓名求id   
   uri = Uri.parse("content://com.android.contacts/raw_contacts");   
   ContentResolver resolver = context.getContentResolver();   
   Cursor cursor = resolver.query(uri, new String[] { Data._ID },   
     "display_name=?", new String[] { str }, null);   
   if (cursor.moveToFirst()) {   
    int id = cursor.getInt(0);   
    Log.i(tag, "delete id:" + id);   
    // 根据id删除data中的相应数据   
    resolver.delete(uri, "display_name=?", new String[] { str });// 从raw_contacts表中删除   
    uri = Uri.parse("content://com.android.contacts/data");   
    resolver.delete(uri, "raw_contact_id=?",   
      new String[] { id + "" });// 从data表中删除   
   }   
  }   
}   
// 更新电话号码   
public void UpdateContact(Context context, String name, String phone)   
   throws Exception {   
  //int id = 0;   
  //Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");   
  ContentResolver resolver = context.getContentResolver();   
  //Cursor cursor = resolver.query(uri, new String[] { Data._ID },   
  //  "display_name=?", new String[] { name }, null);   
  Uri uri = Uri.parse("content://com.android.contacts/data");// 对data表的所有数据操作   
  ContentValues values = new ContentValues();   
  values.put("data2", "2");   
  values.put("data1", phone);   
  /*   
  if (cursor.moveToFirst()) {   
   id = cursor.getInt(0);   
   Log.i(tag, "update id:" + id);   
  }   
  */   
  //resolver.update(uri, values, "mimetype=? and raw_contact_id=?",   
  //  new String[] { "vnd.android.cursor.item/phone_v2", id + "" });   
  resolver.update(uri, values, "mimetype=? and display_name=?",   
    new String[] { "vnd.android.cursor.item/phone_v2", name });   
     
}   
public static void main(String[] args) {   
}   
}   
   
</i

上一篇:Android中文帮助文档 学习安卓的好帮手啊
下一篇:Android软件开发之应用程序之间的通信介绍(十八)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|新帖|标签|软件|Sitemap|ZNDS智能电视网 ( 苏ICP备2023012627号 )

网络信息服务信用承诺书 | 增值电信业务经营许可证:苏B2-20221768 丨 苏公网安备 32011402011373号

GMT+8, 2024-5-8 04:01 , Processed in 0.062292 second(s), 13 queries , Redis On.

Powered by Discuz!

监督举报:report#znds.com (请将#替换为@)

© 2007-2024 ZNDS.Com

快速回复 返回顶部 返回列表