聯絡人供應程式和關聯資訊

自 Android 10 起,聯絡人供應商元件 (裝置聯絡人應用程式中顯示的資料來源) 管理的聯絡人相依性資料,與 Android 9 以下版本中存取的方式不同。

在 Android 10 之前,應用程式會使用聯絡人提供者來存取資料,並在裝置和線上服務之間傳輸資料。Android 10 針對資料無障礙設計做出異動,以確保在使用聯絡人提供者的所有 Android 10 裝置上,進一步保護使用者隱私。首先,基礎資料庫不含聯絡人親和性資料。因此應用程式無法寫入或讀取該資料夾。變更內容包括:

  • 聯絡人供應器不會記錄聯絡人親和性相關資料,例如使用者聯絡次數、上次聯絡時間、使用的應用程式、聯絡對象,或任何相關的歷來資料。
  • Contacts Provider 自動完成 API 中的 MultiAutoCompleteTextView 類別不會依互動計數器排序查詢結果。
  • Android 架構不會提供隱含的聯絡人排名。(不過,使用者控管的「明確」聯絡人排名 (例如「已加星號」聯絡人) 仍會保留)。

如要實施這些變更,請採取下列任一做法:

  • 使用最新的聯絡人提供者。
  • 更新版本 (如果您使用分支版本)。

此外,請更新所有需要已淘汰聯絡人提供者功能的應用程式。不允許 API 版本用於解決已淘汰函式的問題。

如果是 Android 9 以下版本,則未移除聯絡人提供者的聯絡人互動資料。相反地,系統會定期 (約為每天一次) 清除聯絡互動資料,模擬 Android 10 中的等效機制。聯絡人提供者會儲存這些資訊,但只會暫時儲存。

API 變更

這些異動預計會對 API 造成重大影響。舉例來說,自動完成功能的排名就會受到影響。對 API 行為的潛在影響包括:

  • 聯絡資訊提供者不會在 ContactsContract.Contacts 資料表欄中儲存使用者對聯絡人的偏好設定或互動情形。
  • 自動完成 API 不會按互動計數器排序結果。
  • TIMES_CONTACTED / TIMES_USEDLAST_TIME_CONTACTED / LAST_TIME_USED 欄不會更新。
    • 在升級至 Android 10 後,這些常數會清除 (設為 null 或設為 0,視受影響的資料欄而定)。
    • 自動完成查詢 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 依序 (starred + 常用)
CONTENT_STREQUENT_FILTER_URI
CONTENT_STREQUENT_URI
CONTENT_FREQUENT_URI
僅傳回已加星號的聯絡人。未傳回常用聯絡人。
ContactsContract.CommonDataKinds.Email
ContactsContract.CommonDataKinds.Phone
ContactsContract.CommonDataKinds.Callable
篩選器 (亦稱為 Autocomplete) API

CONTENT_FILTER_URI
ENTERPRISE_CONTENT_FILTER_URI

結果並未依關聯性排序。這些項目會依「已加星號」和「名稱」排序。

替代選項

已淘汰的 API 欄位沒有替代方案。無論是使用新 API 或新欄位形式,我們都不允許規避這些限制的解決方法。

實作

您不需要採取任何行動來導入這些變更。這項計畫是這項計畫的一環,可加強 Android 作業系統平台的使用者隱私。但是,如果您的應用程式仰賴已淘汰的功能,建議您更新應用程式,藉此彌補任何變更。此外,如果您使用分支版本的聯絡資訊提供者,則必須更新聯絡資訊提供者。

不提供自訂

請勿自訂或規避聯絡人親密關係資訊的變更。這些值已內建於架構中,如果您進行任何變更,就會違反規定。請勿更改預設設定或提供後門程式替代方式。