聯繫人提供商和關聯信息

Android中10開始,觸點親和力相關的數據,由被管理聯繫人提供組分(在設備的聯繫人應用所看到數據的源),則比的Android 9和降低訪問不同。

在 Android 10 之前,應用程序使用聯繫人提供程序來訪問數據並在設備和在線服務之間傳輸數據。 Android 10 對數據可訪問性進行了更改,以確保在所有使用聯繫人提供程序的 Android 10 設備中增加用戶隱私。一方面,底層數據庫不包含聯繫人相似性數據。因此,應用程序無法對其進行寫入或讀取。更改包括以下內容:

  • Contacts Provider 不會記錄與聯繫人相關性相關的數據,例如聯繫用戶的次數、上次聯繫的時間、使用的應用程序、聯繫的人員或任何相關的歷史數據。
  • MultiAutoCompleteTextView聯繫人提供商自動完成API類的互動計數器不查詢結果排序。
  • Android 框架不提供隱式聯繫人排名。 (然而,用戶控制的,明確的接觸排名(如加星號的通訊錄)遺體)。

要實施這些更改,請執行以下操作之一:

  • 使用最新的聯繫人提供程序。
  • 更新您的版本(如果您使用的是分叉版本)。

此外,更新依賴於任何應用棄用聯繫人提供的功能。設計是解決方法不推薦使用的功能API的版本是不允許的。

對於 Android 9 及更低版本,來自聯繫人提供程序的聯繫人交互數據尚未刪除。相反,聯繫人交互數據會定期(大約每天一次)清除以模擬 Android 10 中的等效數據。聯繫人提供程序存儲此信息,但只是臨時存儲。

API 更改

這些變化預計會對 API 產生很大影響。例如,自動完成排名不會表現得很好。對 API 行為的潛在影響包括:

  • 聯繫人提供商不會存儲用戶的喜好,或者,在接觸互動ContactsContract.Contacts表列。
  • 自動完成 API 不會按交互計數器對結果進行排序。
  • TIMES_CONTACTED / TIMES_USEDLAST_TIME_CONTACTED / LAST_TIME_USED列將不會被更新。
    • 這些明確的(要么null或設置為0,這取決於受影響的列)在升級到Android 10。
    • 自動完成查詢 API 中的排名返回按字母順序排序的結果,從不按關聯信息排序。
    • API調用頻繁的接觸(例如,使用過濾字符串CONTENT_FREQUENT_URI )返回任何結果。

通常,如果任何已棄用的 Contacts Provider API 元素使用計數器,則這些計數器(在 Android 10 中使用時)包含 0,並在查詢時返回 0。來自受影響 API 的更新請求將被忽略。例如, ContactsContract.DataUsageFeedback類被棄用,因此,這一類更新和刪除通話將被忽略。

影響 API 的字段

這些字段在 Android 10 中發生了變化:

Android 10 中受影響的字段可能存在於不同的 API 中,如下表所示。已棄用的 API 字段返回列出的行為。由於這些不推薦使用的字段之一可能會在您的多個 API 中使用,因此請驗證您的用例。

班級API 字段10回
ContactsContract.Contacts
ContactsContract.RawContacts
ContactsContract.Data
ContactsContract.Entity
ContactOptionsColumns
TIMES_CONTACTED
LAST_TIME_CONTACTED
這些列始終包含 0,無論它們如何使用。嘗試修改它們將被忽略。
Contacts markAsContacted()沒有操作。
ContactsContract.DataUsageFeedback

update
delete

沒有操作。
ContactsContract.Contacts Strequent(主演+頻繁)
CONTENT_STREQUENT_FILTER_URI
CONTENT_STREQUENT_URI
CONTENT_FREQUENT_URI
只返回收藏的聯繫人。沒有經常聯繫的人回來。
ContactsContract.CommonDataKinds.Email
ContactsContract.CommonDataKinds.Phone
ContactsContract.CommonDataKinds.Callable
過濾器(也稱為自動完成)API

CONTENT_FILTER_URI
ENTERPRISE_CONTENT_FILTER_URI

結果未按親和力排序。這些都是由星號標記名稱排序。

備擇方案

已棄用的 API 字段沒有替代方案。不允許採用旨在規避這些限制的變通方法,無論是以新 API 還是新字段的形式。

執行

您無需執行任何操作即可實現這些更改。它們是在 Android 操作系統平台上增加用戶隱私計劃的一部分。但是,如果您的應用依賴已棄用的功能,您可能需要更新您的應用以補償任何更改。此外,如果您使用分叉版本的 Contacts Provider,則必須更新您的 Contacts Provider。

無定制

不要自定義或解決聯繫人親緣關係信息更改。它們內置於框架中,進行任何更改都會使您失去合規性。切勿更改默認設置或提供後門替代方案。