自 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_USED
和LAST_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 中,這些欄位已遭變更:
ContactsContract.ContactOptionsColumns#TIMES_CONTACTED
ContactsContract.ContractOptionsColumns.LAST_TIME_CONTACTED
ContactsContract.DataUsageStatColumns#TIMES_USED
ContactsContract.DataUsageStatColumns#LAST_TIME_USED
ContactsContract#CONTENT_STREQUENT_FILTER_URI
ContactsContract.Contacts#CONTENT_STREQUENT_URI
ContactsContract.Contacts#CONTENT_FREQUENT_URI
ContactsContract.Contacts#ENTERPRISE_CONTENT_FILTER_URI
ContactsContract.Contacts#CONTENT_FILTER_URI
如下表所示,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
|
|
沒有任何作業。 |
ContactsContract.Contacts
|
依序 (starred + 常用)CONTENT_STREQUENT_FILTER_URI CONTENT_STREQUENT_URI CONTENT_FREQUENT_URI
|
僅傳回已加星號的聯絡人。未傳回常用聯絡人。 |
ContactsContract.CommonDataKinds.Email ContactsContract.CommonDataKinds.Phone ContactsContract.CommonDataKinds.Callable
|
篩選器 (亦稱為 Autocomplete) API
|
結果並未依關聯性排序。這些項目會依「已加星號」和「名稱」排序。 |
替代選項
已淘汰的 API 欄位沒有替代方案。無論是使用新 API 或新欄位形式,我們都不允許規避這些限制的解決方法。
實作
您不需要採取任何行動來導入這些變更。這項計畫是這項計畫的一環,可加強 Android 作業系統平台的使用者隱私。但是,如果您的應用程式仰賴已淘汰的功能,建議您更新應用程式,藉此彌補任何變更。此外,如果您使用分支版本的聯絡資訊提供者,則必須更新聯絡資訊提供者。
不提供自訂
請勿自訂或規避聯絡人親密關係資訊的變更。這些值已內建於架構中,如果您進行任何變更,就會違反規定。請勿更改預設設定或提供後門程式替代方式。