ContactsContract.RawContacts 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
原始連絡人資料表的常數,其中包含每個同步帳戶中每個人的一列連絡人資訊。
[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 > Aggregation < /h3>
一旦插入原始連絡人,或每當其組成資料變更時,提供者就會檢查原始連絡人是否符合其他現有的原始連絡人,如果是,則會將其與那些連絡人匯總。 匯總會透過欄位的 #CONTACT_ID
變更反映在資料表中 RawContacts
,這是匯總連絡人的參考。
結構化名稱、組織、電話號碼、電子郵件地址或昵稱的變更會觸發重新匯總。
另 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
<> read-only < /td >>><>< Row ID. 同步配接器應該嘗試在更新期間保留資料列識別碼。 換句話說,同步配接器更新原始連絡人,而不是刪除並重新插入,會比較好。 </td/tr ><<> td ><> long < /td <> td td >#CONTACT_ID
< 唯讀 < /td >>><<> 此原始連絡人所屬資料表中 ContactsContract.Contacts
資料列的識別碼。 原始連絡人會透過匯總程式連結到連絡人,可由 #AGGREGATION_MODE
欄位和 AggregationExceptions
來控制。 </td/tr >><< td ><> int < /td td >< td <><#AGGREGATION_MODE
>> 讀取/寫入 < /td td td ><> 允許以程式設計方式控制匯總程式的機制。 允許的值為 #AGGREGATION_MODE_DEFAULT
、 #AGGREGATION_MODE_DISABLED
和 #AGGREGATION_MODE_SUSPENDED
。 另 AggregationExceptions
請參閱 。 </td/tr tr ><>< td ><> int < /td td <> /td td ><#DELETED
><> read/write < /td td > :「deleted >< 」 旗標:預設為 「0」,如果資料列標示為要刪除,則為 「1」。 在未經處理的連絡人上呼叫 時 android.content.ContentResolver#delete
,系統會將其標示為要刪除,並從其匯總連絡人中移除。 同步配接器會刪除伺服器上的原始連絡人,然後再次呼叫 ContactResolver.delete,這次會傳遞 ContactsContract#CALLER_IS_SYNCADAPTER
查詢參數以完成資料移除。 </td/tr >< tr >< td > int < /td td >< /td td >#STARRED
>< read/write < /td >< td td >>< 如果我的最愛連絡人為 '1',則為 '0',否則為 '0'。 >< 變更此欄位會立即影響對應的匯總連絡人:如果該匯總連絡人中的任何原始連絡人已星號,則連絡人本身會標示為星號。 </td/tr > td >><>< String < /td td <<>#CUSTOM_RINGTONE
> /td td ><> read/write < /td >>< 與原始連絡人相關聯的自訂環形。 < 一般而言,這是以意圖啟動之活動所傳回的 android.media.RingtoneManager#ACTION_RINGTONE_PICKER
URI。 若要對匯總連絡人的對應值產生效果,應該在插入原始連絡人時設定此欄位。 若要在連絡人上設定自訂的響鈴,請改用 欄位 ContactsContract.Contacts#CUSTOM_RINGTONE Contacts.CUSTOM_RINGTONE
。 </td/tr >><< td >>< int < /td td >< td/td >>#SEND_TO_VOICEMAIL
<<> read/write < /td ><> 指出是否應該將此原始連絡人的通話直接轉寄至語音信箱 ('1') 或未 ('0') 。 若要對匯總連絡人的對應值產生效果,應該在插入原始連絡人時設定此欄位。 </td/tr ><>< td >>< String < /td td <> /td td >><#ACCOUNT_NAME
<> read/write-once < /td td <>> 此資料列所屬的帳戶實例名稱,當配對時 #ACCOUNT_TYPE
會識別特定帳戶。 例如,如果是 Google 帳戶,這會是 Gmail 位址。 它應該在插入原始連絡人時設定,之後永遠不會變更。 </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_NAME
和 #DATA_SET
的組合 #ACCOUNT_TYPE
會識別與單一同步配接器相關聯的一組資料。
根據預設,這是空的,而且是完全選擇性的。 只有在多個同步配接器輸入相同帳戶類型和帳戶名稱的相異資料時,才需要填入它。
它應該在插入原始連絡人時設定,之後永遠不會變更。
</td/tr > td <><>> String < /td <> td/td td <#SOURCE_ID
>>>< read/write < /td td Td >>< String,可唯一識別此資料列至其來源帳戶。 < 一般而言,它會在插入原始連絡人時設定,之後永遠不會變更。 其中一個值得注意的例外狀況是新的原始連絡人:它會有帳戶名稱和類型 (,而且可能是資料集) ,但沒有來源識別碼。這表示同步介面卡需要建立新的連絡人伺服器端,以及其識別碼儲存在手機上的對應SOURCE_ID欄位中。 </td/tr > td <>>>< int < /td td >< td >#VERSION
< 唯讀 < /td ><> 每當此資料列或其相關資料變更時更新的 td >>< 版本號碼。 < 此欄位可用於原始連絡人的開放式鎖定。 </td/tr ><>< td <>> int < /td td <> td/td <> td >#DIRTY
<> 讀取/寫入 < /td <>> 旗標, #VERSION
指出已變更,且此資料列必須由自己的帳戶同步處理。 除非 URI 已 ContactsContract#CALLER_IS_SYNCADAPTER
指定查詢參數,否則每當原始連絡人變更時,此值會自動設定為 「1」。 同步配接器應該一律提供此查詢參數以防止不必要的同步處理:使用者變更伺服器上的某些資料,同步配接器會更新手機上的連絡人 (,而不需CALLER_IS_SYNCADAPTER旗標) 旗標,這會設定 DIRTY 旗標,這會觸發同步處理以將變更帶入伺服器。 </td/tr tr >><< td >>< String < /td td >< /td <#SYNC1
> td ><> read/write < /td td td ><> 泛型資料行,提供給同步配接器任意使用。 內容提供者會代表同步配接器儲存此資訊,但不會以任何方式解譯。 </td/tr td >>><<<> String < /td >< td/td #SYNC2
>< td <>> read/write < /td td td ><> 泛型資料行,以供同步配接器使用。 </td/tr td >>><<<> String < /td >< td/td #SYNC3
>< td <>> read/write < /td td td ><> 泛型資料行,以供同步配接器使用。 </td/tr td >>><<<> String < /td >< td/td #SYNC4
>< td <>> read/write < /td td td ><> 泛型資料行,以供同步配接器使用。 </td >< /tr >< /table>
的 android.provider.ContactsContract.RawContacts
JAVA 檔。
此頁面的部分是根據所建立和共用的工作進行修改,並根據 2.5 屬性授權中所述的詞彙來使用。
欄位
ContentItemType |
原始連絡人識別碼附加至 |
ContentType |
未提供特定識別碼值時的結果 |
屬性
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) |
GetLocalAccountName(Context) |
插入原始連絡人時所使用的 |
GetLocalAccountType(Context) |
插入原始連絡人時所使用的 |
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) |
讓目前的執行緒等到喚醒為止,通常是 em < notified/em > 或 < em > interrupted < /em > ,或直到經過一定數量的即時為止。 <> (繼承來源 Object) |
Wait(Int64, Int32) |
讓目前的執行緒等到喚醒為止,通常是 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) |
原始連絡人資料表的常數,其中包含每個同步帳戶中每個人的一列連絡人資訊。 |