Kể từ Android 10, dữ liệu liên quan đến mối quan hệ đối với danh bạ, do thành phần Trình cung cấp danh bạ quản lý (nguồn dữ liệu hiển thị trong ứng dụng danh bạ của thiết bị), sẽ được truy cập theo cách khác so với Android 9 trở xuống.
Trước Android 10, các ứng dụng sử dụng Trình cung cấp danh bạ để truy cập và chuyển dữ liệu giữa thiết bị và các dịch vụ trực tuyến. Android 10 có các thay đổi về quyền truy cập dữ liệu để đảm bảo tăng quyền riêng tư của người dùng trên tất cả thiết bị Android 10 sử dụng Nhà cung cấp danh bạ. Một lý do là cơ sở dữ liệu cơ bản không chứa dữ liệu về mối quan hệ đối tượng liên hệ. Do đó, ứng dụng không thể ghi vào hoặc đọc từ bộ nhớ đệm này. Sau đây là một số thay đổi:
- Nhà cung cấp danh bạ không ghi lại dữ liệu liên quan đến mối quan hệ tương đồng giữa các địa chỉ liên hệ, chẳng hạn như số lần người dùng được liên hệ, lần liên hệ gần đây nhất, ứng dụng được sử dụng, người được liên hệ hoặc bất kỳ dữ liệu trong quá khứ nào có liên quan.
- Lớp
MultiAutoCompleteTextView
trong API tự động hoàn thành của Nhà cung cấp danh bạ không sắp xếp kết quả truy vấn theo bộ đếm lượt tương tác. - Khung Android không cung cấp thứ hạng liên hệ ngầm ẩn. (Tuy nhiên, thứ hạng của những người liên hệ mục đích rõ ràng do người dùng kiểm soát (chẳng hạn như những người liên hệ được đánh dấu) vẫn giữ nguyên).
Để triển khai những thay đổi này, hãy làm theo một trong những cách sau:
- Sử dụng Trình cung cấp danh bạ mới nhất.
- Cập nhật phiên bản (nếu bạn đang sử dụng phiên bản phân nhánh).
Ngoài ra, hãy cập nhật mọi ứng dụng dựa vào các tính năng của Trình cung cấp danh bạ không còn được dùng nữa. Không được phép sử dụng các phiên bản API được thiết kế để khắc phục các hàm không dùng nữa.
Đối với Android 9 trở xuống, dữ liệu tương tác với danh bạ từ Nhà cung cấp danh bạ chưa bị xoá. Thay vào đó, dữ liệu tương tác với danh bạ sẽ được xoá định kỳ (khoảng một lần mỗi ngày) để mô phỏng tương đương trong Android 10. Trình cung cấp danh bạ lưu trữ thông tin này nhưng chỉ tạm thời.
Nội dung thay đổi đối với API
Những thay đổi này dự kiến sẽ tác động lớn đến các API. Ví dụ: thứ hạng tự động hoàn thành sẽ không hoạt động tốt. Các tác động tiềm ẩn đối với hành vi của API bao gồm:
- Nhà cung cấp danh bạ sẽ không lưu trữ lựa chọn ưu tiên của người dùng hoặc các lượt tương tác của người dùng với người liên hệ trong các cột của bảng
ContactsContract.Contacts
. - API tự động hoàn thành sẽ không sắp xếp kết quả theo bộ đếm lượt tương tác.
- Các cột
TIMES_CONTACTED
/TIMES_USED
vàLAST_TIME_CONTACTED
/LAST_TIME_USED
sẽ không được cập nhật. - Các giá trị này sẽ bị xoá (thành
null
hoặc được đặt thành 0, tuỳ thuộc vào các cột bị ảnh hưởng) khi nâng cấp lên Android 10. - Việc xếp hạng trong API truy vấn tự động hoàn thành sẽ trả về kết quả được sắp xếp theo thứ tự bảng chữ cái, không bao giờ theo thông tin đối tượng chung sở thích.
- Lệnh gọi API cho người liên hệ thường xuyên (ví dụ: sử dụng chuỗi bộ lọc
CONTENT_FREQUENT_URI
) sẽ không trả về kết quả nào.
Nhìn chung, nếu bất kỳ phần tử API của Trình cung cấp danh bạ nào không còn được dùng nữa sử dụng bộ đếm, thì các bộ đếm đó (khi được dùng trong Android 10) sẽ chứa giá trị 0 và trả về giá trị 0 khi được truy vấn. Yêu cầu cập nhật từ các API bị ảnh hưởng sẽ bị bỏ qua. Ví dụ: lớp ContactsContract.DataUsageFeedback
không được dùng nữa, vì vậy, thao tác cập nhật và xoá các lệnh gọi đến lớp này sẽ bị bỏ qua.
Các trường ảnh hưởng đến API
Các trường này đã thay đổi trong 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
Các trường bị ảnh hưởng trong Android 10 có thể xuất hiện trong nhiều API, như được chỉ ra trong bảng bên dưới. Các trường API không dùng nữa trả về hành vi như được liệt kê. Vì một trong các trường không dùng nữa này có thể được sử dụng trong một số API, hãy xác minh các trường hợp sử dụng của bạn.
Lớp | Trường API | 10 lần trả lại hàng |
---|---|---|
ContactsContract.Contacts ContactsContract.RawContacts ContactsContract.Data ContactsContract.Entity
|
ContactOptionsColumns TIMES_CONTACTED LAST_TIME_CONTACTED
|
Các cột này luôn chứa giá trị 0, bất kể cách sử dụng. Mọi nỗ lực sửa đổi các giá trị này đều sẽ bị bỏ qua. |
Contacts
|
markAsContacted() |
Không có hoạt động nào. |
ContactsContract.DataUsageFeedback
|
|
Không có thao tác nào. |
ContactsContract.Contacts
|
Liên tục (có gắn dấu sao + thường xuyên)CONTENT_STREQUENT_FILTER_URI CONTENT_STREQUENT_URI CONTENT_FREQUENT_URI
|
Chỉ trả về những người liên hệ có gắn dấu sao. Không có người liên hệ thường xuyên nào được trả về. |
ContactsContract.CommonDataKinds.Email ContactsContract.CommonDataKinds.Phone ContactsContract.CommonDataKinds.Callable
|
API lọc (còn gọi là tự động hoàn thành)
|
Kết quả không được sắp xếp theo mức độ tương đồng. Các mục này được sắp xếp theo đã gắn dấu sao và tên. |
Lựa chọn thay thế
Không có giải pháp thay thế nào cho các trường API không dùng nữa. Các giải pháp được thiết kế để lách các quy định hạn chế này, dù ở dạng API mới hay trường mới, đều không được phép.
Triển khai
Bạn không cần làm gì để triển khai những thay đổi này. Các tính năng này là một phần của sáng kiến nhằm tăng cường quyền riêng tư của người dùng trên nền tảng hệ điều hành Android. Tuy nhiên, nếu ứng dụng của bạn phụ thuộc vào các tính năng không dùng nữa, thì bạn nên cập nhật ứng dụng để bù đắp cho mọi thay đổi. Ngoài ra, nếu sử dụng phiên bản phân tách của Nhà cung cấp danh bạ, bạn phải cập nhật Nhà cung cấp danh bạ.
Không tuỳ chỉnh
Không tuỳ chỉnh hoặc xử lý các thay đổi về thông tin đối tượng liên hệ. Các quy tắc này được tích hợp vào khung và việc thay đổi bất kỳ quy tắc nào sẽ khiến bạn không tuân thủ. Đừng bao giờ thay đổi chế độ cài đặt mặc định hoặc cung cấp lựa chọn thay thế cửa hậu.