ContactsContract.RawContacts 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
原始联系人表的常量,其中包含每个同步帐户中每个人的一行联系人信息。
[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
- 继承
- 属性
注解
原始联系人表的常量,其中包含每个同步帐户中每个人的一行联系人信息。 同步适配器和联系人管理应用是此 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, "Mike Sullivan");
getContentResolver().insert(Data.CONTENT_URI, values);
</p>
批处理方法是迄今为止的首选方法。 它将原始联系人及其构成数据行插入到单个数据库事务中,并导致最多一次聚合传递。
ArrayList<ContentProviderOperation> ops =
new ArrayList<ContentProviderOperation>();
...
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, "Mike Sullivan")
.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 + "<>0", null, null, null);
...
Cursor c2 = getContentResolver().query(rawContactUri,
RawContacts.DELETED + "<>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.RawContacts
Java 文档。
此页面的某些部分是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的条款使用。
字段
ContentItemType |
将原始联系人 ID 追加到 |
ContentType |
未提供特定 ID 值时的结果 |
属性
Class |
返回此 |
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) |
|
GetHashCode() |
返回对象的哈希代码值。 (继承自 Object) |
GetLocalAccountName(Context) |
原始联系人插入时使用的 |
GetLocalAccountType(Context) |
原始联系人插入时使用的 |
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) |
原始联系人表的常量,其中包含每个同步帐户中每个人的一行联系人信息。 |