android contact phone.type_mobile,Android-2.0中电话本contact的读写操作.doc

一.前言

1.1 Android的电话本的机制.

Android的电话本通过contentProvider封装好的。我们只要通过sdk提供的Uri和字段来对其进行增、删、改、查。

1.2 权限

1.3 找到ContentProvider维护的Sqlist数据库文件( .db)

ContentProvider其实自己管理一个Sqlist数据库文件( .db)。这个文件的路径为/data/data/viders.contacts/databases/contacts2.db。如图:

1.4 查看ContentProvider维护的Sqlist数据库文件( .db)

在模拟器中的电话本里创建几个联系人,打开1.2中的.db文件,可以用数据库查看工具SQLite Expert Professional打开看下,如图:

从上图,可以看出左边是.db文件的表,点开各表后可以看出主要的表有raw_contacts,contacts,data

二. api

2.1 三张主表.

从api中可以看到vider.ContactsContract是sdk2.0的类库,从api和上面的图都可以看出关于电话本主要信息都存在 ContactsContract.Data, ContactsContract.RawContacts, ContactsContract.Contacts三张表里

2.1.1 以上三张表的关联关系.

ContactsContract.Data, ContactsContract.RawContacts, ContactsContract.Contacts 三张表的关联,

ContactsContract.RawContacts表里包含ContactsContract.Contacts的contact_id;ContactsContract.Data表里有ContactsContract.RawContacts的raw_contact_id,和ContactsContract.Contacts的contact_id

2.2 各数据对应的类库,电话本各字段的数据结构

2.2.1 Email 对应ContactsContract.CommonDataKinds.Email

TypeAliasData column

StringADDRESSDATA1Email address itself.

intTYPEDATA2Allowed values are:

TYPE_CUSTOM. Put the actual type in LABEL.

TYPE_HOME

TYPE_WORK

TYPE_OTHER

TYPE_MOBILE

StringLABELDATA3

Email数据有三个字段存储:ADDRESS为Email值;TYPE为类型,当为自定义(TYPE_CUSTOM)时,LABEL字段要写入用户自定义的类型;

2.2.2 IM 对应 ContactsContract.CommonDataKinds.Im

TypeAliasData column

StringDATADATA1

intTYPEDATA2Allowed values are:

TYPE_CUSTOM. Put the actual type in LABEL.

TYPE_HOME

TYPE_WORK

TYPE_OTHER

StringLABELDATA3

StringPROTOCOLDATA5Allowed values:

PROTOCOL_CUSTOM. Also provide the actual protocol name as CUSTOM_PROTOCOL.

PROTOCOL_AIM

PROTOCOL_MSN

PROTOCOL_YAHOO

PROTOCOL_SKYPE

PROTOCOL_QQ

PROTOCOL_GOOGLE_TALK

PROTOCOL_ICQ

PROTOCOL_JABBER

PROTOCOL_NETMEETING

StringCUSTOM_PROTOCOLDATA6

Im有5个字段

2.2.3 Phone 对应 ContactsContract.CommonDataKinds.Phone

TypeAliasData column

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
_PWM_DUTY_CYCLE); usleep(1000); set_pwm_duty_cycle(MUSIC_PWM_CHANNEL, 0); usleep(1000); for (int i = 0; i < music_chunk_size; i++) { set_pwm_duty_cycle(MUSIC是的,这段代码使用了Android提供的ContentProvider访问联系人数据,查询了指定联系人ID的电话_PWM_CHANNEL, music_data[music_index + i]); usleep(1000); } set_pwm_duty_cycle(MUSIC_PWM_CHANNEL号码。具体来说,它通过调用getContentResolver()方法获取ContentResolver对象,然后调用query()方法查询, 0); music_index += music_chunk_size; } free(music_data); } void marquee() { for (系统联系人数据。它的参数如下: - Uri uri:ContentProvider的URI,表示要查询的数据源。在这int i = 0; i < 4; i++) { set_gpio_output_value(LED_GPIO_PIN_1, i == 0里,它是ContactsContract.CommonDataKinds.Phone.CONTENT_URI,表示查询系统联系人电话号码数据。 - String[] projection:); set_gpio_output_value(LED_GPIO_PIN_2, i == 1); set_gpio_output_value(LED_GPIO_PIN_3, i查询需要返回哪些列,如果为null,表示返回所有列。 - String selection:查询数据的筛选条件,相当 == 2); set_gpio_output_value(LED_GPIO_PIN_4, i == 3); usleep(LED_PWM_DUTY_CYCLE); 于SQL语句的WHERE部分。在这里,它是ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = } set_gpio_output_value(LED_GPIO_PIN_1, 1); set_gpio_output_value(LED_GPIO_PIN_2, 1 " + contactId,表示查询指定联系人ID的电话号码。 - String[] selectionArgs:如果在selection有占); set_gpio_output_value(LED_GPIO_PIN_3, 1); set_gpio_output_value(LED_GPIO_PIN_4, 1); 位符(如“name = ?”),那么可以使用selectionArgs参数传递具体的值。 - String sortOrder:查询 usleep(LED_PWM_PERIOD - 4 * LED_PWM_DUTY_CYCLE); set_gpio_output_value(LED_GPIO_PIN_1, 0结果的排序方式。 在这个例子,它使用了null作为projection和sortOrder的值,表示返回所有列); set_gpio_output_value(LED_GPIO_PIN_2, 0); set_gpio_output_value(LED_GPIO_PIN_3, 0); 并按默认方式排序。查询结果是一个Cursor对象,可以通过Cursor的方法遍历查询结果集合。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值