• RawContact


    public static final class
    ContactsContract.RawContacts
    extends Object
    implements BaseColumns ContactsContract.ContactOptionsColumns ContactsContract.RawContactsColumns ContactsContract.SyncColumns
    java.lang.Object
            android.provider.ContactsContract.RawContacts
    Class Overview
        Constants for the raw contacts table, 
        which contains one row of contact information for each person in each synced account. 

    raw contact就对应一个联系人
    Sync adapters and contact management apps are the primary consumers of this API. 
    Aggregation
        As soon as a raw contact is inserted or whenever its constituent data changes, 
        the provider will check if the raw contact matches other existing raw contacts and if so will aggregate it with those. 
        The aggregation is reflected in the ContactsContract.RawContacts table by the change of the CONTACT_ID field, 
        which is the reference to the aggregate contact.
        Changes to the structured name, organization, phone number, email address, or nickname trigger a re-aggregation. 
    参照Contact类的描述
        A Contact cannot be created explicitly.
         When a raw contact is inserted, the provider will first try to find a Contact representing the same person. 
         If one is found, the raw contact's CONTACT_ID column gets the _ID of the aggregate Contact
         . If no match is found, the provider automatically inserts a new Contact and puts its _ID into the CONTACT_ID column of the newly inserted raw contact.
    大概可以得出raw contact和组(contact)的匹配过程
        当raw contact被插入或时,系统就会检查是否可以把该raw contact加到已经有的组(contact)。
        如果找到可以加入的组,就把组ID写到raw contact的CONTACT_ID这个数据项中。
        如果没找到就由系统重新创建一组,并把组ID写到raw contact的CONTACT_ID这个数据项中。
        如果raw contact的structured name, organization, phone number, email address, or nickname被改变。
        
        系统就会检查raw contact是否还属于raw contact的CONTACT_ID标记的那个组。
        如果发现raw contact不属于raw contact的CONTACT_ID标记的那个组。
        那么系统就会找是否可以把该raw contact加到已经有的其他组(contact)
        如果找到可以加入的组,就把组ID写到raw contact的CONTACT_ID这个数据项中。
        如果没找到就由系统重新创建一组,并把组ID写到raw contact的CONTACT_ID这个数据项中。
        注意:这的组是指contact(Aggregation of raw contact)
        关于分组机制的编程可参考类ContactsContract.AggregationExceptions.
    一个raw contact的信息主要由主表(raw contact类声明的数据列),多项子表数据ContactsContract.Data来进行表示
    子表数据可以通过设置MIMETYPE项的值来表示多种类型的数据
    比如通过设置MIMETYPE项为StructuredName.CONTENT_ITEM_TYPE来说明是StructuredName数据。
    当然对于DATA1~DATA15也要按照StructuredName中定义的数据格式来写入数据。
    子表数据可以是
        *  StructuredName.CONTENT_ITEM_TYPE
        * Phone.CONTENT_ITEM_TYPE
        * Email.CONTENT_ITEM_TYPE
        * Photo.CONTENT_ITEM_TYPE
        * Organization.CONTENT_ITEM_TYPE
        * Im.CONTENT_ITEM_TYPE
        * Nickname.CONTENT_ITEM_TYPE
        * Note.CONTENT_ITEM_TYPE
        * StructuredPostal.CONTENT_ITEM_TYPE
        * GroupMembership.CONTENT_ITEM_TYPE
        * Website.CONTENT_ITEM_TYPE
        * Event.CONTENT_ITEM_TYPE
        * Relation.CONTENT_ITEM_TYPE

    :关于子表每种类型的具体数据格式都android.provider.ContactsContract.CommonDataKinds包中相关类找到说明。比如Email是在CommonDataKinds.Email中.
    主表数据共18项
    变量名                                列名                                备注
     _ID                                _id                                    这个就是raw_contact_id
     CONTACT_ID                        contact_id
     AGGREGATION_MODE                  aggregation_mode                        分组模式
     DELETED                               deleted                                是否已经被删除
     TIMES_CONTACTED                times_contacted
     LAST_TIME_CONTACTED            last_time_contacted
     STARRED                            starred
     CUSTOM_RINGTONE                    custom_ringtone   来电铃声的Url
     SEND_TO_VOICEMAIL                    send_to_voicemail
     ACCOUNT_NAME                        account_name
     ACCOUNT_TYPE                        account_type
     SOURCE_ID                            sourceid
     VERSION                            version
     DIRTY                                dirty
     SYNC1~SYNC1                        sync1~sync2
     注意1: _ID就是raw_contact_id
     注意2:当我们查询时,通常是查询没有删除的联系人。所以要加上条件RawContacts.DELETED==0:
     RawContacts.DELETED + "=?", new String[] {String.valueOf(0)}
     注意3:主表中没有名字的信息.名字在子表StructuredName中。
    子表数据共有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一,数据插入可以参考《raw contact数据插入 》
    二,数据查询可以参考《rawContact数据查询 》
    三,数据更新
        final int        update(Uri  uri, ContentValues  values, String  where, String[]  selectionArgs)
        Update row(s) in a content URI.
        其使用很简单。
        ContentValues  values可以参考《rawContact数据插入 》
        String  where, String[]  selectionArgs可以参考《rawContact数据查询 》
        主表更新也可以用批量进行
        Raw contacts can be updated incrementally or in a batch.
        Batch mode should be used whenever possible. 
        The procedures and considerations are analogous to those documented above for inserts. 
        子表更新也可以用批量进行
        Just as with insert, update can be done incrementally or as a batch, the batch mode being the preferred method:
         ArrayList<ContentProviderOperation> ops = Lists.newArrayList();
         ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI)
                  .withSelection(Data._ID + "=?", new String[]{String.valueOf(dataId)})
                  .withValue(Email.DATA, "somebody@android.com")
                  .build());
         getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);

    四,数据删除
        主表删除
            getContentResolver().delete(RawContacts.CONTENT_URI, null, null);
            注意:这里会除了会删除主表,也会把相应的子表删除掉。
        子表删除
            getContentResolver().delete(Data.CONTENT_URI, null, null)
        也可以批量删除
            Just as with insert and update, deletion can be done either using the delete(Uri, String, String[]) method 
            or using a ContentProviderOperation:
             ArrayList<ContentProviderOperation> ops = Lists.newArrayList();
             ops.add(ContentProviderOperation.newDelete(Data.CONTENT_URI)
                      .withSelection(Data._ID + "=?", new String[]{String.valueOf(dataId)})
                      .build());
             getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
  • 相关阅读:
    java web报错The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
    在cmd下执行mvn help:system 报错
    win10安装mysql5.7
    centos7装单机hadoop2.7.3
    win10装jdk
    oracle中批量修改年份和月份,但不修改时分秒
    Python 正则匹配网页内的IP地址及端口号
    python 爬取网页内的代理服务器列表(需调整优化)
    python 爬取百度url
    Python 爬取SeeBug poc
  • 原文地址:https://www.cnblogs.com/carbs/p/2594705.html
Copyright © 2020-2023  润新知