RAW_CONTACT子表的查询很有意思。
RAW_CONTACT子表有很多。主要的有:
android.provider.ContactsContract.CommonDataKinds.StructuredName;
android.provider.ContactsContract.CommonDataKinds.Phone;
android.provider.ContactsContract.CommonDataKinds.Email;
android.provider.ContactsContract.CommonDataKinds.Organization;
我们可以通过以下形式来进行查询
// Set our expandable list adapter
String[] projection = new String[] {
Phone._ID,
Phone.DISPLAY_NAME,
Phone.NUMBER,
Phone.RAW_CONTACT_ID,
};
Cursor contactData = managedQuery(
Phone.CONTENT_URI,
null, //这里是查询所有的列。可以用projection代替来进行指定查询
null,
null,
null);
我用下面的语句打印出查询到所有列名
(注意用Email查询出的列一样,说明不同子表查的列数量一样,只是在DATA1到DATA15的意义不同)
int colCount=contactData.getColumnCount();
for(int i=0;i<colCount;i++)
Log.i(TAG,i+"i:"+contactData.getColumnName(i));
但打印出来的列比我想象的多很多。我想Phone.CONTENT_URI是对应数据库的“视图”概念
查询所得一共有55列
一、子表本身数据,ContactsContract.Data中声明的25个列:
变量名 列名 备注
_ID _id
MIMETYPE mimetype
RAW_CONTACT_ID raw_contact_id
IS_PRIMARY is_primary
IS_SUPER_PRIMARY is_super_primary
DATA_VERSION data_version
DATA1~DATA15 data1~data15
SYNC1~SYNC4 data_sync1~data_sync4
二、和ContactsContract.StatusUpdates连接,所得的6项数据
变量名 列名 备注
PRESENCE mode PRESENCE_STATUS变量也是“mode”,但按照Data的文档是PRESENCE
STATUS status PRESENCE_CUSTOM_STATUS变量也是“mode”,但按照Data的文档应该是STATUS
STATUS_TIMESTAMP status_ts
STATUS_RES_PACKAGE status_res_package
STATUS_LABEL status_label
STATUS_ICON status_icon
注意1:其实PRESENCE_STATUS和PRESENCE_CUSTOM_STATUS并没有在StatusUpdates申明的列当中。当然也就不可能被连接进来。
注意2:StatusUpdates共有11项数据,但还有5项数据没被连接进来。
他们是DATA_ID,PROTOCOL,CUSTOM_PROTOCOL,IM_HANDLE, IM_ACCOUNT。
三、连接RawContacts所得的11项目数据。
变量名 列名 备注
CONTACT_ID contact_id
TIMES_CONTACTED times_contacted
LAST_TIME_CONTACTED last_time_contacted
STARRED starred
CUSTOM_RINGTONE custom_ringtone
SEND_TO_VOICEMAIL send_to_voicemail
ACCOUNT_NAME account_name
ACCOUNT_TYPE account_type
SOURCE_ID sourceid
VERSION version
DIRTY dirty
注意1:虽然RawContacts共拥有18项数据,但这里只包含了11项目。还有7项没被包含进来。
他们分别是_ID,AGGREGATION_MODE,DELETED,SYNC1~SYNC4
注意2:RawContactsColumns一共定义的三项目数据,但是只有一项CONTACT_ID被包含进来。
AGGREGATION_MODE和DELETED没有被包含进来
按照ContactsContract.Data中的文档,只有CONTACT_ID,AGGREGATION_MODE,DELETED三项会被包含来的啊。
但实际并非如此。WHY?
四、连接Contacts所得的9项目数据。
变量名 列名 备注
LOOKUP_KEY lookup
PHOTO_ID photo_id
IN_VISIBLE_GROUP in_visible_group
CONTACT_PRESENCE contact_presence
ONTACT_STATUS contact_status
CONTACT_STATUS_TIMESTAMP contact_status_ts
CONTACT_STATUS_RES_PACKAGE contact_status_res_package
CONTACT_STATUS_LABEL contact_status_label
CONTACT_STATUS_ICON contact_status_icon
注意1:虽然RawContacts共拥有17项数据,但这里只包含了9项目。还有8项没被包含进来。
他们分别是: _ID,NAME_RAW_CONTACT_ID,DISPLAY_NAME_PRIMARY,TIMES_CONTACTED,
LAST_TIME_CONTACTED,STARRED,CUSTOM_RINGTONE,SEND_TO_VOICEMAIL
注意2:在RawContacts和Contacts中都有一个名叫TIMES_CONTACTED的变量名,且他们的列名都为“times_contacted”。
参照TIMES_CONTACTED在两个类的中的定义,
Contacts中TIMES_CONTACTED值为Contacts组中所有RawContacts的TIMES_CONTACTED值的最大值。
所以查询所得名叫times_contacted的列应该是对于RawContacts的TIMES_CONTACTED。
LAST_TIME_CONTACTED同理。
注意3:STARRED参照定义也可知查询所得名叫STARRED的列应该是对于RawContacts的STARRED。
注意4:对于CUSTOM_RINGTONE和SEND_TO_VOICEMAIL, 在RawContacts和Contacts的列中都有对他们的申明,且它们的定义也相同。
参照它们的定义文档来看也不是很清楚。
但我们这里主要是针对RawContacts的查询,我想他们应该是来自于RawContacts,而不是Contacts。
注意5:对于TIMES_CONTACTED,LAST_TIME_CONTACTED,STARRED,CUSTOM_RINGTONE,SEND_TO_VOICEMAIL
然参照ContactsContract.Data文档他们是被Contacts连接进来,
但通过以上分析,他们没有Contact连接进来。而是通过RawContacts连接进来。
五、Data.GroupMembership的一项数据。
变量名 列名 备注
GROUP_SOURCE_ID group_sourceid
这个数据应该是通过连接Data.GroupMembership所得的。但是文档中并没说明
六,未确定来源数据2项
列名 备注
display_name
res_package
注意1:display_name可能来自ContactsColumns的DISPLAY_NAME,及来自于Conact.
但关于Conact的DISPLAY_NAME来自于数据库的哪里还是puzzle.可能来自于DISPLAY_NAME_PRIMARY。
RAW_CONTACT子表有很多。主要的有:
android.provider.ContactsContract.CommonDataKinds.StructuredName;
android.provider.ContactsContract.CommonDataKinds.Phone;
android.provider.ContactsContract.CommonDataKinds.Email;
android.provider.ContactsContract.CommonDataKinds.Organization;
我们可以通过以下形式来进行查询
// Set our expandable list adapter
String[] projection = new String[] {
Phone._ID,
Phone.DISPLAY_NAME,
Phone.NUMBER,
Phone.RAW_CONTACT_ID,
};
Cursor contactData = managedQuery(
Phone.CONTENT_URI,
null, //这里是查询所有的列。可以用projection代替来进行指定查询
null,
null,
null);
我用下面的语句打印出查询到所有列名
(注意用Email查询出的列一样,说明不同子表查的列数量一样,只是在DATA1到DATA15的意义不同)
int colCount=contactData.getColumnCount();
for(int i=0;i<colCount;i++)
Log.i(TAG,i+"i:"+contactData.getColumnName(i));
但打印出来的列比我想象的多很多。我想Phone.CONTENT_URI是对应数据库的“视图”概念
查询所得一共有55列
一、子表本身数据,ContactsContract.Data中声明的25个列:
变量名 列名 备注
_ID _id
MIMETYPE mimetype
RAW_CONTACT_ID raw_contact_id
IS_PRIMARY is_primary
IS_SUPER_PRIMARY is_super_primary
DATA_VERSION data_version
DATA1~DATA15 data1~data15
SYNC1~SYNC4 data_sync1~data_sync4
二、和ContactsContract.StatusUpdates连接,所得的6项数据
变量名 列名 备注
PRESENCE mode PRESENCE_STATUS变量也是“mode”,但按照Data的文档是PRESENCE
STATUS status PRESENCE_CUSTOM_STATUS变量也是“mode”,但按照Data的文档应该是STATUS
STATUS_TIMESTAMP status_ts
STATUS_RES_PACKAGE status_res_package
STATUS_LABEL status_label
STATUS_ICON status_icon
注意1:其实PRESENCE_STATUS和PRESENCE_CUSTOM_STATUS并没有在StatusUpdates申明的列当中。当然也就不可能被连接进来。
注意2:StatusUpdates共有11项数据,但还有5项数据没被连接进来。
他们是DATA_ID,PROTOCOL,CUSTOM_PROTOCOL,IM_HANDLE, IM_ACCOUNT。
三、连接RawContacts所得的11项目数据。
变量名 列名 备注
CONTACT_ID contact_id
TIMES_CONTACTED times_contacted
LAST_TIME_CONTACTED last_time_contacted
STARRED starred
CUSTOM_RINGTONE custom_ringtone
SEND_TO_VOICEMAIL send_to_voicemail
ACCOUNT_NAME account_name
ACCOUNT_TYPE account_type
SOURCE_ID sourceid
VERSION version
DIRTY dirty
注意1:虽然RawContacts共拥有18项数据,但这里只包含了11项目。还有7项没被包含进来。
他们分别是_ID,AGGREGATION_MODE,DELETED,SYNC1~SYNC4
注意2:RawContactsColumns一共定义的三项目数据,但是只有一项CONTACT_ID被包含进来。
AGGREGATION_MODE和DELETED没有被包含进来
按照ContactsContract.Data中的文档,只有CONTACT_ID,AGGREGATION_MODE,DELETED三项会被包含来的啊。
但实际并非如此。WHY?
四、连接Contacts所得的9项目数据。
变量名 列名 备注
LOOKUP_KEY lookup
PHOTO_ID photo_id
IN_VISIBLE_GROUP in_visible_group
CONTACT_PRESENCE contact_presence
ONTACT_STATUS contact_status
CONTACT_STATUS_TIMESTAMP contact_status_ts
CONTACT_STATUS_RES_PACKAGE contact_status_res_package
CONTACT_STATUS_LABEL contact_status_label
CONTACT_STATUS_ICON contact_status_icon
注意1:虽然RawContacts共拥有17项数据,但这里只包含了9项目。还有8项没被包含进来。
他们分别是: _ID,NAME_RAW_CONTACT_ID,DISPLAY_NAME_PRIMARY,TIMES_CONTACTED,
LAST_TIME_CONTACTED,STARRED,CUSTOM_RINGTONE,SEND_TO_VOICEMAIL
注意2:在RawContacts和Contacts中都有一个名叫TIMES_CONTACTED的变量名,且他们的列名都为“times_contacted”。
参照TIMES_CONTACTED在两个类的中的定义,
Contacts中TIMES_CONTACTED值为Contacts组中所有RawContacts的TIMES_CONTACTED值的最大值。
所以查询所得名叫times_contacted的列应该是对于RawContacts的TIMES_CONTACTED。
LAST_TIME_CONTACTED同理。
注意3:STARRED参照定义也可知查询所得名叫STARRED的列应该是对于RawContacts的STARRED。
注意4:对于CUSTOM_RINGTONE和SEND_TO_VOICEMAIL, 在RawContacts和Contacts的列中都有对他们的申明,且它们的定义也相同。
参照它们的定义文档来看也不是很清楚。
但我们这里主要是针对RawContacts的查询,我想他们应该是来自于RawContacts,而不是Contacts。
注意5:对于TIMES_CONTACTED,LAST_TIME_CONTACTED,STARRED,CUSTOM_RINGTONE,SEND_TO_VOICEMAIL
然参照ContactsContract.Data文档他们是被Contacts连接进来,
但通过以上分析,他们没有Contact连接进来。而是通过RawContacts连接进来。
五、Data.GroupMembership的一项数据。
变量名 列名 备注
GROUP_SOURCE_ID group_sourceid
这个数据应该是通过连接Data.GroupMembership所得的。但是文档中并没说明
六,未确定来源数据2项
列名 备注
display_name
res_package
注意1:display_name可能来自ContactsColumns的DISPLAY_NAME,及来自于Conact.
但关于Conact的DISPLAY_NAME来自于数据库的哪里还是puzzle.可能来自于DISPLAY_NAME_PRIMARY。