1:androidmanifest.xml的内容

[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.       package="cn.itcast.contacts"  
  4.       android:versionCode="1"  
  5.       android:versionName="1.0">  
  6.     <application android:icon="@drawable/icon" android:label="@string/app_name">  
  7.      <uses-library android:name="android.test.runner" />  
  8.         <activity android:name=".MainActivity"  
  9.                   android:label="@string/app_name">  
  10.             <intent-filter>  
  11.                 <action android:name="android.intent.action.MAIN" />  
  12.                 <category android:name="android.intent.category.LAUNCHER" />  
  13.             intent-filter>  
  14.         activity>  
  15.   
  16.     application>  
  17.     <uses-sdk android:minSdkVersion="8" />  
  18.     <uses-permission android:name="android.permission.READ_CONTACTS" />  
  19.     <uses-permission android:name="android.permission.WRITE_CONTACTS" />  
  20.       
  21.      <instrumentation android:name="android.test.InstrumentationTestRunner"  
  22.      android:targetPackage="cn.itcast.contacts" android:label="Tests for My App" />  
  23. manifest>   


2:ContactTest类,主要提供insert的插入方法

[java]  view plain copy
  1. package cn.itcast.contacts.test;  
  2.   
  3. import android.content.ContentUris;  
  4. import android.content.ContentValues;  
  5. import android.net.Uri;  
  6. import android.provider.ContactsContract.Data;  
  7. import android.provider.ContactsContract.RawContacts;  
  8. import android.provider.ContactsContract.CommonDataKinds.Email;  
  9. import android.provider.ContactsContract.CommonDataKinds.Phone;  
  10. import android.provider.ContactsContract.CommonDataKinds.StructuredName;  
  11. import android.test.AndroidTestCase;  
  12.   
  13. public class ContactTest extends AndroidTestCase {  
  14.       
  15.     /* 
  16.      * 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获得系统返回的rawContactId 
  17.      * 这时后面插入data表的数据,只有执行空值插入,才能使插入的联系人在通讯录里面可见 
  18.      */  
  19.     public void testInsert() {  
  20.         ContentValues values = new ContentValues();  
  21.         /* 
  22.          * 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获得系统返回的rawContactId 
  23.          */  
  24.         Uri rawContactUri = this.getContext().getContentResolver().insert(RawContacts.CONTENT_URI, values);  
  25.         long rawContactId = ContentUris.parseId(rawContactUri);  
  26.           
  27.         //往data表里写入姓名数据  
  28.         values.clear();  
  29.         values.put(Data.RAW_CONTACT_ID, rawContactId);  
  30.         values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); //内容类型  
  31.         values.put(StructuredName.GIVEN_NAME, "李天山");  
  32.         this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);  
  33.           
  34.         //往data表里写入电话数据  
  35.         values.clear();  
  36.         values.put(Data.RAW_CONTACT_ID, rawContactId);  
  37.         values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);  
  38.         values.put(Phone.NUMBER, "13921009789");  
  39.         values.put(Phone.TYPE, Phone.TYPE_MOBILE);  
  40.         this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);  
  41.           
  42.         //往data表里写入Email的数据  
  43.         values.clear();  
  44.         values.put(Data.RAW_CONTACT_ID, rawContactId);  
  45.         values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);  
  46.         values.put(Email.DATA, "liming@itcast.cn");  
  47.         values.put(Email.TYPE, Email.TYPE_WORK);  
  48.         this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);  
  49.           
  50.     }  
  51. }  


3:测试结果,表明插入联系人成功

4:另外一种方式来添加联系人的信息

[java]  view plain copy
  1. /* 
  2.      * 批量添加,处于用一个事务中 
  3.      */  
  4.     public void testSave() {  
  5.         ArrayList ops =new ArrayList();  
  6.         int rawContactInsertIndex = ops.size();  
  7.         ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)  
  8.                   .withValue(RawContacts.ACCOUNT_TYPE, null)  
  9.                   .withValue(RawContacts.ACCOUNT_NAME, null)  
  10.                   .build());  
  11.   
  12.          ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)  
  13.                   .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)  
  14.                   .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)  
  15.                   .withValue(StructuredName.DISPLAY_NAME, "良辰")  
  16.                   .build());  
  17.            
  18.          ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)  
  19.                   .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)  
  20.                   .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)  
  21.                   .withValue(Phone.NUMBER, "1234567890")  
  22.                   .withValue(Phone.TYPE, Phone.TYPE_MOBILE)  
  23.                   .withValue(Phone.LABEL, "手机号")  
  24.                   .build());  
  25.            
  26.          ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)  
  27.                   .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)  
  28.                   .withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE)  
  29.                   .withValue(Email.DATA, "liangchen@itcast.cn")  
  30.                   .withValue(Email.TYPE, Email.TYPE_WORK)  
  31.                   .build());  
  32.          ContentProviderResult[] results;  
  33.         try {  
  34.             results = this.getContext().getContentResolver()  
  35.                         .applyBatch(ContactsContract.AUTHORITY, ops);  
  36.              for(ContentProviderResult result : results) {  
  37.                  Log.i(TAG, result.uri.toString());  
  38.              }  
  39.         } catch (RemoteException e) {  
  40.             e.printStackTrace();  
  41.         } catch (OperationApplicationException e) {  
  42.             e.printStackTrace();  
  43.         }  
  44.     }  

这种方法的好处用文档的英文表述就是:
The batch method is by far preferred. It inserts the raw contact and its constituent data rows in a single database transaction and causes at most one aggregation pass.

更多相关文章

  1. Android(安卓)数据存储 之 SQLite数据库详解
  2. android中ListView数据刷新时的同步方法
  3. Android无EditText时获取扫描设备的扫描结果
  4. Android(安卓)-- CursorAdapter
  5. Android(安卓)TTS学习――TTS初体验(中)
  6. 开发人员注意——Android(安卓)5.0 API有哪些变化
  7. android中使用百度定位sdk实时的计算移动距离
  8. 计算机技术大牛的博客集
  9. Android下载文件时对MediaScanner的调用

随机推荐

  1. android获取bluetooth的信号强度(RSSI)
  2. [译] Android(安卓)架构:Part 4 —— 实践
  3. Android中向服务器上传图片
  4. 关于CoordinatorLayout展开与折叠相关属
  5. android 开发中判断网络是否连接的代码
  6. 很好的资源学习入口_android
  7. android系统学习笔记二
  8. xml-----属性收集
  9. Android-TCPDump for Android(抓TCP数据包
  10. Android(安卓)Android.mk 文件一点感悟