ContactsContract.RawContacts Klasse

Definition

Konstanten für die rohe Kontakttabelle, die eine Zeile mit Kontaktinformationen für jede Person in jedem synchronisierten Konto enthält.

[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
Vererbung
ContactsContract.RawContacts
Attribute

Hinweise

Konstanten für die rohe Kontakttabelle, die eine Zeile mit Kontaktinformationen für jede Person in jedem synchronisierten Konto enthält. Synchronisierungsadapter und Kontaktverwaltungs-Apps sind die primären Consumer dieser API.

<h3>Aggregation</h3>

Sobald ein Unformatierter Kontakt eingefügt wird oder sich seine konstituierenden Daten ändern, überprüft der Anbieter, ob der Rohkontakt mit anderen vorhandenen Rohkontakten übereinstimmt, und aggregiert ihn mit diesen. Die Aggregation wird in der RawContacts Tabelle durch die Änderung des #CONTACT_ID Felds reflektiert, das der Verweis auf den Aggregatkontakt ist.

Änderungen am strukturierten Namen, organization, der Telefonnummer, der E-Mail-Adresse oder des Spitznamens lösen eine Neuaggregation aus.

Siehe auch AggregationExceptions einen Mechanismus zum programmgesteuerten Steuern der Aggregation.

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

Unformatierte Kontakte können inkrementell oder in einem Batch eingefügt werden. Die inkrementelle Methode ist traditioneller, aber weniger effizient. Sie sollte nur verwendet werden, wenn zum Zeitpunkt der Erstellung des rohen Kontakts keine Data Werte verfügbar sind:

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>

Sobald Data Werte verfügbar sind, fügen Sie diese ein. So fügen Sie beispielsweise einen Namen ein:

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>

Die Batchmethode wird bei weitem bevorzugt. Er fügt den rohen Kontakt und die zugehörigen Datenzeilen in eine einzelne Datenbanktransaktion ein und verursacht höchstens einen Aggregationsdurchlauf.

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>

Beachten Sie die Verwendung von ContentProviderOperation.Builder#withValueBackReference(String, int) , um auf den noch unbekannten Indexwert des unformatierten Kontakts zu verweisen, der im ersten Vorgang eingefügt wurde.

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

Unformatierte Kontakte können inkrementell oder in einem Batch aktualisiert werden. Der Batchmodus sollte nach Möglichkeit verwendet werden. Die Verfahren und Überlegungen entsprechen denen, die oben für Einfügungen beschrieben wurden.

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

Wenn ein unformatierter Kontakt gelöscht wird, werden alle Datenzeilen sowie StatusUpdates, AggregationExceptions und PhoneLookup-Zeilen automatisch gelöscht. Wenn alle unformatierten Kontakte, die einer Contacts Zeile zugeordnet sind, gelöscht werden, wird auch die Contacts Zeile selbst automatisch gelöscht.

Der Aufruf von resolver.delete(...)löscht nicht sofort eine unformatierte Kontaktzeile. Stattdessen wird das #DELETED Flag für den unformatierten Kontakt festgelegt und der unformatierte Kontakt aus dem Aggregatkontakt entfernt. Der Synchronisierungsadapter löscht dann den unformatierten Kontakt vom Server und schließt das telefonseitige Löschen ab, indem er erneut aufruft resolver.delete(...) und den ContactsContract#CALLER_IS_SYNCADAPTER Abfrageparameter übergibt.

Einige Synchronisierungsadapter sind schreibgeschützt, was bedeutet, dass sie nur serverseitige Änderungen mit dem Telefon synchronisieren, aber nicht umgekehrt. Wenn einer dieser unformatierten Kontakte zum Löschen markiert ist, verbleibt er auf dem Telefon. Es wird jedoch effektiv unsichtbar sein, da es nicht Teil eines aggregierten Kontakts ist. </Dd>

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

Es ist einfach, alle unformatierten Kontakte in einem Kontakt zu finden:

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

</p>

Um unformatierte Kontakte in einem bestimmten Konto zu finden, können Sie entweder den Kontonamen und die Eingabe in die Auswahl eingeben oder sie als Abfrageparameter übergeben. Der letztere Ansatz ist vorzuziehen, insbesondere wenn Sie den URI wiederverwenden können:

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>

Die beste Möglichkeit, einen rohen Kontakt zusammen mit allen zugeordneten Daten zu lesen, ist die Verwendung des Verzeichnisses Entity . Wenn der rohe Kontakt Datenzeilen enthält, enthält der Entitätscursor eine Zeile für jede Datenzeile. Wenn der unformatierte Kontakt keine Datenzeilen enthält, enthält der Cursor weiterhin eine Zeile mit den unformatierten Informationen auf Kontaktebene.

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><td td<<#_ID>> read-only</td td>><Row>ID. Synchronisierungsadapter sollten versuchen, Zeilen-IDs während updates beizubehalten. Anders ausgedrückt: Es ist viel besser, wenn ein Synchronisierungsadapter einen Unformatierten Kontakt aktualisiert, anstatt ihn zu löschen und erneut einzufügen.</td></tr><tr><td>long</td><td td<#CONTACT_ID>/td<>read-only<>/td><td td>Die ID der Zeile in der Tabelle, zu der ContactsContract.Contacts dieser unformatierte Kontakt gehört. Unformatierte Kontakte werden durch den Aggregationsprozess mit Kontakten verknüpft, der durch das #AGGREGATION_MODE Feld und AggregationExceptionsgesteuert werden kann.</td></tr><tr><td>int</td><td td>#AGGREGATION_MODE</td><>read/write</td td>><Ein Mechanismus, der die programmgesteuerte Steuerung des Aggregationsprozesses ermöglicht. Die zulässigen Werte sind #AGGREGATION_MODE_DEFAULT, #AGGREGATION_MODE_DISABLED und #AGGREGATION_MODE_SUSPENDED. Siehe auch AggregationExceptions.</td></tr><tr><td>int</td><td><#DELETED/td><td>read/write</td><td>Das Flag "deleted": "0" standardmäßig, "1", wenn die Zeile zum Löschen markiert wurde. Wenn android.content.ContentResolver#delete für einen unformatierten Kontakt aufgerufen wird, wird er zum Löschen markiert und aus dem Aggregatkontakt entfernt. Der Synchronisierungsadapter löscht den Unformatierten Kontakt auf dem Server und ruft dann erneut ContactResolver.delete auf. Dieses Mal wird der ContactsContract#CALLER_IS_SYNCADAPTER Abfrageparameter übergeben, um die Datenentfernung abzuschließen.</td/tr><tr td><>int</td><td td<#STARRED>/td><>read/write</td><td>Ein Indikator für bevorzugte Kontakte: '1', wenn Favorit, andernfalls '0'.>< Die Änderung dieses Felds wirkt sich sofort auf den entsprechenden Aggregatkontakt aus: Wenn unformatierte Kontakte in diesem Aggregatkontakt mit Stern versehen sind, wird der Kontakt selbst als stern markiert.</td></tr><tr><td>String</td><td><#CUSTOM_RINGTONE/td td>><read/write</td td>><Ein benutzerdefinierter Klingelton, der einem unformatierten Kontakt zugeordnet ist. In der Regel ist dies der URI, der von einer Aktivität zurückgegeben wird, die mit der android.media.RingtoneManager#ACTION_RINGTONE_PICKER Absicht gestartet wurde. Um auswirkungen auf den entsprechenden Wert des Aggregatkontakts zu haben, sollte dieses Feld zum Zeitpunkt des Einfügens des rohen Kontakts festgelegt werden. Verwenden Sie stattdessen das FeldContactsContract.Contacts#CUSTOM_RINGTONE Contacts.CUSTOM_RINGTONE, um einen benutzerdefinierten Klingelton für einen Kontakt festzulegen.</td></tr><tr><td>int</td><td td>#SEND_TO_VOICEMAIL</td>><read/write</td><td td>Ein Indikator dafür, ob Anrufe von diesem unformatierten Kontakt direkt an Voicemail ('1') weitergeleitet werden sollen oder nicht ('0'). Um auswirkungen auf den entsprechenden Wert des Aggregatkontakts zu haben, sollte dieses Feld zum Zeitpunkt des Einfügens des rohen Kontakts festgelegt werden.</td></tr><tr><td>String</td><td>#ACCOUNT_NAME</td td><>read/write-once</td><td td>Der Name des Kontos instance, zu dem diese Zeile gehört, die in Kombination mit #ACCOUNT_TYPE einem bestimmten Konto identifiziert wird. Dies ist beispielsweise die Gmail-Adresse, wenn es sich um ein Google-Konto handelt. Er sollte zum Zeitpunkt des Einfügens des rohen Kontakts festgelegt und danach nie geändert werden.</td></tr><tr><td>String</td td<>td<#ACCOUNT_TYPE>/td td><>read/write-once</td><td td>

Der Kontotyp, zu dem diese Zeile gehört, der bei Kombination mit #ACCOUNT_NAME einem bestimmten Konto identifiziert. Er sollte zum Zeitpunkt des Einfügens des rohen Kontakts festgelegt und danach nie geändert werden.

Um die Eindeutigkeit sicherzustellen, sollten neue Kontotypen gemäß der Benennungskonvention für Java-Pakete ausgewählt werden. Daher ist ein Google-Konto vom Typ "com.google".

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

Das Dataset innerhalb des Kontos, zu dem diese Zeile gehört. Dadurch können mehrere Synchronisierungsadapter für denselben Kontotyp zwischen den Daten der anderen unterscheiden. Die Kombination von #ACCOUNT_TYPE, #ACCOUNT_NAMEund #DATA_SET identifiziert einen Satz von Daten, der einem einzelnen Synchronisierungsadapter zugeordnet ist.

Dies ist standardmäßig leer und vollständig optional. Es muss nur aufgefüllt werden, wenn mehrere Synchronisierungsadapter unterschiedliche Daten für denselben Kontotyp und Kontonamen eingeben.

Er sollte zum Zeitpunkt des Einfügens des rohen Kontakts festgelegt und danach nie geändert werden.

</td></tr><tr><td>String</td td><td<#SOURCE_ID>/td<>td>read/write</td><td>Zeichenfolge, die diese Zeile für ihr Quellkonto eindeutig identifiziert. In der Regel wird er zum Zeitpunkt des Einfügens des rohen Kontakts festgelegt und danach nie geändert. Die einzige wichtige Ausnahme ist ein neuer unformatierter Kontakt: Er verfügt über einen Kontonamen und -typ (und möglicherweise ein Dataset), aber keine Quell-ID. Dies gibt dem Synchronisierungsadapter an, dass ein neuer Kontakt serverseitig erstellt werden muss und dessen ID im entsprechenden SOURCE_ID Feld auf dem Telefon gespeichert ist. </td></tr><tr><td>int</td td<>td>#VERSION< schreibgeschützt><></td td><>Versionsnummer, die aktualisiert wird, wenn sich diese Zeile oder die zugehörigen Daten ändern. Dieses Feld kann zum optimistischen Sperren eines rohen Kontakts verwendet werden. </td></tr><tr td><>int</td><td td<<>#DIRTY>> read/write</td td td<>>Flag, das angibt, dass #VERSION sich geändert hat, und diese Zeile muss von ihrem eigenen Konto synchronisiert werden. Der Wert wird automatisch auf "1" festgelegt, wenn sich der rohe Kontakt ändert, es sei denn, für den URI ist der ContactsContract#CALLER_IS_SYNCADAPTER Abfrageparameter angegeben. Der Synchronisierungsadapter sollte immer diesen Abfrageparameter bereitstellen, um eine unnötige Synchronisierung zu verhindern: Der Benutzer ändert einige Daten auf dem Server, der Synchronisierungsadapter aktualisiert den Kontakt auf dem Telefon (ohne das CALLER_IS_SYNCADAPTER-Flag), wodurch das DIRTY-Flag festgelegt wird, das eine Synchronisierung auslöst, um die Änderungen auf den Server zu übertragen. </td></tr><tr td>><String</td><td>#SYNC1</td td><>read/write</td td td><>Generische Spalte für die beliebige Verwendung durch Synchronisierungsadapter bereitgestellt. Der Inhaltsanbieter speichert diese Informationen im Auftrag des Synchronisierungsadapters, interpretiert sie jedoch in keiner Weise. </td></tr><tr><td>String</td td><td>#SYNC2</td<>td>read/write</td td td><>Generische Spalte zur Verwendung durch Synchronisierungsadapter. </td></tr><tr><td>String</td td><td>#SYNC3</td<>td>read/write</td td td><>Generische Spalte zur Verwendung durch Synchronisierungsadapter. </td></tr><tr><td>String</td td><td>#SYNC4</td<>td>read/write</td td td><>Generische Spalte zur Verwendung durch Synchronisierungsadapter. </td></tr></table>

Java-Dokumentation für android.provider.ContactsContract.RawContacts.

Teile dieser Seite sind Änderungen, die auf Arbeiten basieren, die vom Android Open Source Project erstellt und freigegeben wurden und gemäß den In der Attribution License beschriebenen Begriffen verwendet werden.

Felder

ContentItemType

Der MIME-Typ der Ergebnisse, wenn eine unformatierte Kontakt-ID an #CONTENT_URIangefügt wird, was ein Unterverzeichnis einer einzelnen Person ergibt.

ContentType

Der MIME-Typ der Ergebnisse ab #CONTENT_URI , wenn kein bestimmter ID-Wert angegeben wird und möglicherweise mehrere unformatierte Kontakte zurückgegeben werden.

Eigenschaften

Class

Gibt die Laufzeitklasse dieses Objectzurück.

(Geerbt von Object)
ContentUri

Der content:// Stil-URI für diese Tabelle, der ein Verzeichnis mit unformatierten Kontaktzeilen anfordert, die den Auswahlkriterien entsprechen.

Handle

Das Handle für die zugrunde liegende Android-instance.

(Geerbt von Object)
JniIdentityHashCode

Konstanten für die rohe Kontakttabelle, die eine Zeile mit Kontaktinformationen für jede Person in jedem synchronisierten Konto enthält.

(Geerbt von Object)
JniPeerMembers

Konstanten für die rohe Kontakttabelle, die eine Zeile mit Kontaktinformationen für jede Person in jedem synchronisierten Konto enthält.

PeerReference

Konstanten für die rohe Kontakttabelle, die eine Zeile mit Kontaktinformationen für jede Person in jedem synchronisierten Konto enthält.

(Geerbt von Object)
ThresholdClass

Diese API unterstützt die Mono für Android-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen.

(Geerbt von Object)
ThresholdType

Diese API unterstützt die Mono für Android-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen.

(Geerbt von Object)

Methoden

Clone()

Erstellt und gibt eine Kopie dieses Objekts zurück.

(Geerbt von Object)
Dispose()

Konstanten für die rohe Kontakttabelle, die eine Zeile mit Kontaktinformationen für jede Person in jedem synchronisierten Konto enthält.

(Geerbt von Object)
Dispose(Boolean)

Konstanten für die rohe Kontakttabelle, die eine Zeile mit Kontaktinformationen für jede Person in jedem synchronisierten Konto enthält.

(Geerbt von Object)
Equals(Object)

Gibt an, ob ein anderes Objekt "gleich" diesem objekt ist.

(Geerbt von Object)
GetContactLookupUri(ContentResolver, Uri)

Erstellen Sie eine android.provider.ContactsContract.Contacts#CONTENT_LOOKUP_URI Formatvorlage Uri für den übergeordneten android.provider.ContactsContract.Contacts Eintrag des angegebenen RawContacts Eintrags.

GetHashCode()

Gibt einen Hashcodewert für das Objekt zurück.

(Geerbt von Object)
GetLocalAccountName(Context)

Der Standardwert, der für #ACCOUNT_NAME unformatierte Kontakte verwendet wird, wenn sie ohne Einen Wert für diese Spalte eingefügt werden.

GetLocalAccountType(Context)

Der Standardwert, der für #ACCOUNT_TYPE unformatierte Kontakte verwendet wird, wenn sie ohne Einen Wert für diese Spalte eingefügt werden.

JavaFinalize()

Wird vom Garbage Collector für ein Objekt aufgerufen, wenn die Garbage Collection feststellt, dass keine Verweise mehr auf das Objekt vorhanden sind.

(Geerbt von Object)
Notify()

Aktiviert einen einzelnen Thread, der auf den Monitor dieses Objekts wartet.

(Geerbt von Object)
NotifyAll()

Aktiviert alle Threads, die auf den Monitor dieses Objekts warten.

(Geerbt von Object)
SetHandle(IntPtr, JniHandleOwnership)

Legt die Handle-Eigenschaft fest.

(Geerbt von Object)
ToArray<T>()

Konstanten für die rohe Kontakttabelle, die eine Zeile mit Kontaktinformationen für jede Person in jedem synchronisierten Konto enthält.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolgendarstellung des Objekts zurück.

(Geerbt von Object)
UnregisterFromRuntime()

Konstanten für die rohe Kontakttabelle, die eine Zeile mit Kontaktinformationen für jede Person in jedem synchronisierten Konto enthält.

(Geerbt von Object)
Wait()

Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert ist, in der Regel durch <>Benachrichtigung</em> oder <em>interrupted</em>.

(Geerbt von Object)
Wait(Int64)

Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert ist, in der Regel durch>< Benachrichtigung</em> oder <em>interrupted</em>, oder bis eine bestimmte Menge an Echtzeit verstrichen ist.

(Geerbt von Object)
Wait(Int64, Int32)

Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert ist, in der Regel durch>< Benachrichtigung</em> oder <em>interrupted</em>, oder bis eine bestimmte Menge an Echtzeit verstrichen ist.

(Geerbt von Object)

Explizite Schnittstellenimplementierungen

IJavaPeerable.Disposed()

Konstanten für die rohe Kontakttabelle, die eine Zeile mit Kontaktinformationen für jede Person in jedem synchronisierten Konto enthält.

(Geerbt von Object)
IJavaPeerable.DisposeUnlessReferenced()

Konstanten für die rohe Kontakttabelle, die eine Zeile mit Kontaktinformationen für jede Person in jedem synchronisierten Konto enthält.

(Geerbt von Object)
IJavaPeerable.Finalized()

Konstanten für die rohe Kontakttabelle, die eine Zeile mit Kontaktinformationen für jede Person in jedem synchronisierten Konto enthält.

(Geerbt von Object)
IJavaPeerable.JniManagedPeerState

Konstanten für die rohe Kontakttabelle, die eine Zeile mit Kontaktinformationen für jede Person in jedem synchronisierten Konto enthält.

(Geerbt von Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Konstanten für die rohe Kontakttabelle, die eine Zeile mit Kontaktinformationen für jede Person in jedem synchronisierten Konto enthält.

(Geerbt von Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Konstanten für die rohe Kontakttabelle, die eine Zeile mit Kontaktinformationen für jede Person in jedem synchronisierten Konto enthält.

(Geerbt von Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Konstanten für die rohe Kontakttabelle, die eine Zeile mit Kontaktinformationen für jede Person in jedem synchronisierten Konto enthält.

(Geerbt von Object)

Erweiterungsmethoden

JavaCast<TResult>(IJavaObject)

Führt eine Typkonvertierung mit Überprüfung der Android-Laufzeit aus.

JavaCast<TResult>(IJavaObject)

Konstanten für die rohe Kontakttabelle, die eine Zeile mit Kontaktinformationen für jede Person in jedem synchronisierten Konto enthält.

GetJniTypeName(IJavaPeerable)

Konstanten für die rohe Kontakttabelle, die eine Zeile mit Kontaktinformationen für jede Person in jedem synchronisierten Konto enthält.

Gilt für: