Android SDK2.0 通讯录
来源:互联网 发布:win7万能网络驱动下载 编辑:程序博客网 时间:2024/05/22 08:08
数据是应用的核心,在Android的
应用程序中我们经常需要调用通信录,比如给联系人发送贺卡,发送Email。
我们已经知道可以通过ContentProvider去拿到数据,但是其uri如何得到呢。
这就需要我们去查看文档,但是Android开发者指南已经很久没有更新过了,
上面的URI有很多也是错误的,我们必须通过自己查看源文件来找到uri,
然后才可以拿到正确的数据。
以下代码是通过测试类来测试该方法,注释里的部分是通过ContactsContract.Contacts
这个类里的常量获取uri以及id。
而方法中确实通过查看SQLite来获取字段的
package wjh.android.contact;
import java.util.ArrayList;
import android.content.ContentProviderOperation
import android.content.ContentProviderResult;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;
import android.provider.ContactsContract.RawContacts;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.Contacts.Data;
import android.test.AndroidTestCase;
import android.util.Log;
public class ContactTest extends AndroidTestCase {
private static final String TAG = "ContactTest";
public void testGetContacts() throws Throwable {
ContentResolver contentResolver = this.getContext().getContentResolver();
String uriStr = "content://com.android.contacts/contacts";
Uri uri = Uri.parse(uriStr);
Cursor cursor = contentResolver.query(uri, null, null, null, null);
// 遍历联系人
while (cursor.moveToNext()) {
// 联系人 ID
int contactId = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts._ID));
// 联系人显示名称
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
// 联系人电话号码需要对另一个表进行查询,所以用到另一个 uri:content://com.android.contacts/data/phones
Cursor phones = getContext().getContentResolver().query(
String phone = "";
while (phones.moveToNext()) {
phone = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
// 再查询 Email。uri 为 : content://com.android.contacts/data/emails
Cursor emails = getContext().getContentResolver().query(
while (emails.moveToNext()) {
String emailAddress = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
Log.i("RongActivity", "emailAddress=" + emailAddress);
}
emails.close();
Log.i(TAG, "Contact [contactId= "+ contactId +"name=" + name + ", phone=" + phone + "]");
}
}
public void testInsert() {
ContentValues values = new ContentValues();
//首先向RawContacts.CONTENT_URI执行一个空值插入(raw_contacts 表), 为了获取生成的联系人 ID
Uri rawContactUri = this.getContext().getContentResolver().insert(RawContacts.CONTENT_URI, values);
//然后获取系统返回的rawContactId , 就是新加入的这个联系人的 ID
long rawContactId = ContentUris.parseId(rawContactUri);
//往data表入姓名数据
values.clear();
// raw_contacts_id 字段,是 raw_contacts表id 的外键,用于说明此记录属于哪一个联系人
values.put(Data.RAW_CONTACT_ID, rawContactId);
// mimitype_id 字段,用于描述此数据的类型,电话号码?Email?....
values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
values.put(StructuredName.GIVEN_NAME, "文白菜");
this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
//往data表入电话数据
values.clear();
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
values.put(Phone.NUMBER, "15101689230");
values.put(Phone.TYPE, Phone.TYPE_MOBILE);
this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
//往data表入Email数据
values.clear();
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
values.put(Email.DATA, "wenlin56@sina.com");
values.put(Email.TYPE, Email.TYPE_WORK);
this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
}
public void testSave() throws Throwable{
//文档位置:reference/android/provider/ContactsContract.RawContacts.html
ArrayList<ContentProviderOperation
int rawContactInsertIndex = ops.size();
ops.add(ContentProviderOperation
//文档位置:reference/android/provider/ContactsContract.Data.html
ops.add(ContentProviderOperation
// 更新手机号码:Data.RAW_CONTACT_ID 获取上一条语句插入联系人时产生的 ID
ops.add(ContentProviderOperation
ops.add(ContentProviderOperation
// 批量插入 -- 在同一个事务当中
ContentProviderResult[] results = this.getContext().getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
for(ContentProviderResult result : results){
Log.i(TAG, result.uri.toString());
}
}
}
- Android SDK2.0 通讯录
- Android SDK2.0 新增功能
- 安装android SDK2.0及创建2.0模拟器的方法
- 安装android SDK2.0及创建2.0模拟器的方法
- Windows系统下Android开发环境搭建指南(SDK2.0)
- 安装android SDK2.0及创建2.0模拟器的方法
- OpenXML SDK2.0初窥
- 荣云SDK2.0集成
- Android SDK2.1安装过程
- Android SDK2.1 新增功能
- Android SDK2.2 新增功能
- Android SDK2.3 更新指南
- Android SDK2.2离线安装
- android插件(ECLIPSE) 安装android SDK2.0及创建2.0模拟器的方法
- android中的后退键——onBackPressed()的使用 SDK2.0之后新增
- Android百度地图SDK 导航SDK2.0结合定位SDK6.0.5的导航参数设置方法
- Android百度地图导航SDK2.0 定位SDK6.0.5的导航参数设置方法
- android SDK2.3 更新改动翻译
- 数据库连接断开,数据库连接池报错问题
- Hadoop Summit 2011: HDFS Federation and Other New Features
- 使用emacs 格式化(整理)源程序
- Android简介
- 安装 vim 配色方案 colorscheme 详解
- Android SDK2.0 通讯录
- 推荐系统-用户跟风程度(众口味程度)
- android2.2 drawable(ldpi,mdpi,hdpi)详解
- JS操作Cookies
- intel 编译器的矢量化测试
- 兼容IE和FIREFOX的select选项操作JS
- mm7 彩信发送方法
- C#发现之旅第十四讲 基于动态编译的VB.NET脚本引擎
- Hibernate QBC高级查询 .