android中的通讯录Contacts,在数据库中主要涉及到contact表,raw_contacts,data表
1,读取contact中的数据(通过测试用例的方法来演示)
(1),创建测试方法
(2),在AndroidManifest.xml配置对测试用例的支持
方法:在
<application>
<activity>
之间加入<uses-library android:name="android.test.runner" />
(3),设置访问通讯录的权限:
在AndroidManifest.xml配置如下:
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />

(4),通过ContentResolver来访问通讯录的contentprovider
代码如下:
AndroidManiFest.xml配置:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"      package="cn.com.simon.junit"      android:versionCode="1"      android:versionName="1.0">    <uses-sdk android:minSdkVersion="8" />    <application android:icon="@drawable/icon" android:label="@string/app_name"><uses-library android:name="android.test.runner" />        <activity android:name=".MainActivity"                  android:label="@string/app_name">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application>    <uses-permission android:name="android.permission.READ_CONTACTS" />    <instrumentation android:name="android.test.InstrumentationTestRunner"    android:targetPackage="cn.com.simon.junit" android:label="my test class" /></manifest>



测试用例:
package cn.com.simon.junit;import android.content.ContentResolver;import android.database.Cursor;import android.net.Uri;import android.test.AndroidTestCase;import android.util.Log;public class TestContacts extends AndroidTestCase{private static final String TAG = "TestContacts";/** * 查询通讯录中的信息 * @throws Throwable */public void queryContacts() throws Throwable{//获得contentresolver对象ContentResolver resolver = this.getContext().getContentResolver();Uri uri = Uri.parse("content://com.android.contacts/contacts");//localhost="com.android.contacts"Cursor c = resolver.query(uri, null, null, null, null);Log.i(TAG, c.getCount()+"");}}


向通讯录中添加数据
1,非事务
引用
/** * 非事务的方式添加通讯录,插入数据的操作不在同一个事务中 *  * @throws Throwable */public void addContact() throws Throwable {// 先向raw_contacts表中添加一条空记录,因为表中主要是存储的联系人的id// data表中主要是存储的联系人的信息,所以我们要先获得新增的联系人的id,id为自动增长ContentResolver resolver = this.getContext().getContentResolver();ContentValues values = new ContentValues();// 参数集合Uri url = resolver.insert(RawContacts.CONTENT_URI, values);// 插入空记录long id = ContentUris.parseId(url);// 往data表入姓名数据values.clear();values.put(Data.RAW_CONTACT_ID, id);// idvalues.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);// 内容类型values.put(StructuredName.GIVEN_NAME, "黄根华");// 添加姓名resolver.insert(ContactsContract.Data.CONTENT_URI, values);// 往data表入电话数据values.clear();// 清空values中的数据values.put(Data.RAW_CONTACT_ID, id);values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);values.put(Phone.NUMBER, "13921009789");values.put(Phone.TYPE, Phone.TYPE_MOBILE);resolver.insert(android.provider.ContactsContract.Data.CONTENT_URI,values);// 往data表入Email数据values.clear();values.put(Data.RAW_CONTACT_ID, id);values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);values.put(Email.DATA, "[email protected]");values.put(Email.TYPE, Email.TYPE_WORK);resolver.insert(android.provider.ContactsContract.Data.CONTENT_URI,values);}/** * 向通讯录中添加数据,所有的操作在同一个事务中 * @throws Throwable */public void testSave() throws Throwable {// 文档位置:reference\android\provider\ContactsContract.RawContacts.htmlArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();int rawContactInsertIndex = 0;ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI).withValue(RawContacts.ACCOUNT_TYPE, null).withValue(RawContacts.ACCOUNT_NAME, null).build());// 文档位置:reference\android\provider\ContactsContract.Data.htmlops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI).withValueBackReference(Data.RAW_CONTACT_ID,rawContactInsertIndex).withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE).withValue(StructuredName.GIVEN_NAME, "赵薇").build());ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI).withValueBackReference(Data.RAW_CONTACT_ID,rawContactInsertIndex).withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE).withValue(Phone.NUMBER, "13671323809").withValue(Phone.TYPE, Phone.TYPE_MOBILE).withValue(Phone.LABEL, "手机号").build());ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI).withValueBackReference(Data.RAW_CONTACT_ID,rawContactInsertIndex).withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE).withValue(Email.DATA, "[email protected]").withValue(Email.TYPE, Email.TYPE_WORK).build());this.getContext().getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);}


更多相关文章

  1. Android 数据存储之SQLite数据库存储
  2. Android数据解析出错com.android.volley.NoConnectionError: jav
  3. 引用第三方进行Android前端与web后台的数据交互
  4. Android 调用UVCCamera 采集UVC摄像头数据,并调用zxing 扫码库扫
  5. 【android】SQLite数据库之SQLiteOpenHelper与SQLiteDatabase
  6. android中数据库框架 GreenDao

随机推荐

  1. Android 连接加密网络
  2. [zz]一个JNI下c和java程序范例
  3. 【android】性能优化五篇(推荐)
  4. android, contentProvider 获取通讯录
  5. android 打包app,以及签名
  6. 自定义android Dialog
  7. Android 屏幕真实分辨率获取
  8. Android 对程序异常崩溃的捕捉
  9. 【Android】定位与解决anr错误记录
  10. Android:验证EditText输入框输入的手机号