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
- Наследование
- Атрибуты
Комментарии
Константы для необработанной таблицы контактов, которая содержит одну строку контактных данных для каждого пользователя в каждой синхронизированной учетной записи. Адаптеры синхронизации и приложения для управления контактами являются основными потребителями этого API.
<h3>Агрегирование</h3>
Как только вставляется необработанный контакт или когда изменяются его составные данные, поставщик будет проверка, совпадает ли необработанный контакт с другими существующими необработанными контактами, и если да, будет агрегировать его с ними. Агрегирование отражается в RawContacts
таблице изменением #CONTACT_ID
поля, которое является ссылкой на агрегатный контакт.
Изменения структурированного имени, организации, номера телефона, адреса электронной почты или псевдонима вызывают повторную статистическую обработку.
См. также 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 td.><> Адаптеры синхронизации должны пытаться сохранить идентификаторы строк во время обновлений. Другими словами, адаптеру синхронизации гораздо лучше обновить необработанный контакт, а не удалять и повторно вставлять его.</td></tr><td><>long</td<>td>#CONTACT_ID
</td td><td>только< для чтения/td td<>>— идентификатор строки в таблице, к ContactsContract.Contacts
которой принадлежит этот необработанный контакт. Необработанные контакты связаны с контактами процессом агрегирования, который может управляться с помощью #AGGREGATION_MODE
полей и AggregationExceptions
.</td></tr<>tr><td>int</td<>td#AGGREGATION_MODE
></td><td>read/write</td><td td>Механизм, который позволяет программно управлять процессом агрегирования. Допустимые значения: #AGGREGATION_MODE_DEFAULT
и #AGGREGATION_MODE_DISABLED
#AGGREGATION_MODE_SUSPENDED
. См. также AggregationExceptions
.</td></tr<><>td>int</td<>td<>#DELETED
/td><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#STARRED
></td><td td>read/write</td><td>Индикатор для избранных контактов: "1", если избранное, "0" в противном случае. Изменение этого поля немедленно влияет на соответствующий агрегированный контакт: если какие-либо необработанные контакты в этом агрегатном контакте помечены звездочкой, то сам контакт помечается как отмеченный звездочкой.</td></tr><td><>String</td<>td#CUSTOM_RINGTONE
></td<>td td>read/write</td td><td>— настраиваемый мелодия звонка, связанная с необработанным контактом. Обычно это универсальный код ресурса (URI), возвращаемый действием, запущенным с намерением android.media.RingtoneManager#ACTION_RINGTONE_PICKER
. Чтобы повлиять на соответствующее значение агрегатного контакта, это поле должно быть задано во время вставки необработанного контакта. Чтобы задать пользовательский мелодию звонка для контакта, используйте вместо него поле ContactsContract.Contacts#CUSTOM_RINGTONE Contacts.CUSTOM_RINGTONE
.</td></tr><td<>>int</td<>td#SEND_TO_VOICEMAIL
></td><td td>read/write</td><td>— индикатор того, следует ли переадресовывать звонки из этого необработанного контакта непосредственно в голосовую почту ('1') или нет ('0'). Чтобы повлиять на соответствующее значение агрегатного контакта, это поле должно быть задано во время вставки необработанного контакта.</td></tr><td><>String</td<>td>#ACCOUNT_NAME
</td td><td>read/write-once</td<>td — имя экземпляра>учетной записи, которому принадлежит эта строка, которое при связывании с #ACCOUNT_TYPE
определяет определенную учетную запись. Например, это будет адрес Gmail, если это учетная запись Google. Он должен быть задан во время вставки необработанного контакта и никогда не изменялся после этого.</td></tr tr>><<td>String</td><td><#ACCOUNT_TYPE
/td<>td>read/write-once</td><td>
Тип учетной записи, которой принадлежит эта строка, которая при связывании с #ACCOUNT_NAME
идентифицирует определенную учетную запись. Он должен быть задан во время вставки необработанного контакта и никогда не изменялся после этого.
Чтобы обеспечить уникальность, следует выбирать новые типы учетных записей в соответствии с соглашением об именовании пакетов Java. Таким образом, учетная запись Google имеет тип "com.google".
</td></tr tr>><<td>String</td><td><#DATA_SET
/td<>td>read/write-once</td><td>
Набор данных в учетной записи, к которой принадлежит эта строка. Это позволяет нескольким адаптерам синхронизации для одного типа учетной записи различать данные друг друга. Сочетание #ACCOUNT_TYPE
, #ACCOUNT_NAME
и #DATA_SET
определяет набор данных, связанных с одним адаптером синхронизации.
Этот параметр по умолчанию пуст и является полностью необязательным. Его необходимо заполнить только в том случае, если несколько адаптеров синхронизации вводят разные данные для одного типа учетной записи и имени учетной записи.
Он должен быть задан во время вставки необработанного контакта и никогда не изменялся после этого.
</td></tr><td><>String</td<>td#SOURCE_ID
></td td<>td>read/write</td td><>Строка, которая однозначно идентифицирует эту строку для своей исходной учетной записи. Обычно он устанавливается во время вставки необработанного контакта и не изменяется после этого. Одним заметным исключением является новый необработанный контакт: он будет иметь имя и тип учетной записи (и, возможно, набор данных), но без исходного идентификатора. Это указывает адаптеру синхронизации, что необходимо создать новый контакт на стороне сервера, а его идентификатор хранится в соответствующем поле SOURCE_ID на телефоне. </td></tr><td><>int</td><td<#VERSION
>/td td><td>только< для чтения/td><td>номер версии, который обновляется при каждом изменении этой строки или связанных с ней данных. Это поле можно использовать для оптимистической блокировки необработанного контакта. </td></tr<>td<>>int</td<>td>#DIRTY
</td><td td>read/write</td td<>>Флаг, указывающий, что #VERSION
изменилось, и эта строка должна быть синхронизирована учетной записью-владельцем. При изменении необработанного контакта автоматически устанавливается значение "1", если в URI ContactsContract#CALLER_IS_SYNCADAPTER
не указан параметр запроса. Адаптер синхронизации всегда должен предоставлять этот параметр запроса, чтобы предотвратить ненужную синхронизацию: пользователь изменяет некоторые данные на сервере, адаптер синхронизации обновляет флаг контакта на телефоне (без флага CALLER_IS_SYNCADAPTER), который устанавливает флаг DIRTY, который запускает синхронизацию для переноса изменений на сервер. </td></tr><td><>String</td<>td#SYNC1
></td<>td td>read/write</td td><td>Универсальный столбец, предоставленный для произвольного использования адаптерами синхронизации. Поставщик содержимого хранит эти сведения от имени адаптера синхронизации, но не интерпретирует их каким-либо образом. </td></tr><td><>String</td<>td#SYNC2
></td<>td td>read/write</td td><td>Универсальный столбец для использования адаптерами синхронизации. </td></tr><td><>String</td<>td#SYNC3
></td<>td td>read/write</td td><td>Универсальный столбец для использования адаптерами синхронизации. </td></tr><td><>String</td<>td#SYNC4
></td<>td td>read/write</td td><td>Универсальный столбец для использования адаптерами синхронизации. </td></tr></table>
Документация по Java для android.provider.ContactsContract.RawContacts
.
Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом Android и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License.
Поля
ContentItemType |
Тип MIME результатов при добавлении необработанного идентификатора контакта к |
ContentType |
Тип MIME результатов |
Свойства
Class |
Возвращает класс среды выполнения данного объекта |
ContentUri |
URI стиля content:// для этой таблицы, который запрашивает каталог необработанных строк контактов, соответствующих критериям выбора. |
Handle |
Дескриптор базового экземпляра Android. (Унаследовано от Object) |
JniIdentityHashCode |
Константы для необработанной таблицы контактов, которая содержит одну строку контактных данных для каждого пользователя в каждой синхронизированной учетной записи. (Унаследовано от Object) |
JniPeerMembers |
Константы для необработанной таблицы контактов, которая содержит одну строку контактных данных для каждого пользователя в каждой синхронизированной учетной записи. |
PeerReference |
Константы для необработанной таблицы контактов, которая содержит одну строку контактных данных для каждого пользователя в каждой синхронизированной учетной записи. (Унаследовано от Object) |
ThresholdClass |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. (Унаследовано от Object) |
ThresholdType |
Этот API поддерживает инфраструктуру Mono для 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() |
Вызывает ожидание текущего потока, пока он не пробудится, как правило, из-за <уведомления><<> или>прерывания или прерывания.>< (Унаследовано от Object) |
Wait(Int64) |
Вызывает ожидание текущего потока, пока он не пробудится, как правило, путем <уведомления><<> или>прерывания или прерывания<> или до истечения определенного количества реального времени. (Унаследовано от Object) |
Wait(Int64, Int32) |
Вызывает ожидание текущего потока, пока он не пробудится, как правило, путем <уведомления><<> или>прерывания или прерывания<> или до истечения определенного количества реального времени. (Унаследовано от 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) |
Константы для необработанной таблицы контактов, которая содержит одну строку контактных данных для каждого пользователя в каждой синхронизированной учетной записи. |