Share via


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 > 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, &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<> 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

原始連絡人識別碼附加至 #CONTENT_URI 時的結果 MIME 類型,會產生單一人員的子目錄。

ContentType

未提供特定識別碼值時的結果 #CONTENT_URI MIME 類型,而且可能會傳回多個原始連絡人。

屬性

Class

傳回這個 Object 的執行時間類別。

(繼承來源 Object)
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)

建置 android.provider.ContactsContract.Contacts#CONTENT_LOOKUP_URI 指定 RawContacts 專案之父 android.provider.ContactsContract.Contacts 專案的樣式 Uri

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

讓目前的執行緒等到喚醒為止,通常是 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)

原始連絡人資料表的常數,其中包含每個同步帳戶中每個人的一列連絡人資訊。

適用於