Android中的Contacts联系人通过ContentProvider对外提供联系人数据及操作接口。

下面通过简单例子,来看看有关联系人的基本操作。

主Activity:
001 publicclassMainActivityextendsListActivity {
002 privateArrayList<String> list =newArrayList<String>();
003 privateArrayAdapter adapter;
004 /** Called when the activity is first created. */
005 @Override
006 publicvoidonCreate(Bundle savedInstanceState) {
007 super.onCreate(savedInstanceState);
008 insert();
009 queryByName();
010 queryAll();
011 adapter =newArrayAdapter(this,R.layout.main,list);
012 this.setListAdapter(adapter);
013 }
014 //查询所有联系人
015 publicvoidqueryAll() {
016 ContentResolver resolver =this.getContentResolver();
017 Uri uri = Uri.parse("content://com.android.contacts/contacts");
018 Cursor idCursor = resolver.query(uri,newString[] {"_id"},null,null,null);
019 while(idCursor.moveToNext()) {
020 //获取到raw_contacts表中的id
021 intid = idCursor.getInt(0);
022 //根据获取到的ID查询data表中的数据
023 uri = Uri.parse("content://com.android.contacts/contacts/"+ id +"/data");
024 Cursor dataCursor = resolver.query(uri,newString[] {"data1","mimetype"},null,null,null);
025 StringBuilder sb =newStringBuilder();
026 sb.append("id="+ id);
027 //查询联系人表中的
028 while(dataCursor.moveToNext()) {
029 String data = dataCursor.getString(0);
030 String type = dataCursor.getString(1);
031 if("vnd.android.cursor.item/name".equals(type))
032 sb.append(", name="+ data);
033 elseif("vnd.android.cursor.item/phone_v2".equals(type))
034 sb.append(", phone="+ data);
035 elseif("vnd.android.cursor.item/email_v2".equals(type))
036 sb.append(", email="+ data);
037 }
038 list.add(sb.toString());
039 }
040 }
041 //根据电话号码查询联系人名称
042 privatevoidqueryByName() {
043 ContentResolver resolver =this.getContentResolver();
044 Uri uri = Uri.parse("content://com.android.contacts/data/phones/filter/1234567");
045 Cursor c = resolver.query(uri,newString[] {"display_name"},null,null,null);
046 while(c.moveToNext()) {
047 System.out.println(c.getString(0));
048 }
049 }
050 //添加联系人
051 privatevoidinsert() {
052 ContentResolver resolver =this.getContentResolver();
053 Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
054 ContentValues values =newContentValues();
055 //向raw_contacts插入一条除了ID之外, 其他全部为NULL的记录, ID是自动生成的
056 longid = ContentUris.parseId(resolver.insert(uri, values));
057
058 //添加联系人姓名
059 uri = Uri.parse("content://com.android.contacts/data");
060 values.put("raw_contact_id", id);
061 values.put("data2","zhang xiangdong");
062 values.put("mimetype","vnd.android.cursor.item/name");
063 resolver.insert(uri, values);
064
065 //添加联系人电话
066 values.clear();// 清空上次的数据
067 values.put("raw_contact_id", id);
068 values.put("data1","1392315698");
069 values.put("data2","2");
070 values.put("mimetype","vnd.android.cursor.item/phone_v2");
071 resolver.insert(uri, values);
072
073 //添加联系人邮箱
074 values.clear();
075 values.put("raw_contact_id", id);
076 values.put("data1","345672@qq.com");
077 values.put("data2","1");
078 values.put("mimetype","vnd.android.cursor.item/email_v2");
079 resolver.insert(uri, values);
080 }
081 //使用事务添加联系人
082 privatevoidinsertWithBatch()throwsException {
083 ContentResolver resolver =this.getContentResolver();
084
085 ArrayList<ContentProviderOperation> operations =newArrayList<ContentProviderOperation>();
086
087 //插入id
088 ContentProviderOperation operation1 = ContentProviderOperation
089 .newInsert(Uri.parse("content://com.android.contacts/raw_contacts"))
090 .withValue("_id",null)
091 .build();
092 operations.add(operation1);
093 //插入姓名
094 ContentProviderOperation operation2 = ContentProviderOperation
095 .newInsert(Uri.parse("content://com.android.contacts/data"))
096 .withValueBackReference("raw_contact_id",0)
097 .withValue("data2","JOhn")
098 .withValue("mimetype","vnd.android.cursor.item/name")
099 .build();
100 operations.add(operation2);
101 //插入联系人电话
102 ContentProviderOperation operation3 = ContentProviderOperation
103 .newInsert(Uri.parse("content://com.android.contacts/data"))
104 .withValueBackReference("raw_contact_id",0)
105 .withValue("data1","135124689745")
106 .withValue("data2","2")
107 .withValue("mimetype","vnd.android.cursor.item/phone_v2")
108 .build();
109 operations.add(operation3);
110 //插入邮箱
111 ContentProviderOperation operation4 = ContentProviderOperation
112 .newInsert(Uri.parse("content://com.android.contacts/data"))
113 .withValueBackReference("raw_contact_id",0)
114 .withValue("data1","123568974@qq.com")
115 .withValue("data2","2")
116 .withValue("mimetype","vnd.android.cursor.item/email_v2")
117 .build();
118 operations.add(operation4);
119
120 //执行批量操作
121 resolver.applyBatch("com.android.contacts", operations);
122 }
123 }
布局文件:
1 <?xmlversion="1.0"encoding="utf-8"?>
2 <TextViewxmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="fill_parent"
4 android:layout_height="wrap_content"
5 android:text="@string/hello"
6 />
描述文件: 查看源码 打印 ?
01 <?xmlversion="1.0"encoding="utf-8"?>
02 <manifestxmlns:android="http://schemas.android.com/apk/res/android"
03 package="com.test.contacts"
04 android:versionCode="1"
05 android:versionName="1.0">
06 <uses-sdkandroid:minSdkVersion="10"/>
07 <strong><uses-permissionandroid:name="android.permission.READ_CONTACTS"></uses-permission>
08 <uses-permissionandroid:name="android.permission.WRITE_CONTACTS"></uses-permission></strong>
09 <applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
10 <activityandroid:name=".MainActivity"
11 android:label="@string/app_name">
12 <intent-filter>
13 <actionandroid:name="android.intent.action.MAIN"/>
14 <categoryandroid:name="android.intent.category.LAUNCHER"/>
15 </intent-filter>
16 </activity>
17
18 </application>
19 </manifest>
运行结果:

更多相关文章

  1. [Android(安卓)Studio导入第三方类库方法] Error:(19, 23) 错误:
  2. android 存储联系人(save contact) 总结
  3. 整理出15个Android很有用的代码片段
  4. android 之 菜单
  5. android 让5556和5554发发sms
  6. TextView添加ClickableSpan和LinkMovementMethod之间的关系
  7. Android给第三方应用添加系统签名的两种方式
  8. Android(安卓)NDK开发
  9. Android(安卓)ORM 框架——GreenDao的基本用法

随机推荐

  1. 2021-03-16:手写代码:单链表归并排序。
  2. rpm包管理 yum包管理与编译安装
  3. Spark源码系列之Standalone模式下Spark应
  4. 大数据基础系列之kafka011生产者缓存超时
  5. 大数据基础系列之kafka知识点和优点
  6. 大数据基础系列之提交spark应用及依赖管
  7. 操作系统底层技术——CPU亲和性
  8. HDFS学习:HDFS机架感知与副本放置策略
  9. SQL on Hadoop 技术分析(二)
  10. Yarn【label-based scheduling】实战总结