因为本次主要是测试,所以要先在配置清单中声明权限
步骤一:配置AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.testandroidcontentprovider"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="23" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<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>
<uses-library android:name="android.test.runner" />
</application>
<instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.testandroidcontentprovider"></instrumentation>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
</manifest>
步骤二:编写相关测试代码
package com.example.testandroidcontentprovider.test;
import java.util.ArrayList;
import android.net.Uri;
import android.test.AndroidTestCase;
import android.util.Log;
import android.content.*;
import android.database.*;
public class TestAndroidContact extends AndroidTestCase {
private static final String tag="TestAndroidContact";
/*
* 读取当前通讯录中所有联系人信息
*/
public void TestGetAndroidContact() throws Throwable
{
Uri uri=Uri.parse("content://com.android.contacts/contacts");
ContentResolver resolver=this.getContext().getContentResolver();
Cursor cr=resolver.query(uri, new String[]{"_id"}, null, null, null);
while(cr.moveToNext()){
int _id=cr.getInt(cr.getColumnIndex("_id"));
StringBuilder sb=new StringBuilder();
sb.append("contactid="+_id);
//取当前ID的明细
uri=Uri.parse("content://com.android.contacts/contacts/"+_id+"/data");
Cursor datacr=resolver.query(uri, new String[]{"data1","data2","mimetype"}, null, null, null);
while(datacr.moveToNext()){
String data=datacr.getString(datacr.getColumnIndex("data1"));
String type=datacr.getString(datacr.getColumnIndex("mimetype"));
if("vnd.android.cursor.item/name".equals(type)){//姓名
sb.append("name="+data+";");
}else if("vnd.android.cursor.item/phone_v2".equals(type)){//电话
sb.append("name="+data+";");
}else if("vnd.android.cursor.item/email_v2".equals(type)){//邮箱
sb.append("name="+data+";");
}else if("vnd.android.cursor.item/postal-address_v2".equals(type)){//地址
sb.append("name="+data+";");
}
}
datacr.close();
Log.i(tag, sb.toString());
}
cr.close();
}
/*
* 通过手机号码取联系人姓名
*/
public void TestGetContactByPhone(){
String phone="13712345678";
Uri uri=Uri.parse("content://com.android.contacts/data/phones/filter/"+phone);
ContentResolver resolver=getContext().getContentResolver();
Cursor cr=resolver.query(uri, new String[]{"display_name"}, null, null, null);
if(cr.moveToFirst()){
String name=cr.getString(0);
Log.i(tag, "号码:"+phone+"是"+name+"的号码");
}
}
/*
* 添加联系人
*/
public void TestAddContact()
{
Uri uri=Uri.parse("content://com.android.contacts/raw_contacts");
ContentResolver resolver=getContext().getContentResolver();
ContentValues cvs=new ContentValues();
long contactId=ContentUris.parseId(resolver.insert(uri, cvs));
//添加姓名
uri=Uri.parse("content://com.android.contacts/data");
cvs.put("raw_contact_id", contactId);
cvs.put("mimetype", "vnd.android.cursor.item/name");
cvs.put("data2", "杨过");
resolver.insert(uri, cvs);
//添加电话
cvs.clear();
cvs.put("raw_contact_id", contactId);
cvs.put("mimetype", "vnd.android.cursor.item/phone_v2");
cvs.put("data2", "13112345678");
resolver.insert(uri, cvs);
//添加邮箱
cvs.clear();
cvs.put("raw_contact_id", contactId);
cvs.put("mimetype", "vnd.android.cursor.item/email_v2");
cvs.put("data2", "mymail@163.com");
resolver.insert(uri, cvs);
}
//在同一个事务中完成联系人各项数据的添加
public void testAddContact2() throws Exception{
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
ContentResolver resolver = getContext().getContentResolver();
ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();
ContentProviderOperation op1 = ContentProviderOperation.newInsert(uri)
.withValue("account_name", null)
.build();
operations.add(op1);
uri = Uri.parse("content://com.android.contacts/data");
ContentProviderOperation op2 = ContentProviderOperation.newInsert(uri)
.withValueBackReference("raw_contact_id", 0)
.withValue("mimetype", "vnd.android.cursor.item/name")
.withValue("data2", "李小龙")
.build();
operations.add(op2);
ContentProviderOperation op3 = ContentProviderOperation.newInsert(uri)
.withValueBackReference("raw_contact_id", 0)
.withValue("mimetype", "vnd.android.cursor.item/phone_v2")
.withValue("data1", "13560650505")
.withValue("data2", "2")
.build();
operations.add(op3);
ContentProviderOperation op4 = ContentProviderOperation.newInsert(uri)
.withValueBackReference("raw_contact_id", 0)
.withValue("mimetype", "vnd.android.cursor.item/email_v2")
.withValue("data1", "liming@sohu.com")
.withValue("data2", "2")
.build();
operations.add(op4);
resolver.applyBatch("com.android.contacts", operations);
}
}