ContactsContract.RawContacts Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Costanti per la tabella contatti non elaborata, che contiene una riga di informazioni di contatto per ogni persona in ogni account sincronizzato.
[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
- Ereditarietà
- Attributi
Commenti
Costanti per la tabella contatti non elaborata, che contiene una riga di informazioni di contatto per ogni persona in ogni account sincronizzato. Gli adattatori di sincronizzazione e le app di gestione dei contatti sono i principali consumer di questa API.
<h3>Aggregation</h3>
Non appena viene inserito un contatto non elaborato o ogni volta che vengono modificati i dati costitutivi, il provider verificherà se il contatto non elaborato corrisponde ad altri contatti non elaborati esistenti e, in tal caso, lo aggregherà a tali contatti. L'aggregazione viene riflessa nella RawContacts tabella dalla modifica del #CONTACT_ID campo, ovvero il riferimento al contatto aggregato.
Le modifiche apportate al nome strutturato, all'organizzazione, al numero di telefono, all'indirizzo di posta elettronica o al nome alternativo attivano una ri-aggregazione.
Vedere anche AggregationExceptions per un meccanismo per controllare l'aggregazione a livello di codice.
<h3 Operations>/h3<><dl><dt><b>Insert</b></dt dt><dd>
I contatti non elaborati possono essere inseriti in modo incrementale o in un batch. Il metodo incrementale è più tradizionale ma meno efficiente. Deve essere usato solo se non Data sono disponibili valori al momento della creazione del contatto non elaborato:
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>
Una volta Data resi disponibili i valori, inserirli. Ad esempio, ecco come inserire un nome:
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>
Il metodo batch è di gran lunga preferibile. Inserisce il contatto non elaborato e le righe di dati costitutive in una singola transazione di database e determina al massimo un passaggio di aggregazione.
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>
Si noti l'uso di ContentProviderOperation.Builder#withValueBackReference(String, int) per fare riferimento al valore di indice sconosciuto del contatto non elaborato inserito nella prima operazione.
<dt><b>Update</b></dt dd><>
I contatti non elaborati possono essere aggiornati in modo incrementale o in un batch. La modalità batch deve essere usata quando possibile. Le procedure e le considerazioni sono analoghe a quelle descritte in precedenza per gli inserimenti.
</dd><dt><b>Delete</b></dt dd><>
Quando viene eliminato un contatto non elaborato, tutte le relative righe di dati e StatusUpdates, AggregationExceptions, PhoneLookup righe vengono eliminate automaticamente. Quando tutti i contatti non elaborati associati a una Contacts riga vengono eliminati, anche la Contacts riga stessa viene eliminata automaticamente.
La chiamata di resolver.delete(...), non elimina immediatamente una riga dei contatti non elaborati. Imposta invece il #DELETED flag sul contatto non elaborato e rimuove il contatto non elaborato dal contatto aggregato. L'adattatore di sincronizzazione elimina quindi il contatto non elaborato dal server e finalizza l'eliminazione lato telefono chiamando resolver.delete(...) di nuovo e passando il parametro di ContactsContract#CALLER_IS_SYNCADAPTER query.
Alcuni adattatori di sincronizzazione sono di sola lettura, ovvero sincronizzano solo le modifiche sul lato server al telefono, ma non il contrario. Se uno di questi contatti non elaborati è contrassegnato per l'eliminazione, rimarrà sul telefono. Tuttavia, sarà effettivamente invisibile, perché non farà parte di alcun contatto aggregato. </Dd>
<dt><b>Query</b></dt dd><>
È facile trovare tutti i contatti non elaborati in un contatto:
Cursor c = getContentResolver().query(RawContacts.CONTENT_URI,
new String[]{RawContacts._ID},
RawContacts.CONTACT_ID + "=?",
new String[]{String.valueOf(contactId)}, null);
</p>
Per trovare contatti non elaborati all'interno di un account specifico, è possibile inserire il nome dell'account e digitare la selezione o passarli come parametri di query. Quest'ultimo approccio è preferibile, soprattutto quando è possibile riutilizzare l'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>
Il modo migliore per leggere un contatto non elaborato insieme a tutti i dati associati consiste nell'usare la Entity directory . Se il contatto non elaborato contiene righe di dati, il cursore Entity conterrà una riga per ogni riga di dati. Se il contatto non elaborato non contiene righe di dati, il cursore conterrà comunque una riga con le informazioni non elaborate a livello di contatto.
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><>read-only</td td><>Id riga. Gli adattatori di sincronizzazione devono provare a mantenere gli ID riga durante gli aggiornamenti. In altre parole, è molto meglio che un adattatore di sincronizzazione aggiorni un contatto non elaborato anziché eliminarlo e reinserirlo.</td></tr tr><><td>long</td td><>#CONTACT_ID< td td><>read-only</td><>L'ID della riga nella ContactsContract.Contacts tabella a cui appartiene il contatto non elaborato. I contatti non elaborati sono collegati ai contatti dal processo di aggregazione, che può essere controllato dal #AGGREGATION_MODE campo e AggregationExceptions.</td></tr tr><><td>int</td td><td>#AGGREGATION_MODE<><> read/write</td td><>Un meccanismo che consente il controllo programmatico del processo di aggregazione. I valori consentiti sono #AGGREGATION_MODE_DEFAULTe #AGGREGATION_MODE_DISABLED#AGGREGATION_MODE_SUSPENDED . Vedere anche AggregationExceptions.</td></tr tr><><td>int</td td><>#DELETED< td><>read/write</td td><>Il flag "eliminato" per impostazione predefinita, "1" se la riga è stata contrassegnata per l'eliminazione. Quando android.content.ContentResolver#delete viene chiamato su un contatto non elaborato, viene contrassegnato per l'eliminazione e rimosso dal contatto aggregato. L'adattatore di sincronizzazione elimina il contatto non elaborato nel server e quindi chiama ContactResolver.delete ancora una volta, questa volta passando il ContactsContract#CALLER_IS_SYNCADAPTER parametro di query per finalizzare la rimozione dei dati.</td></tr tr><><td>int</td td><>#STARRED< td><>read/write</td td td><>Un indicatore per i contatti preferiti: '1' se preferito, '0' in caso contrario. La modifica di questo campo influisce immediatamente sul contatto aggregato corrispondente: se vengono visualizzati i contatti non elaborati in tale contatto aggregato, il contatto stesso viene contrassegnato come visualizzato.</td></tr tr><><td>String</td td><td>#CUSTOM_RINGTONE<>< read>/write</td td td><>Una suoneria personalizzata associata a un contatto non elaborato. In genere si tratta dell'URI restituito da un'attività avviata con la android.media.RingtoneManager#ACTION_RINGTONE_PICKER finalità . Per avere un effetto sul valore corrispondente del contatto aggregato, questo campo deve essere impostato al momento dell'inserimento del contatto non elaborato. Per impostare una suoneria personalizzata su un contatto, usare invece il campo ContactsContract.Contacts#CUSTOM_RINGTONE Contacts.CUSTOM_RINGTONE .</td></tr tr><><td>int</td td><>#SEND_TO_VOICEMAIL< td><>read/write</td td td><>Indica se le chiamate da questo contatto non elaborato devono essere inoltrate direttamente alla segreteria telefonica ('1') o meno ('0'). Per avere un effetto sul valore corrispondente del contatto aggregato, questo campo deve essere impostato al momento dell'inserimento del contatto non elaborato.</td></tr tr><><td>String</td td><>#ACCOUNT_NAME< td td><>read/write-once</td td td><>Nome dell'istanza dell'account a cui appartiene questa riga, che se abbinata a #ACCOUNT_TYPE identifica un account specifico. Ad esempio, questo sarà l'indirizzo Gmail se si tratta di un account Google. Deve essere impostato al momento dell'inserimento del contatto non elaborato e non viene mai modificato in seguito.</td></tr tr><><td>String</td td><td>#ACCOUNT_TYPE< td><>read/write-once</td td><>
Tipo di account a cui appartiene questa riga, che se abbinato a #ACCOUNT_NAME identifica un account specifico. Deve essere impostato al momento dell'inserimento del contatto non elaborato e non viene mai modificato in seguito.
Per garantire l'univocità, è necessario scegliere nuovi tipi di account in base alla convenzione di denominazione dei pacchetti Java. Pertanto, un account Google è di tipo "com.google".
</td></tr tr><><td>String</td td><td>#DATA_SET< td><>read/write-once</td td><>
Set di dati all'interno dell'account a cui appartiene questa riga. Ciò consente a più adattatori di sincronizzazione per lo stesso tipo di account di distinguere tra i dati degli altri. La combinazione di #ACCOUNT_TYPE, #ACCOUNT_NAMEe #DATA_SET identifica un set di dati associato a una singola scheda di sincronizzazione.
Questa opzione è vuota per impostazione predefinita ed è completamente facoltativa. Deve essere popolata solo se più adattatori di sincronizzazione immettono dati distinti per lo stesso tipo di account e nome account.
Deve essere impostato al momento dell'inserimento del contatto non elaborato e non viene mai modificato in seguito.
</td></tr tr><><td>String</td td><td>#SOURCE_ID<><> read/write</td td><>String che identifica in modo univoco questa riga nel relativo account di origine. In genere viene impostato al momento dell'inserimento del contatto non elaborato e non viene mai modificato in seguito. L'unica eccezione rilevante è un nuovo contatto non elaborato: avrà un nome e un tipo di account (e possibilmente un set di dati), ma nessun ID di origine. Indica all'adattatore di sincronizzazione che deve essere creato un nuovo contatto sul lato server e il relativo ID memorizzato nel campo SOURCE_ID corrispondente sul telefono.
</td></tr tr><><td>int</td td><>#VERSION< td td><>read-only</td td><>Numero di versione aggiornato ogni volta che questa riga o i relativi dati cambiano. Questo campo può essere utilizzato per il blocco ottimistico di un contatto non elaborato.
</td></tr tr><><td>int</td td><td>#DIRTY<><> read/write</td td><>Flag che indica che #VERSION è stata modificata e questa riga deve essere sincronizzata dal proprio account. Il valore viene impostato su "1" automaticamente ogni volta che il contatto non elaborato viene modificato, a meno che l'URI non abbia specificato il ContactsContract#CALLER_IS_SYNCADAPTER parametro di query. L'adattatore di sincronizzazione deve sempre fornire questo parametro di query per impedire la sincronizzazione non necessaria: l'utente modifica alcuni dati nel server, l'adattatore di sincronizzazione aggiorna il contatto sul telefono (senza il flag CALLER_IS_SYNCADAPTER), che imposta il flag DIRTY, che attiva una sincronizzazione per portare le modifiche al server.
</td></tr tr><><td>String</td td><td>#SYNC1<><> read/write</td td><>Generic column fornito per l'uso arbitrario da parte degli adattatori di sincronizzazione. Il provider di contenuti archivia queste informazioni per conto dell'adattatore di sincronizzazione, ma non la interpreta in alcun modo.
</td></tr tr><><td>String</td td><td>#SYNC2<><> read/write</td td><>Generic column for use by sync adapters.
</td></tr tr><><td>String</td td><td>#SYNC3<><> read/write</td td><>Generic column for use by sync adapters.
</td></tr tr><><td>String</td td><td>#SYNC4<><> read/write</td td><>Generic column for use by sync adapters.
</td></tr></table>
per android.provider.ContactsContract.RawContacts.
Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dalla e usati in base ai termini descritti in Creative License 2.5 Attribution License.
Campi
| Nome | Descrizione |
|---|---|
| ContentItemType |
Tipo MIME dei risultati quando viene aggiunto un ID contatto non elaborato a |
| ContentType |
Tipo MIME dei risultati da |
Proprietà
| Nome | Descrizione |
|---|---|
| Class |
Restituisce la classe di runtime di questo |
| ContentUri |
URI di stile content:// per questa tabella, che richiede una directory di righe di contatto non elaborate corrispondenti ai criteri di selezione. |
| Handle |
Handle per l'istanza di Android sottostante. (Ereditato da Object) |
| JniIdentityHashCode |
Ottiene il codice hash di identità assegnato a questo Java peer dal runtime di interoperabilità. (Ereditato da Object) |
| JniManagedPeerState |
Costanti per la tabella contatti non elaborata, che contiene una riga di informazioni di contatto per ogni persona in ogni account sincronizzato. (Ereditato da JavaObject) |
| JniPeerMembers |
Costanti per la tabella contatti non elaborata, che contiene una riga di informazioni di contatto per ogni persona in ogni account sincronizzato. |
| PeerReference |
Ottiene il riferimento all'oggetto JNI per questo peer Java. (Ereditato da Object) |
| ThresholdClass |
Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice. (Ereditato da Object) |
| ThresholdType |
Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice. (Ereditato da Object) |
Metodi
| Nome | Descrizione |
|---|---|
| Clone() |
Crea e restituisce una copia di questo oggetto. (Ereditato da Object) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
Costanti per la tabella contatti non elaborata, che contiene una riga di informazioni di contatto per ogni persona in ogni account sincronizzato. (Ereditato da JavaObject) |
| Dispose() |
Rilascia le risorse contenute in questo peer Java. (Ereditato da Object) |
| Dispose(Boolean) |
Rilascia le risorse contenute in questo peer Java. (Ereditato da Object) |
| DisposeUnlessReferenced() |
Costanti per la tabella contatti non elaborata, che contiene una riga di informazioni di contatto per ogni persona in ogni account sincronizzato. (Ereditato da JavaObject) |
| Equals(Object) |
Costanti per la tabella contatti non elaborata, che contiene una riga di informazioni di contatto per ogni persona in ogni account sincronizzato. (Ereditato da JavaObject) |
| Equals(Object) |
Indica se un altro oggetto è "uguale a" questo. (Ereditato da Object) |
| GetContactLookupUri(ContentResolver, Uri) |
Creare uno |
| GetHashCode() |
Restituisce un valore di codice hash per l'oggetto . (Ereditato da Object) |
| GetLocalAccountName(Context) |
Valore predefinito utilizzato per |
| GetLocalAccountType(Context) |
Valore predefinito utilizzato per |
| JavaFinalize() |
Chiamato dal Garbage Collector su un oggetto quando Garbage Collection determina che non sono presenti altri riferimenti all'oggetto . (Ereditato da Object) |
| Notify() |
Riattiva un singolo thread in attesa del monitor dell'oggetto. (Ereditato da Object) |
| NotifyAll() |
Riattiva tutti i thread in attesa del monitor dell'oggetto. (Ereditato da Object) |
| SetHandle(IntPtr, JniHandleOwnership) |
Imposta la proprietà Handle. (Ereditato da Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
Costanti per la tabella contatti non elaborata, che contiene una riga di informazioni di contatto per ogni persona in ogni account sincronizzato. (Ereditato da JavaObject) |
| ToArray<T>() |
Crea una matrice gestita da questo wrapper di matrice Java. (Ereditato da Object) |
| ToString() |
Restituisce una rappresentazione di stringa dell'oggetto . (Ereditato da Object) |
| UnregisterFromRuntime() |
Annulla la registrazione di questo Java peer dal runtime di interoperabilità. (Ereditato da Object) |
| Wait() |
Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo <>una notifica</em> o <em>interrotto</em>. (Ereditato da Object) |
| Wait(Int64, Int32) |
Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo<> una notifica</em> o <em>interrotto</em> o fino a quando non è trascorsa una determinata quantità di tempo reale. (Ereditato da Object) |
| Wait(Int64) |
Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo<> una notifica</em> o <em>interrotto</em> o fino a quando non è trascorsa una determinata quantità di tempo reale. (Ereditato da Object) |
Implementazioni dell'interfaccia esplicita
| Nome | Descrizione |
|---|---|
| IJavaPeerable.Disposed() |
Costanti per la tabella contatti non elaborata, che contiene una riga di informazioni di contatto per ogni persona in ogni account sincronizzato. (Ereditato da JavaObject) |
| IJavaPeerable.Finalized() |
Costanti per la tabella contatti non elaborata, che contiene una riga di informazioni di contatto per ogni persona in ogni account sincronizzato. (Ereditato da JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
Costanti per la tabella contatti non elaborata, che contiene una riga di informazioni di contatto per ogni persona in ogni account sincronizzato. (Ereditato da JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
Costanti per la tabella contatti non elaborata, che contiene una riga di informazioni di contatto per ogni persona in ogni account sincronizzato. (Ereditato da JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Costanti per la tabella contatti non elaborata, che contiene una riga di informazioni di contatto per ogni persona in ogni account sincronizzato. (Ereditato da JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
Costanti per la tabella contatti non elaborata, che contiene una riga di informazioni di contatto per ogni persona in ogni account sincronizzato. (Ereditato da JavaObject) |
Metodi di estensione
| Nome | Descrizione |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Ottiene il nome JNI del tipo dell'istanza |
| JavaAs<TResult>(IJavaPeerable) |
Provare a digitare |
| JavaCast<TResult>(IJavaObject) |
Esegue una conversione del tipo di tipo controllato dal runtime Android. |
| JavaCast<TResult>(IJavaObject) |
Costanti per la tabella contatti non elaborata, che contiene una riga di informazioni di contatto per ogni persona in ogni account sincronizzato. |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Provare a digitare |