2011-08-08 117 views
1

在我正在使用的Android應用程序中,我使用AccountManager來存儲用戶的帳戶信息並同步多個來源(我有兩個服務可響應android.content.SyncAdapter意向操作)。如果我不想同步聯繫人,該怎麼辦?

但是,我不同步聯繫人。儘管如此,如果我進入聯繫人應用並選擇添加聯繫人,我會彈出一個問題,詢問我應在哪個帳戶下創建聯繫人。我的應用程序創建的帳戶也列在那裏。我試過把android:supportsUploading="false"放在我的<sync-adapter>上,不起作用。

我目前看到的唯一解決方案是創建一個空的隱形聯繫人同步服務,它具有android:supportsUploading="false",但這似乎是迄今爲止最大,最無用的黑客攻擊。

幫助?

回答

2

在我看來,您必須同時指定android:supportsUploading="false"並且您的內容權限必須爲android:contentAuthority="com.android.contacts"(ContactsContract.AUTHORITY)。

com.android.contacts.model.Sources.queryAccounts(),它填補了.readOnly標誌,並com.android.contacts.model.Sources.getAccounts(),用於通過com.android.contacts.util.AccountSelectionUtil.getSelectAccountDialog()填充接觸對話。

我不清楚這是否有額外的(可能不希望的)副作用 - 特別是因爲你指定的contentAuthority在概念上與你想要的相反。

-Tim

+1

是的,這就是我最終做的。對於Android團隊來說,假設提供帳戶的任何應用程序也會同步聯繫人似乎是一個巨大的漏洞。 – Felix

0

,如果你不想同步通訊錄您syncadapter的XML文件的權限更改爲您的應用程序供應商聯繫的權威。如果您沒有爲您的應用維護聯繫人提供商。只需製作一個虛擬提供商並將其權限授予您的同步適配器的xml文件。在您的syncadapter的xml文件中授予com.android.contacts的權限將導致您提到的這種行爲:

「但是,我不同步聯繫人,儘管如此,如果我在聯繫人應用程序中選擇添加聯繫人,得到一個彈出窗口,詢問我應該在哪個帳戶下創建聯繫人,我的應用創建的帳戶也列在那裏,我試過把android:supportsUploading="false"放在我的帳戶上,不起作用。

這樣做會解決這個問題

相關問題