2013-07-12 67 views
1

我的問題是,我嘗試禁止本機Android通訊錄應用程序從設備中刪除我的應用程序的聯繫人(由我的應用程序帳戶類型指定)。Android本地通訊錄應用程序刪除每個帳戶聯繫人

爲此,我用自己的Service指定了我自己的SyncAdapter,它是syncadapter.xml中描述的元數據。的supportsUploading的值設置爲(這樣,我說,我的應用程序創建的聯繫人只讀)

然而,當我試圖刪除從標準的聯繫人應用程序我的應用程序的接觸我得到的消息它說:

您不能刪除只讀帳戶中的聯繫人,但您可以隱藏 他們在您的聯繫人列表

似乎一切都正常,直到我試圖讓聯繫人的數據,我以前刪除d(「隱藏」)標準「聯繫人」在我自己的應用程序中。

返回的遊標爲空,因爲Data表中沒有與此聯繫人的RAW_CONTACT_ID關聯的表中的任何行。我還檢查設備上是否存在聯繫人,在RawContacts表中尋找 它的DELETED標誌值,並且發現它已被設置爲1,這意味着聯繫人已被刪除。

官方文檔介紹:

一些同步適配器是隻讀的,這意味着它們只同步 服務器端更改到手機上,而不是相反。如果其中一個 原始聯繫人被標記爲刪除,它將保留在手機上。 但它會被有效地隱藏,因爲它不會成爲任何聚合聯繫人的部分 。

所以問題是我不能在我的應用程序中顯示這個聯繫人的數據,因爲我不知道如何從聯繫人數據庫中檢索他們。如果有人知道如何處理這種情況,我將不勝感激任何建議。由於

回答

1

所以更細緻的搜索後,我發現在我的應用檢索任何RAW_CONTACT數據獨立的是它從其他應用程序或不刪除的方式。

使用RawContacts.Entity API完成這項工作。

以前我試着用這樣的邏輯來檢索聯繫人的數據:

public Cursor getContactData(long rawContactId) { 
    return getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, 
      ContactsContract.Data.RAW_CONTACT_ID + "=" + rawContactId, null); 
} 

而且此方法始終返回null爲刪除的聯繫人。

但使用RawContacts.Entity這樣的方式:

public Cursor getContactData(long rawContactId) { 
    Uri rawContactUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, id); 
    rawContactUri = Uri.withAppendedPath(rawContactUri, RawContacts.Entity.CONTENT_DIRECTORY); 

    return getResolver().query(rawContactUri, null, null, null); 
} 

允許獲取內部應用適當的權限,無論是它的3D-第三方應用程序或不刪除的聯繫人數據。

+0

我很驚訝這應該是真的。我很困惑,它與[developer.android.com上的描述]有衝突(https://developer.android.com/reference/android/provider/ContactsContract.RawContacts.Entity.html) – cocoa

相關問題