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>Агрегирование</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, &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 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 результатов при добавлении необработанного идентификатора контакта к #CONTENT_URI, что дает подкаталог одного человека.

ContentType

Тип MIME результатов #CONTENT_URI из, когда не указано определенное значение идентификатора и может быть возвращено несколько необработанных контактов.

Свойства

Class

Возвращает класс среды выполнения данного объекта Object.

(Унаследовано от Object)
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)

Создайте android.provider.ContactsContract.Contacts#CONTENT_LOOKUP_URI стиль Uri для родительской android.provider.ContactsContract.Contacts записи данной RawContacts записи.

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()

Вызывает ожидание текущего потока, пока он не пробудится, как правило, из-за <уведомления><<> или>прерывания или прерывания.><

(Унаследовано от 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)

Константы для необработанной таблицы контактов, которая содержит одну строку контактных данных для каждого пользователя в каждой синхронизированной учетной записи.

Применяется к