Share via


ContactsContract.RawContacts 类

定义

原始联系人表的常量,其中包含每个同步帐户中每个人的一行联系人信息。

[Android.Runtime.Register("android/provider/ContactsContract$RawContacts", DoNotGenerateAcw=true)]
public sealed class ContactsContract.RawContacts : Java.Lang.Object
[<Android.Runtime.Register("android/provider/ContactsContract$RawContacts", DoNotGenerateAcw=true)>]
type ContactsContract.RawContacts = class
    inherit Object
继承
ContactsContract.RawContacts
属性

注解

原始联系人表的常量,其中包含每个同步帐户中每个人的一行联系人信息。 同步适配器和联系人管理应用是此 API 的主要使用者。

<h3>Aggregation</h3>

插入原始联系人或每当其构成数据发生更改时,提供程序将立即检查原始接触是否与其他现有原始联系人匹配,如果是,则会将其与这些联系人聚合。 聚合通过字段的#CONTACT_ID更改反映在RawContacts表中,字段是对聚合接触的引用。

对结构化名称、组织、电话号码、电子邮件地址或昵称的更改会触发重新聚合。

AggregationExceptions 请参阅以编程方式控制聚合的机制。

<h3>Operations</h3><dl><dt><b>Insert</b></dt><dd>

原始联系人可以增量插入,也可以批量插入。 增量方法更传统,但效率较低。 仅当创建原始联系人时没有 Data 可用的值时,才应使用它:

ContentValues values = new ContentValues();
            values.put(RawContacts.ACCOUNT_TYPE, accountType);
            values.put(RawContacts.ACCOUNT_NAME, accountName);
            Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values);
            long rawContactId = ContentUris.parseId(rawContactUri);

</p>

值可用后 Data ,插入这些值。 例如,下面是插入名称的方式:

values.clear();
            values.put(Data.RAW_CONTACT_ID, rawContactId);
            values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
            values.put(StructuredName.DISPLAY_NAME, &quot;Mike Sullivan&quot;);
            getContentResolver().insert(Data.CONTENT_URI, values);

</p>

批处理方法是迄今为止的首选方法。 它将原始联系人及其构成数据行插入到单个数据库事务中,并导致最多一次聚合传递。

ArrayList&lt;ContentProviderOperation&gt; ops =
                     new ArrayList&lt;ContentProviderOperation&gt;();
            ...
            int rawContactInsertIndex = ops.size();
            ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
                     .withValue(RawContacts.ACCOUNT_TYPE, accountType)
                     .withValue(RawContacts.ACCOUNT_NAME, accountName)
                     .build());

            ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
                     .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
                     .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
                     .withValue(StructuredName.DISPLAY_NAME, &quot;Mike Sullivan&quot;)
                     .build());

            getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);

</p>

请注意,使用 ContentProviderOperation.Builder#withValueBackReference(String, int) 来引用在第一个操作中插入的原始触点的“尚未知”索引值。

<dt><b>Update</b></dt><dd>

原始联系人可以增量更新,也可以分批更新。 应尽可能使用批处理模式。 过程和注意事项类似于上面记录的插入过程和注意事项。

</dd dt b Delete/b></dt><dd<>><><>

删除原始联系人时,将自动删除其所有数据行以及 StatusUpdates、AggregationExceptions、PhoneLookup 行。 删除与行 Contacts 关联的所有原始联系人时,也会自动删除该 Contacts 行本身。

调用 resolver.delete(...)不会立即删除原始联系人行。 相反,它会在原始接触上设置 #DELETED 标志,并从其聚合接触中删除原始接触。 然后,同步适配器从服务器中删除原始联系人,并通过再次调用 resolver.delete(...) 并传递 ContactsContract#CALLER_IS_SYNCADAPTER 查询参数来完成电话端删除。

某些同步适配器是只读的,这意味着它们只将服务器端更改同步到手机,而不是将反向更改同步。 如果其中一个原始联系人标记为要删除,它将保留在手机上。 但是,它实际上是不可见的,因为它不会是任何聚合接触的一部分。 </Dd>

<dt><b>Query</b></dt><dd>

可以轻松地在联系人中找到所有原始联系人:

Cursor c = getContentResolver().query(RawContacts.CONTENT_URI,
                     new String[]{RawContacts._ID},
                     RawContacts.CONTACT_ID + "=?",
                     new String[]{String.valueOf(contactId)}, null);

</p>

若要查找特定帐户中的原始联系人,可以输入帐户名称并键入所选内容,或将其作为查询参数传递。 后一种方法更可取,尤其是在可以重复使用 URI 时:

Uri rawContactUri = RawContacts.CONTENT_URI.buildUpon()
                     .appendQueryParameter(RawContacts.ACCOUNT_NAME, accountName)
                     .appendQueryParameter(RawContacts.ACCOUNT_TYPE, accountType)
                     .build();
            Cursor c1 = getContentResolver().query(rawContactUri,
                     RawContacts.STARRED + "&lt;&gt;0", null, null, null);
            ...
            Cursor c2 = getContentResolver().query(rawContactUri,
                     RawContacts.DELETED + "&lt;&gt;0", null, null, null);

</p>

读取原始联系人及其关联的所有数据的最佳方式是使用 Entity 目录。 如果原始联系人包含数据行,则实体游标将包含每个数据行的行。 如果原始联系人没有数据行,则游标仍将包含一行,其中包含原始联系人级别信息。

Uri rawContactUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId);
            Uri entityUri = Uri.withAppendedPath(rawContactUri, Entity.CONTENT_DIRECTORY);
            Cursor c = getContentResolver().query(entityUri,
                     new String[]{RawContacts.SOURCE_ID, Entity.DATA_ID, Entity.MIMETYPE, Entity.DATA1},
                     null, null, null);
            try {
                while (c.moveToNext()) {
                    String sourceId = c.getString(0);
                    if (!c.isNull(1)) {
                        String mimeType = c.getString(2);
                        String data = c.getString(3);
                        ...
                    }
                }
            } finally {
                c.close();
            }

</p></dd></dl<>h2>Columns</h2>

<table class=“jd-sumtable”><tr><th colspan='4'RawContacts></th></tr><tr td<>>long</td td>#_ID<<>/td><td td>read-only</td><td>Row ID. 同步适配器应尝试在更新期间保留行 ID。 换句话说,同步适配器最好更新原始联系人,而不是删除并重新插入它。</td></tr><td<>>long</td<>td td>#CONTACT_ID</td><td>只读</td<>td>此原始联系人所属的ContactsContract.Contacts表中行的 ID。 原始联系人通过聚合过程链接到联系人,这可由 字段和 AggregationExceptions进行控制#AGGREGATION_MODE。</td></tr><td>><int</td td><#AGGREGATION_MODE<>/td<>td td>读/写</td td><>允许以编程方式控制聚合过程的机制。 允许的值为 #AGGREGATION_MODE_DEFAULT#AGGREGATION_MODE_DISABLED#AGGREGATION_MODE_SUSPENDED。 另AggregationExceptions请参阅 。</td></tr><td><>int</td td><td><#DELETED/td<>td>read/write</td td><>:“deleted”标志:“0”默认情况下,如果行已标记为要删除,则为“1”。 在原始联系人上调用 时 android.content.ContentResolver#delete ,会将其标记为要删除,并从其聚合联系人中删除。 同步适配器删除服务器上的原始联系人,然后再次调用 ContactResolver.delete,这次传递ContactsContract#CALLER_IS_SYNCADAPTER查询参数以完成数据删除。</td></tr><td><>int</td td><td><#STARRED/td<>td>读/写</td td><>收藏联系人的指示器:“1”(如果收藏),否则为“0”。 更改此字段将立即影响相应的聚合接触:如果该聚合接触中的任何原始触点都标有星标,则触点本身将标记为带星标。</td></tr><td>><String</td><td<#CUSTOM_RINGTONE>/td<>td>读/写</td td><>与原始联系人关联的自定义铃声。 通常,这是使用 意向启动的活动返回的 android.media.RingtoneManager#ACTION_RINGTONE_PICKER URI。 若要对聚合接触的相应值产生影响,应在插入原始接触时设置此字段。 若要在联系人上设置自定义铃声,请改用 字段ContactsContract.Contacts#CUSTOM_RINGTONE Contacts.CUSTOM_RINGTONE。</td></tr><><td>int</td td<>td<>#SEND_TO_VOICEMAIL/td<>td>读/写</td td td><>指示是否应将来自此原始联系人的呼叫直接转发到语音邮件 ('1') ('0') 。 若要对聚合接触的相应值产生影响,应在插入原始接触时设置此字段。</td></tr><td<>>String</td><td>#ACCOUNT_NAME</td><td>read/write-once</td td<>>此行所属的帐户实例的名称,当与 #ACCOUNT_TYPE 配对时标识特定帐户。 例如,如果 Gmail 地址是 Google 帐户,则为该地址。 它应在插入原始接触时设置,之后永远不会更改。</td></tr><td>><String</td td<><#ACCOUNT_TYPE>/td<>td>read/write-once</td td><>

此行所属的帐户类型,与 配对 #ACCOUNT_NAME 时标识特定帐户。 它应在插入原始接触时设置,之后永远不会更改。

为了确保唯一性,应根据 Java 包命名约定选择新的帐户类型。 因此,Google 帐户的类型为“com.google”。

</td></tr><td>><String</td td<><#DATA_SET>/td<>td>read/write-once</td td><>

此行所属的帐户中的数据集。 这允许同一帐户类型的多个同步适配器区分彼此的数据。 、 #ACCOUNT_NAME#DATA_SET 的组合#ACCOUNT_TYPE标识与单个同步适配器关联的一组数据。

默认情况下,这是空的,完全是可选的。 仅当多个同步适配器为同一帐户类型和帐户名称输入不同的数据时,才需要填充它。

它应在插入原始接触时设置,之后永远不会更改。

</td></tr><><td>String</td<>td><#SOURCE_ID/td<>td>read/write</td td><>String,用于将此行唯一标识到其源帐户。 通常,它是在插入原始触点时设置的,之后永远不会更改。 一个值得注意的例外是新的原始联系人:它将具有帐户名称和类型 (,并且可能) 数据集,但没有源 ID。这向同步适配器指示需要在服务器端创建新联系人,其 ID 存储在手机上的相应SOURCE_ID字段中。 </td></tr>><<td>int</td<>td td><#VERSION/td><td>只读</td td><>每当此行或其相关数据更改时更新的版本号。 此字段可用于对原始接触进行乐观锁定。 </td></tr><td><>int</td td<>td>#DIRTY</td><td>读/写</td td<>>指示已更改的标志#VERSION,需要由其拥有的帐户同步此行。 只要原始联系人发生更改,值将自动设置为“1”,除非 URI 指定了 ContactsContract#CALLER_IS_SYNCADAPTER 查询参数。 同步适配器应始终提供此查询参数以防止不必要的同步:用户更改服务器上的某些数据,同步适配器更新手机上的联系人 (没有CALLER_IS_SYNCADAPTER标志) 标志,这将设置 DIRTY 标志,这会触发同步以将更改带到服务器。 </td></tr><><td>String</td<>td><#SYNC1/td<>td>read/write</td td><td>Generic column provided for 任意供同步适配器使用。 内容提供程序代表同步适配器存储此信息,但不会以任何方式解释此信息。 <供同步适配器使用的 /td></tr><><td>String</td<>td<#SYNC2>/td<>td>读/写</td td><>泛型列。 <供同步适配器使用的 /td></tr><><td>String</td<>td<#SYNC3>/td<>td>读/写</td td><>泛型列。 <供同步适配器使用的 /td></tr><><td>String</td<>td<#SYNC4>/td<>td>读/写</td td><>泛型列。 </td></tr></table>

android.provider.ContactsContract.RawContactsJava 文档。

此页面的某些部分是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的条款使用。

字段

ContentItemType

将原始联系人 ID 追加到 #CONTENT_URI时的结果的 MIME 类型,生成单个人员的子目录。

ContentType

未提供特定 ID 值时的结果 #CONTENT_URI 的 MIME 类型,可能会返回多个原始联系人。

属性

Class

返回此 Object的运行时类。

(继承自 Object)
ContentUri

此表的 content:// 样式 URI,它请求与选择条件匹配的原始联系人行的目录。

Handle

基础 Android 实例的句柄。

(继承自 Object)
JniIdentityHashCode

原始联系人表的常量,其中包含每个同步帐户中每个人的一行联系人信息。

(继承自 Object)
JniPeerMembers

原始联系人表的常量,其中包含每个同步帐户中每个人的一行联系人信息。

PeerReference

原始联系人表的常量,其中包含每个同步帐户中每个人的一行联系人信息。

(继承自 Object)
ThresholdClass

此 API 支持 Mono for Android 基础结构,不应直接从代码中使用。

(继承自 Object)
ThresholdType

此 API 支持 Mono for Android 基础结构,不应直接从代码中使用。

(继承自 Object)

方法

Clone()

创建并返回此对象的副本。

(继承自 Object)
Dispose()

原始联系人表的常量,其中包含每个同步帐户中每个人的一行联系人信息。

(继承自 Object)
Dispose(Boolean)

原始联系人表的常量,其中包含每个同步帐户中每个人的一行联系人信息。

(继承自 Object)
Equals(Object)

指示某个其他对象是否“等于”此对象。

(继承自 Object)
GetContactLookupUri(ContentResolver, Uri)

android.provider.ContactsContract.Contacts#CONTENT_LOOKUP_URI为给定RawContacts条目的父android.provider.ContactsContract.Contacts项生成样式Uri

GetHashCode()

返回对象的哈希代码值。

(继承自 Object)
GetLocalAccountName(Context)

原始联系人插入时使用的 #ACCOUNT_NAME 默认值,不为此列输入值。

GetLocalAccountType(Context)

原始联系人插入时使用的 #ACCOUNT_TYPE 默认值,不为此列输入值。

JavaFinalize()

当垃圾回收确定不再引用对象时,由垃圾回收器对对象调用。

(继承自 Object)
Notify()

唤醒正在等待此对象的监视器的单个线程。

(继承自 Object)
NotifyAll()

唤醒正在等待此对象的监视器的所有线程。

(继承自 Object)
SetHandle(IntPtr, JniHandleOwnership)

设置 Handle 属性。

(继承自 Object)
ToArray<T>()

原始联系人表的常量,其中包含每个同步帐户中每个人的一行联系人信息。

(继承自 Object)
ToString()

返回对象的字符串表示形式。

(继承自 Object)
UnregisterFromRuntime()

原始联系人表的常量,其中包含每个同步帐户中每个人的一行联系人信息。

(继承自 Object)
Wait()

导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>。<>

(继承自 Object)
Wait(Int64)

导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<>

(继承自 Object)
Wait(Int64, Int32)

导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<>

(继承自 Object)

显式接口实现

IJavaPeerable.Disposed()

原始联系人表的常量,其中包含每个同步帐户中每个人的一行联系人信息。

(继承自 Object)
IJavaPeerable.DisposeUnlessReferenced()

原始联系人表的常量,其中包含每个同步帐户中每个人的一行联系人信息。

(继承自 Object)
IJavaPeerable.Finalized()

原始联系人表的常量,其中包含每个同步帐户中每个人的一行联系人信息。

(继承自 Object)
IJavaPeerable.JniManagedPeerState

原始联系人表的常量,其中包含每个同步帐户中每个人的一行联系人信息。

(继承自 Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

原始联系人表的常量,其中包含每个同步帐户中每个人的一行联系人信息。

(继承自 Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

原始联系人表的常量,其中包含每个同步帐户中每个人的一行联系人信息。

(继承自 Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

原始联系人表的常量,其中包含每个同步帐户中每个人的一行联系人信息。

(继承自 Object)

扩展方法

JavaCast<TResult>(IJavaObject)

执行 Android 运行时检查的类型转换。

JavaCast<TResult>(IJavaObject)

原始联系人表的常量,其中包含每个同步帐户中每个人的一行联系人信息。

GetJniTypeName(IJavaPeerable)

原始联系人表的常量,其中包含每个同步帐户中每个人的一行联系人信息。

适用于