ContactsContract.Data 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
數據表的常數,其中包含系結至原始聯繫人的數據點。
[Android.Runtime.Register("android/provider/ContactsContract$Data", DoNotGenerateAcw=true)]
public sealed class ContactsContract.Data : Java.Lang.Object
[<Android.Runtime.Register("android/provider/ContactsContract$Data", DoNotGenerateAcw=true)>]
type ContactsContract.Data = class
inherit Object
- 繼承
- 屬性
備註
數據表的常數,其中包含系結至原始聯繫人的數據點。 數據表的每個數據列通常都用來儲存單一連絡資訊(例如電話號碼)及其相關聯的元數據(例如工作或住家號碼)。
<h3>數據類型</h3>
數據是一般數據表,可以保存任何類型的聯繫人數據。 儲存在指定數據列中的數據#MIMETYPE
種類是由數據列的值所指定,這個值會透過 #DATA15
來判斷泛型#DATA1
數據行的意義。 例如,如果數據類型為 ,則數據行#DATA1
會儲存電話號碼,但如果數據類型為 CommonDataKinds.Phone Phone.CONTENT_ITEM_TYPE
CommonDataKinds.Email Email.CONTENT_ITEM_TYPE
,則會#DATA1
儲存電子郵件位址。 同步配接器和應用程式可以引進自己的數據類型。
ContactsContract 會定義少量預先定義的數據類型,例如 CommonDataKinds.Phone
等等 CommonDataKinds.Email
。為了方便起見,這些類別會定義 DATA1 等的數據類型特定別名。例如, CommonDataKinds.Phone Phone.NUMBER
與 ContactsContract.Data Data.DATA1
相同。
#DATA1
是索引數據行,應該用於預期最常用於查詢選取範圍中的數據元素。 例如,在代表電子郵件地址 #DATA1
的數據列應該用於電子郵件位址本身,而 #DATA2
等則可用於輔助資訊,例如電子郵件地址類型。
依照慣例, #DATA15
用於儲存 BLOB(二進位數據)。
指定帳戶類型的同步配接器必須正確處理對應原始聯繫人中使用的每個數據類型。 否則,可能會導致數據遺失或損毀。
同樣地,您應該避免為對方的帳戶類型引進新種類的數據。 例如,如果您將「我的最愛歌曲」的數據列新增至 Google 帳戶所擁有的原始聯繫人,它將不會同步處理到伺服器,因為 Google 同步配接器不知道如何處理這種數據類型。 因此,新的數據類型通常會與新的帳戶類型一起引進,也就是新的同步配接器。
<h3>Batch 作業</h3>
數據列可以使用傳統 ContentResolver#insert
和 ContentResolver#update
ContentResolver#delete
方法插入/更新/刪除,但以 批次 ContentProviderOperation
為基礎的較新機制幾乎在所有情況下都會成為較佳的選擇。 批次中的所有作業都會在單一交易中執行,以確保原始聯繫人的手機端和伺服器端狀態一律一致。 此外,批次型方法更有效率:不僅在單一交易中執行資料庫作業更快,而且將一批命令傳送至內容提供者,可節省您進程與內容提供者執行進程之間內容切換的時間。
使用批次作業的另一面是,大型批次可能會長時間鎖定資料庫,以防止其他應用程式存取數據,並可能導致 ANR (「應用程式未回應」對話框)。
若要避免資料庫的這類鎖定,請務必在批次中插入「產生點」。 產生點會向內容提供者指出,在執行下一個作業之前,它可以認可已進行的變更、向其他要求產生、開啟另一個交易並繼續處理作業。 產生點不會自動認可交易,但前提是有另一個要求等候資料庫。 一般而言,同步配接器應該在批次中每個原始接觸作業順序的開頭插入產生點。 請參閱 ContentProviderOperation.Builder#withYieldAllowed(boolean)
。
<h3>Operations</h3><dl><dt><b>Insert</b></dt><dd>
您可以使用傳統 ContentResolver#insert(Uri, ContentValues)
方法插入個別的數據列。 應該一律以批次方式插入多個數據列。
傳統插入的範例:
ContentValues values = new ContentValues();
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
values.put(Phone.NUMBER, "1-800-GOOG-411");
values.put(Phone.TYPE, Phone.TYPE_CUSTOM);
values.put(Phone.LABEL, "free directory assistance");
Uri dataUri = getContentResolver().insert(Data.CONTENT_URI, values);
使用 ContentProviderOperations 完成的相同作業:
ArrayList<ContentProviderOperation> ops =
new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValue(Data.RAW_CONTACT_ID, rawContactId)
.withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
.withValue(Phone.NUMBER, "1-800-GOOG-411")
.withValue(Phone.TYPE, Phone.TYPE_CUSTOM)
.withValue(Phone.LABEL, "free directory assistance")
.build());
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
</p><dt><b>Update</b></dt><dd>
就像插入一樣,更新可以累加完成或批次,批次模式是慣用的方法:
ArrayList<ContentProviderOperation> ops =
new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI)
.withSelection(Data._ID + "=?", new String[]{String.valueOf(dataId)})
.withValue(Email.DATA, "somebody@android.com")
.build());
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
</p></dd<>dt><b>Delete</b></dt><dd>
就像插入和更新一樣,刪除作業可以使用 方法或使用 ContentProviderOperation 來完成 ContentResolver#delete
:
ArrayList<ContentProviderOperation> ops =
new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newDelete(Data.CONTENT_URI)
.withSelection(Data._ID + "=?", new String[]{String.valueOf(dataId)})
.build());
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
</p></dd<>dt><b>Query</b></dt><dd>
<dl><dt>尋找指定聯繫人</dt><dd 指定類型的所有數據>
Cursor c = getContentResolver().query(Data.CONTENT_URI,
new String[] {Data._ID, Phone.NUMBER, Phone.TYPE, Phone.LABEL},
Data.CONTACT_ID + "=?" + " AND "
+ Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'",
new String[] {String.valueOf(contactId)}, null);
</p>
</dd><dt>尋找指定原始聯繫人</dt<>dd 指定類型的所有數據>
Cursor c = getContentResolver().query(Data.CONTENT_URI,
new String[] {Data._ID, Phone.NUMBER, Phone.TYPE, Phone.LABEL},
Data.RAW_CONTACT_ID + "=?" + " AND "
+ Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'",
new String[] {String.valueOf(rawContactId)}, null);
</dd><dt>尋找指定原始聯繫人<的所有數據/dt><dd> 大部分同步適配卡會想要讀取原始聯繫人的所有數據列,以及原始聯繫人本身。 因此,您應該使用 RawContactsEntity
。 請參閱 RawContacts
。 </dd/dl<>/p<>/dd<>/dl><h2>Columns</h2><>
許多數據行都可以透過 Data#CONTENT_URI
查詢取得。 為了達到最佳效能,您應該明確地將投影指定為只指定您需要的數據行。
<table class=“jd-sumtable”><tr><th colspan='4'Data></th></tr<>tr><td style=“width: 7em;”>long</td td><style=“width: 20em;”>#_ID
</td td><style=“width: 5em;”>唯讀</td td><>數據列標識符。 同步配接器應該嘗試在更新期間保留數據列標識碼。 換句話說,刪除和重新插入數據列是個壞主意。 同步配接器應該一律執行更新。</td/tr tr>><<td><> String</td><td><#MIMETYPE
/td><td>read/write-once</td td><>
此數據列所表示專案的MIME類型。 常見的MIME類型範例包括:<ul><li<>CommonDataKinds.StructuredName StructuredName.CONTENT_ITEM_TYPE
/li<<CommonDataKinds.Phone Phone.CONTENT_ITEM_TYPE
>> li/><>CommonDataKinds.Email Email.CONTENT_ITEM_TYPE
<><>CommonDataKinds.Photo Photo.CONTENT_ITEM_TYPE
<><>CommonDataKinds.Organization Organization.CONTENT_ITEM_TYPE
<><>CommonDataKinds.Im Im.CONTENT_ITEM_TYPE
<><>CommonDataKinds.Nickname Nickname.CONTENT_ITEM_TYPE
<><>CommonDataKinds.Note Note.CONTENT_ITEM_TYPE
<><>CommonDataKinds.StructuredPostal StructuredPostal.CONTENT_ITEM_TYPE
<><>CommonDataKinds.GroupMembership GroupMembership.CONTENT_ITEM_TYPE
<><>CommonDataKinds.Website Website.CONTENT_ITEM_TYPE
<><>CommonDataKinds.Event Event.CONTENT_ITEM_TYPE
<><li><CommonDataKinds.Relation Relation.CONTENT_ITEM_TYPE
/li>CommonDataKinds.SipAddress SipAddress.CONTENT_ITEM_TYPE
><</li></ul>
</td/tr><tr><td>long</td><>><td td<#RAW_CONTACT_ID
> read/write-once</td td<>>此數據所屬數據表中RawContacts
數據列的標識符。<></td></tr tr>><<td>int</td><td><#IS_PRIMARY
/td><td>read/write</td td Td><>是否為它所屬之原始聯繫人的主要專案。 如果為 true,則為 “1”,如果為 false,則為 “0”。 </td></tr tr>><<td>int</td><td><#IS_SUPER_PRIMARY
/td><td>read/write</td td td><>是否為它所屬之匯總聯繫人的主要專案。 任何「超級主要」的數據記錄也必須是「主要」。 例如,超級主要專案可能會解譯為其類型的默認聯繫人值(例如,用於聯繫人的默認電話號碼)。</td></tr tr><<>td>int</td><td><#DATA_VERSION
/td><td>只讀</td td><>此數據記錄的版本。 每當資料列變更版本時, 版本就會上升。 此值會單調增加。</td/tr tr>><<td>>< 任何類型</td td>>#DATA6
>><><#DATA4
#DATA5
><#DATA7
#DATA15
>#DATA8
<#DATA9
><<#DATA12
<>><#DATA14
#DATA1
<#DATA2
>#DATA3
>>>#DATA11
<<><<<<#DATA10
<>#DATA13
br/td td>><read/write</td td td><>
一般數據行。 每個資料列的意義取決於 #MIMETYPE
。 依照慣例, #DATA15
用於儲存 BLOB(二進位數據)。
不應使用其意義未明確定義給指定 MIMETYPE 的數據行。 不保證任何同步配接器都會保留它們。 同步配接器本身不應該使用這類資料行,但應該改用 #SYNC1
-#SYNC4
。
</td/tr tr><><td><> 任何類型</td><td><#SYNC1
br><#SYNC2
br>#SYNC3
>#SYNC4
<</td<>td>read/write</td td><>泛型數據行供同步配接器使用。 例如,相片數據列可能會將影像 URL 儲存在 SYNC1 中、SYNC2 中狀態(未載入、載入、載入、錯誤)、SYNC3 中的伺服器端版本號碼,以及 SYNC4 中的錯誤碼。</td></tr></table>
來自最近相關聯狀態更新的某些數據行也可以透過隱含聯結來取得。
<table class=“jd-sumtable”><tr><th colspan='4'Join> with StatusUpdates
</th></tr><tr><td style=“width: 7em;”>int</td td><style=“width: 20em;”>#PRESENCE
</td td><style=“width: 5em;”>連結到此數據列的唯讀</td td Td><>IM 狀態。 #CONTACT_PRESENCE
與比較 ,其中包含聯繫人在所有IM數據列中的存在。 如需個別狀態定義,請參閱 StatusUpdates
。 提供者可以選擇不要將此值儲存在永續性記憶體中。 預期狀態會定期更新。 </td></tr><tr><td>String</td><td>#STATUS
</td><td>只讀</td td><>連結此數據列的最新狀態更新。</td></tr tr><><td>long</td#STATUS_TIMESTAMP
<<>> 只讀</td><>td td><>當此數據列插入/更新最新狀態時的絕對時間,以毫秒為單位。</td></tr tr><<>td>String</td><td>#STATUS_RES_PACKAGE
</td><td>只讀</td td><>包含此狀態資源的套件:卷標和圖示。</td></tr tr><><td>long</td<>td#STATUS_LABEL
></td><td>只讀</td td><>捲標的資源標識符,描述連結至此數據列的狀態更新來源。 此資源的範圍由 #STATUS_RES_PACKAGE
。</td/tr tr><td>long</td>>#STATUS_ICON
>><<< 只讀</td td><圖標的>資源標識符,連結至此數據列的狀態更新來源。<>>< 此資源的範圍由 #STATUS_RES_PACKAGE
。</td></tr></table>
來自相關聯原始聯繫人的某些數據行也可以透過隱含聯結來取得。 其他數據行會在此內容中排除為不感興趣。
<table class=“jd-sumtable”><tr><th colspan='4'Join> with ContactsContract.RawContacts
</th></tr><tr><td style=“width: 7em;”>long</td td><style=“width: 20em;”>#CONTACT_ID
</td td><style=“width: 5em;”>唯讀</td td><>此數據所屬數據表中Contacts
數據列的標識碼。</td></tr tr>><<td>int</td><td><#AGGREGATION_MODE
/td><td>只讀</td td><>請參閱 。< RawContacts
/td></tr tr>><<td>int</td><td><#DELETED
/td><td>只讀</td td><>請參閱 。< RawContacts
/td></tr></table>
相關匯總聯繫人數據表 ContactsContract.Contacts
的標識符數據行可透過隱含聯結至 RawContacts
數據表取得,請參閱上圖。 您也可以透過隱含聯結,取得此數據表的其餘數據行。 這可藉由單一數據元素的值來協助查閱,例如電子郵件位址。
<table class=“jd-sumtable”><tr><th colspan='4'Join> with ContactsContract.Contacts
</th></tr><tr><td style=“width: 7em;”>String</td td><style=“width: 20em;”>#LOOKUP_KEY
</td td><style=“width: 5em;”>read-only</td td>><See ContactsContract.Contacts
</td></tr>><<tr td>String</td>>>><<<#DISPLAY_NAME
read-only</<>>td td See ContactsContract.Contacts
</><td/tr>>><<td long</<><<>>>#PHOTO_ID
td td td/td td read-only</td><td>See .< ContactsContract.Contacts
/td></tr tr>><<td>int</td><td><#IN_VISIBLE_GROUP
/td><td>只讀</td td><>請參閱 。< ContactsContract.Contacts
/td></tr tr>><<td>int</td><td><#HAS_PHONE_NUMBER
/td><td>只讀</td td><>請參閱 。< ContactsContract.Contacts
/td></tr tr>><<td>int</td><td><#STARRED
/td><td>只讀</td td><>請參閱 。< ContactsContract.Contacts
/td/tr tr>><<td>>< String</td><td><#CUSTOM_RINGTONE
/td><>td 只讀</td td><>請參閱 。< ContactsContract.Contacts
/td></tr tr>><<td>int</td><td><#SEND_TO_VOICEMAIL
/td><td>只讀</td td><>請參閱 。< ContactsContract.Contacts
/td></tr tr>><<td>int</td><td><#CONTACT_PRESENCE
/td><td>只讀</td td><>請參閱 。< ContactsContract.Contacts
/td/tr tr>><<td>>< String</td><td><#CONTACT_STATUS
/td><>td 只讀</td td><>請參閱 。< ContactsContract.Contacts
/td></tr tr><<>td>long</td><td<>#CONTACT_STATUS_TIMESTAMP
/td><>td 只讀</td td><>請參閱 。< ContactsContract.Contacts
/td/tr tr>><<td>>< String</td><td><#CONTACT_STATUS_RES_PACKAGE
/td><>td 只讀</td td><>請參閱 。< ContactsContract.Contacts
/td></tr tr><<>td>long</td><td<>#CONTACT_STATUS_LABEL
/td><>td 只讀</td td><>請參閱 。< ContactsContract.Contacts
/td></tr tr><<>td>long</td><td<>#CONTACT_STATUS_ICON
/td><>td 只讀</td td><>請參閱 。< ContactsContract.Contacts
/td></tr></table>
的 android.provider.ContactsContract.Data
Java 檔。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。
欄位
ContentType |
結果 |
ExtraAddressBookIndex |
數據表的常數,其中包含系結至原始聯繫人的數據點。 |
ExtraAddressBookIndexCounts |
數據表的常數,其中包含系結至原始聯繫人的數據點。 |
ExtraAddressBookIndexTitles |
數據表的常數,其中包含系結至原始聯繫人的數據點。 |
VisibleContactsOnly |
的 |
屬性
Class |
傳回這個 |
ContentUri |
此數據表的 content:// 樣式 URI,會要求符合選取準則的數據列目錄。 |
Handle |
基礎Android實例的句柄。 (繼承來源 Object) |
JniIdentityHashCode |
數據表的常數,其中包含系結至原始聯繫人的數據點。 (繼承來源 Object) |
JniPeerMembers |
數據表的常數,其中包含系結至原始聯繫人的數據點。 |
PeerReference |
數據表的常數,其中包含系結至原始聯繫人的數據點。 (繼承來源 Object) |
ThresholdClass |
此 API 支援適用於 Android 的 Mono 基礎結構,並不適合直接從您的程式代碼使用。 (繼承來源 Object) |
ThresholdType |
此 API 支援適用於 Android 的 Mono 基礎結構,並不適合直接從您的程式代碼使用。 (繼承來源 Object) |
方法
Clone() |
建立並傳回這個 對象的複本。 (繼承來源 Object) |
Dispose() |
數據表的常數,其中包含系結至原始聯繫人的數據點。 (繼承來源 Object) |
Dispose(Boolean) |
數據表的常數,其中包含系結至原始聯繫人的數據點。 (繼承來源 Object) |
Equals(Object) |
指出其他物件是否「等於」這個物件。 (繼承來源 Object) |
GetContactLookupUri(ContentResolver, Uri) |
為指定 |
GetHashCode() |
傳回此物件的雜湊碼值。 (繼承來源 Object) |
JavaFinalize() |
當垃圾收集決定不再參考物件時,垃圾收集行程在 物件上呼叫。 (繼承來源 Object) |
Notify() |
喚醒正在等候此物件監視器的單一線程。 (繼承來源 Object) |
NotifyAll() |
喚醒正在等候此物件監視器的所有線程。 (繼承來源 Object) |
SetHandle(IntPtr, JniHandleOwnership) |
設定 Handle 屬性。 (繼承來源 Object) |
ToArray<T>() |
數據表的常數,其中包含系結至原始聯繫人的數據點。 (繼承來源 Object) |
ToString() |
傳回物件的字串表示。 (繼承來源 Object) |
UnregisterFromRuntime() |
數據表的常數,其中包含系結至原始聯繫人的數據點。 (繼承來源 Object) |
Wait() |
讓目前線程等候直到喚醒為止,通常是藉由em <notified/em>或<em>interrupted</em> 來喚醒它。<> (繼承來源 Object) |
Wait(Int64, Int32) |
讓目前的線程等到喚醒為止,通常是因為 <em>notified</em> 或 <em>interrupted</em>,或直到經過一定數量的實時為止。 (繼承來源 Object) |
Wait(Int64) |
讓目前的線程等到喚醒為止,通常是因為 <em>notified</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) |
數據表的常數,其中包含系結至原始聯繫人的數據點。 |