您的位置:首页 > 其它

实例教程十一:访问通信录中的联系人和添加联系人

2013-07-17 14:44 477 查看
Android《五子连珠》游戏完整源码分享

http://www.eoeandroid.com/thread-211877-1-1.html

android仿酷狗播放器

http://www.eoeandroid.com/thread-185894-1-1.html

自制K线图,新鲜出炉

http://www.eoeandroid.com/thread-182290-1-1.html

package cn.itcast.contacts;

import java.util.ArrayList;

import android.content.ContentProviderOperation;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.test.AndroidTestCase;
import android.util.Log;

public class ContactsTest extends AndroidTestCase{
private static final String TAG = "ContactsTest";

/**
* 获取 所有联系人
* @throws Exception
*/
public void testContacts() throws Exception{
Uri uri = Uri.parse("content://com.android.contacts/contacts");
ContentResolver resolver = getContext().getContentResolver();
Cursor cursor = resolver.query(uri, new String[]{"_id"}, null, null, null);

while(cursor.moveToNext()){
int contactId = cursor.getInt(0);
StringBuilder sBuilder = new StringBuilder("contactId=");
sBuilder.append(contactId);

uri = Uri.parse("content://com.android.contacts/contacts" + contactId + "/data");
Cursor dataCursor = resolver.query(uri, new String[]{"mimetype", "data1", "data2"},
null, null, null);
while(dataCursor.moveToNext()){
String data = dataCursor.getString(dataCursor.getColumnIndex("data1"));
String type = dataCursor.getString(dataCursor.getColumnIndex("data2"));
if("vnd.android.cursor.item/name".equals(type)){ //姓名
sBuilder.append(", name=" + data);
}else if("vnd.android.cursor.item/email_v2".equals(type)){ //email
sBuilder.append(", email=" + data);
}else if("vnd.android.cursor.item/phone_v2".equals(type)){ //phone
sBuilder.append(", phone=" + data);
}
}
Log.i(TAG, sBuilder.toString());
}
}

/**
* 根据号码获取联系人的姓名
* @throws Exception
*/
public void testContactNameByPhoneNumber() throws Exception{
String pNumber = "18012345678";
Uri uri = Uri.parse("content://com.android.contacts/data/phones/filter/" + pNumber);
ContentResolver resolver = getContext().getContentResolver();
Cursor cursor = resolver.query(uri, new String[]{"display_name"}, null, null, null);
//为何使用moveToFirst()?
//因为查找的数据只有一条,那一开始肯定就有一条
if(cursor.moveToFirst()){
String name = cursor.getString(0);
Log.i(TAG, name);
}
cursor.close();
}

/**
* 添加联系人
* @throws Exception
*/
public void testAddContact() throws Exception{
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
ContentResolver resolver = getContext().getContentResolver();
ContentValues values = new ContentValues();
long contactId = ContentUris.parseId(resolver.insert(uri, values));
//添加姓名
uri = Uri.parse("content://com.android.contacts/data");
values.put("raw_contact_id", contactId);
values.put("mimetype", "vnd.android.cursor.item/name");
values.put("data2", "张小小");
resolver.insert(uri, values);

//添加电话
values.clear();
values.put("raw_contact_id", contactId);
values.put("mimetype", "vnd.android.cursor.item/phone_v2");
values.put("data2", "2");
values.put("data1", "13671325874");
resolver.insert(uri, values);

//添加Email
values.clear();
values.put("raw_contact_id", contactId);
values.put("mimetype", "vnd.android.cursor.item/email_v2");
values.put("data2", "2");
values.put("data1", "123@qq.com");
resolver.insert(uri, values);
}

/**
* 在同一事务中完成 联系人各项数据的添加
* @throws Exception
*/
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");
//添加姓名
//0--使用第一操作对象 添加完记录后所返回的ID
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", "13671325874")
.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", "123@qq.com")
.withValue("data2", "2")
.build();
operations.add(op4);

resolver.applyBatch("com.android.contacts", operations);
//applyBatch运行流程
//{
//        begin();
//        for(op: operations){
//                op.app()
//        }
//        end();
//}
}
}


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.itcast.contacts"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk android:minSdkVersion="8" />

<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<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:label="Tests for My App"
android:targetPackage="cn.itcast.contacts" >
</instrumentation>

<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>

</manifest>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: