Các thay đổi về quyền riêng tư trong Android 10

Android 10 (API cấp 29) giới thiệu một số tính năng và thay đổi về hành vi để bảo vệ quyền riêng tư của người dùng một cách hiệu quả hơn. Những thay đổi này giúp tăng cường tính minh bạch và quyền kiểm soát của người dùng đối với dữ liệu của họ cũng như các chức năng mà họ cấp cho ứng dụng. Những tính năng này có thể khiến một số hành vi hoặc dữ liệu cụ thể mà ứng dụng của bạn phụ thuộc vào hoạt động khác so với các phiên bản cũ của nền tảng. Nếu ứng dụng của bạn đang tuân thủ các phương pháp hay nhất hiện tại để xử lý dữ liệu người dùng, thì tác động đối với ứng dụng sẽ ở mức tối thiểu.

Trang này liệt kê nội dung tóm tắt của từng thay đổi.

Các thay đổi hàng đầu

Phần này trình bày những thay đổi chính trong Android 10 liên quan đến quyền riêng tư.

Quyền truy cập vào bộ nhớ ngoài được giới hạn trong các tệp và nội dung nghe nhìn của ứng dụng

Theo mặc định, các ứng dụng nhắm đến Android 10 trở lên được cấp quyền truy cập có giới hạn vào bộ nhớ ngoài hoặc bộ nhớ có giới hạn. Những ứng dụng như vậy có thể thấy các loại tệp sau trong một thiết bị lưu trữ ngoài mà không cần yêu cầu bất kỳ quyền nào liên quan đến bộ nhớ của người dùng:

Để tìm hiểu thêm về bộ nhớ có giới hạn, cũng như cách chia sẻ, truy cập và sửa đổi các tệp được lưu trên thiết bị lưu trữ ngoài, hãy xem hướng dẫn về cách quản lý tệp trong bộ nhớ ngoàitruy cập và sửa đổi tệp nội dung nghe nhìn.

Bạn cần có quyền truy cập thông tin vị trí của thiết bị ở chế độ nền

Để hỗ trợ thêm quyền kiểm soát của người dùng đối với quyền truy cập của ứng dụng vào thông tin vị trí, Android 10 giới thiệu quyền ACCESS_BACKGROUND_LOCATION.

Không giống như các quyền ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION, quyền ACCESS_BACKGROUND_LOCATION chỉ ảnh hưởng đến quyền truy cập thông tin vị trí của ứng dụng khi ứng dụng chạy ở chế độ nền. Một ứng dụng được coi là đang truy cập thông tin vị trí ở chế độ nền, trừ phi một trong các điều kiện sau được đáp ứng:

  • Một hoạt động thuộc ứng dụng đang hiển thị.
  • Ứng dụng đang chạy một dịch vụ trên nền trước đã khai báo loại dịch vụ trên nền trướclocation.

    Để khai báo loại dịch vụ trên nền trước cho một dịch vụ trong ứng dụng, hãy đặt targetSdkVersion hoặc compileSdkVersion của ứng dụng thành 29 trở lên. Tìm hiểu thêm về cách các dịch vụ trên nền trước có thể tiếp tục các hành động do người dùng bắt đầu cần có quyền truy cập vào vị trí.

Nếu ứng dụng của bạn tạo và giám sát hàng rào địa lý, đồng thời nhắm đến Android 10 (API cấp 29) trở lên, thì bạn phải khai báo quyền ACCESS_BACKGROUND_LOCATION.

Quyền truy cập được cấp tự động khi nhắm đến Android 9 trở xuống

Nếu ứng dụng của bạn chạy trên Android 10 trở lên nhưng nhắm đến Android 9 (API cấp 28) trở xuống, thì nền tảng sẽ áp dụng hành vi sau:

  • Nếu ứng dụng của bạn khai báo một phần tử <uses-permission> cho ACCESS_FINE_LOCATION hoặc ACCESS_COARSE_LOCATION, hệ thống sẽ tự động thêm một phần tử <uses-permission> cho ACCESS_BACKGROUND_LOCATION trong quá trình cài đặt.
  • Nếu ứng dụng của bạn yêu cầu ACCESS_FINE_LOCATION hoặc ACCESS_COARSE_LOCATION, hệ thống sẽ tự động thêm ACCESS_BACKGROUND_LOCATION vào yêu cầu.

Truy cập khi thiết bị được nâng cấp lên Android 10

Nếu người dùng cấp cho ứng dụng của bạn quyền truy cập vào thông tin vị trí của thiết bị – ACCESS_COARSE_LOCATION hoặc ACCESS_FINE_LOCATION – rồi nâng cấp thiết bị của họ từ Android 9 lên Android 10, thì hệ thống sẽ tự động cập nhật bộ quyền dựa trên vị trí đã cấp cho ứng dụng của bạn. Bộ quyền mà ứng dụng của bạn nhận được sau khi nâng cấp phụ thuộc vào phiên bản SDK mục tiêu và các quyền đã xác định của ứng dụng, như minh hoạ trong bảng sau:

Bảng 1. Các thay đổi về trạng thái quyền truy cập thông tin vị trí sau khi thiết bị nâng cấp lên Android 10

Phiên bản nền tảng đích Đã cấp quyền
vị trí tương đối hoặc vị trí chính xác?
Quyền truy cập ở chế độ nền
được xác định trong tệp kê khai?
Đã cập nhật trạng thái mặc định của quyền
Android 10 Quyền truy cập khi ở nền trước và nền sau
Android 10 Không Chỉ truy cập khi ở nền trước
Android 10 Không (Hệ thống bỏ qua) Không có quyền truy cập
Android 9 trở xuống Hệ thống tự động thêm khi nâng cấp thiết bị Quyền truy cập khi ở nền trước và nền sau
Android 9 trở xuống Không (Hệ thống bỏ qua) Không có quyền truy cập

Xin lưu ý rằng người dùng có thể thay đổi cấp độ truy cập này ngay cả sau khi hệ thống tự động cập nhật quyền truy cập của ứng dụng vào thông tin vị trí của thiết bị. Ví dụ: người dùng có thể giảm quyền truy cập của ứng dụng xuống chỉ còn ở chế độ nền trước hoặc thu hồi hoàn toàn quyền truy cập. Trước khi cố gắng truy cập vào vị trí của thiết bị, đặc biệt là trong một dịch vụ trên nền trước, ứng dụng của bạn nên kiểm tra xem người dùng có còn cho phép ứng dụng của bạn nhận thông tin vị trí này hay không.

Quyền truy cập bị thu hồi khi cập nhật cấp độ API mục tiêu trên thiết bị Android 10

Hãy xem xét trường hợp ứng dụng của bạn đã được cài đặt trên một thiết bị chạy Android 10. Nếu bạn cập nhật ứng dụng để nhắm đến Android 10 trong trường hợp này, thì thiết bị sẽ thu hồi quyền ACCESS_BACKGROUND_LOCATION.

Để biết thêm thông tin về cách truy xuất vị trí của thiết bị trong khi ứng dụng của bạn đang ở chế độ nền, hãy xem hướng dẫn về nhận thông tin cập nhật vị trí định kỳ.

Hạn chế khi bắt đầu hoạt động ở chế độ nền

Kể từ Android 10, hệ thống sẽ áp dụng các hạn chế khi bắt đầu hoạt động ở chế độ nền. Thay đổi về hành vi này giúp giảm thiểu sự gián đoạn cho người dùng và giúp người dùng kiểm soát tốt hơn những gì hiển thị trên màn hình của họ. Miễn là ứng dụng của bạn bắt đầu các hoạt động là kết quả trực tiếp của hoạt động tương tác với người dùng, thì ứng dụng của bạn có thể sẽ không bị ảnh hưởng bởi những hạn chế này.

Để tìm hiểu thêm về giải pháp thay thế được đề xuất cho việc bắt đầu các hoạt động ở chế độ nền, hãy xem hướng dẫn về cách cảnh báo cho người dùng về các sự kiện nhạy cảm về thời gian trong ứng dụng của bạn.

Giá trị nhận dạng và dữ liệu

Phần này liệt kê những thay đổi cụ thể khi làm việc với dữ liệu và giá trị nhận dạng thiết bị.

Xoá mối quan hệ thân thiết với người liên hệ

Kể từ Android 10, nền tảng này không theo dõi thông tin về mối quan hệ thân thiết với danh bạ. Do đó, nếu ứng dụng của bạn tìm kiếm trong danh bạ của người dùng, thì kết quả sẽ không được sắp xếp theo tần suất tương tác.

Hướng dẫn về ContactsProvider có một thông báo mô tả cụ thể các trường và phương thức không dùng nữa trên tất cả các thiết bị bắt đầu từ Android 10.

Gán ngẫu nhiên địa chỉ MAC

Trên các thiết bị chạy Android 10 trở lên, theo mặc định, hệ thống sẽ truyền địa chỉ MAC ngẫu nhiên.

Nếu ứng dụng của bạn xử lý một trường hợp sử dụng cho doanh nghiệp, thì nền tảng này sẽ cung cấp các API cho một số thao tác liên quan đến địa chỉ MAC:

  • Lấy địa chỉ MAC ngẫu nhiên: Các ứng dụng của chủ sở hữu thiết bị và ứng dụng của chủ sở hữu hồ sơ có thể truy xuất địa chỉ MAC ngẫu nhiên được chỉ định cho một mạng cụ thể bằng cách gọi getRandomizedMacAddress().
  • Lấy địa chỉ MAC thực tế ban đầu: Các ứng dụng của chủ sở hữu thiết bị có thể truy xuất địa chỉ MAC phần cứng thực tế của thiết bị bằng cách gọi getWifiMacAddress(). Phương thức này hữu ích cho việc theo dõi nhóm thiết bị.

Hạn chế quyền truy cập vào hệ thống tệp /proc/net

Trên các thiết bị chạy Android 10 trở lên, các ứng dụng không thể truy cập vào /proc/net, bao gồm cả thông tin về trạng thái mạng của thiết bị. Các ứng dụng cần truy cập vào thông tin này (chẳng hạn như VPN) nên sử dụng lớp NetworkStatsManager hoặc ConnectivityManager.

Hạn chế đối với giá trị nhận dạng thiết bị không đặt lại được

Kể từ Android 10, các ứng dụng phải có quyền đặc biệt READ_PRIVILEGED_PHONE_STATE để truy cập vào giá trị nhận dạng không thể đặt lại của thiết bị, bao gồm cả IMEI và số sê-ri.

Các phương thức bị ảnh hưởng bao gồm:

Nếu ứng dụng của bạn không có quyền này và bạn vẫn cố gắng yêu cầu thông tin về mã nhận dạng không đặt lại được, thì phản hồi của nền tảng sẽ khác nhau tuỳ thuộc vào phiên bản SDK mục tiêu:

  • Nếu ứng dụng của bạn nhắm đến Android 10 trở lên, lỗi SecurityException sẽ xảy ra.
  • Nếu ứng dụng của bạn nhắm đến Android 9 (API cấp 28) trở xuống, phương thức này sẽ trả về null hoặc dữ liệu giữ chỗ nếu ứng dụng có quyền READ_PHONE_STATE. Nếu không, sẽ xảy ra SecurityException.

Nhiều trường hợp sử dụng không cần giá trị nhận dạng thiết bị không đặt lại được. Ví dụ: nếu ứng dụng của bạn sử dụng mã nhận dạng thiết bị không đặt lại được cho mục đích theo dõi quảng cáo hoặc phân tích người dùng, hãy sử dụng Mã nhận dạng cho quảng cáo trên Android cho những trường hợp sử dụng cụ thể đó. Để tìm hiểu thêm, hãy xem các phương pháp hay nhất cho giá trị nhận dạng duy nhất.

Hạn chế quyền truy cập vào dữ liệu trên bảng nhớ tạm

Trừ phi ứng dụng của bạn là trình chỉnh sửa phương thức nhập (IME) mặc định hoặc là ứng dụng hiện đang được lấy tiêu điểm, nếu không, ứng dụng của bạn sẽ không thể truy cập vào dữ liệu trên bảng nhớ tạm trên Android 10 trở lên.

Bảo vệ số sê-ri của thiết bị USB

Nếu ứng dụng của bạn nhắm đến Android 10 trở lên, thì ứng dụng đó không thể đọc số sê-ri cho đến khi người dùng cấp cho ứng dụng của bạn quyền truy cập vào thiết bị hoặc phụ kiện USB.

Để tìm hiểu thêm về cách làm việc với các thiết bị USB, hãy xem hướng dẫn về cách định cấu hình máy chủ USB.

Camera và khả năng kết nối

Phần này liệt kê những thay đổi cụ thể đối với siêu dữ liệu của camera và các API kết nối.

Hạn chế quyền truy cập vào thông tin chi tiết và siêu dữ liệu của camera

Android 10 thay đổi phạm vi thông tin mà phương thức getCameraCharacteristics() trả về theo mặc định. Cụ thể, ứng dụng của bạn phải có quyền CAMERA để truy cập vào siêu dữ liệu có thể dành riêng cho thiết bị có trong giá trị trả về của phương thức này.

Để tìm hiểu thêm về những thay đổi này, hãy xem phần về các trường camera yêu cầu có quyền.

Hạn chế bật và tắt Wi-Fi

Các ứng dụng nhắm đến Android 10 trở lên không thể bật hoặc tắt Wi-Fi. Phương thức WifiManager.setWifiEnabled() luôn trả về false.

Nếu bạn cần nhắc người dùng bật và tắt Wi-Fi, hãy sử dụng bảng điều khiển cài đặt.

Quy định hạn chế đối với quyền truy cập trực tiếp vào các mạng Wi-Fi đã định cấu hình

Để bảo vệ quyền riêng tư của người dùng, việc định cấu hình danh sách mạng Wi-Fi theo cách thủ công chỉ được phép thực hiện đối với các ứng dụng hệ thống và bộ kiểm soát chính sách thiết bị (DPC). Một DPC nhất định có thể là chủ sở hữu thiết bị hoặc chủ sở hữu hồ sơ.

Nếu ứng dụng của bạn nhắm đến Android 10 trở lên và không phải là ứng dụng hệ thống hoặc DPC, thì các phương thức sau sẽ không trả về dữ liệu hữu ích:

Nếu ứng dụng của bạn cần kết nối với mạng Wi-Fi, hãy sử dụng các phương thức thay thế sau:

  • Để kích hoạt kết nối cục bộ tức thì với mạng Wi-Fi, hãy dùng WifiNetworkSpecifier trong một đối tượng NetworkRequest tiêu chuẩn.
  • Để thêm các mạng Wi-Fi cần cân nhắc để cung cấp quyền truy cập Internet cho người dùng, hãy làm việc với các đối tượng WifiNetworkSuggestion. Bạn có thể thêm và xoá các mạng xuất hiện trong hộp thoại chọn mạng kết nối tự động bằng cách gọi addNetworkSuggestions()removeNetworkSuggestions(), tương ứng. Các phương thức này không yêu cầu bất kỳ quyền truy cập thông tin vị trí nào.

Một số API điện thoại, Bluetooth và Wi-Fi yêu cầu quyền truy cập thông tin vị trí CHÍNH XÁC

Nếu nhắm đến Android 10 trở lên, ứng dụng của bạn phải có quyền ACCESS_FINE_LOCATION để dùng một số phương thức trong API Wi-Fi, Wi-Fi Aware hoặc Bluetooth. Các phần sau đây liệt kê các lớp và phương thức bị ảnh hưởng.

Điện thoại

Wi-Fi

Bluetooth

Quyền

Phần này mô tả các nội dung cập nhật đối với mô hình quyền của Android.

Hạn chế quyền truy cập vào nội dung trên màn hình

Để bảo vệ nội dung trên màn hình của người dùng, Android 10 ngăn chặn việc truy cập âm thầm vào nội dung trên màn hình của thiết bị bằng cách thay đổi phạm vi của các quyền READ_FRAME_BUFFER, CAPTURE_VIDEO_OUTPUTCAPTURE_SECURE_VIDEO_OUTPUT. Kể từ Android 10, các quyền này chỉ có quyền truy cập bằng chữ ký.

Những ứng dụng cần truy cập vào nội dung trên màn hình của thiết bị nên sử dụng API MediaProjection. API này sẽ hiển thị một lời nhắc yêu cầu người dùng đồng ý.

Kiểm tra quyền đối với người dùng trên các ứng dụng cũ

Nếu ứng dụng của bạn nhắm đến Android 5.1 (API cấp 22) trở xuống, thì người dùng sẽ thấy màn hình quyền khi sử dụng ứng dụng lần đầu tiên trên thiết bị chạy Android 10 trở lên, như minh hoạ trong Hình 1. Màn hình này cho phép người dùng thu hồi quyền truy cập vào những quyền mà hệ thống đã cấp cho ứng dụng của bạn trước đó trong quá trình cài đặt.

Ảnh chụp màn hình hộp thoại
Hình 1. Hộp thoại dành cho người dùng cho phép xem xét các quyền cũ

Nhận dạng hoạt động thể chất

Android 10 giới thiệu quyền trong thời gian chạy android.permission.ACTIVITY_RECOGNITION cho những ứng dụng cần phát hiện số bước của người dùng hoặc phân loại hoạt động thể chất của người dùng, chẳng hạn như đi bộ, đi xe đạp hoặc di chuyển bằng xe. Đây là thông tin được thiết kế để cho người dùng biết cách dữ liệu cảm biến trên thiết bị được dùng trong phần Cài đặt.

Một số thư viện trong Dịch vụ Google Play, chẳng hạn như Activity Recognition API (API Nhận dạng hoạt động) và Google Fit API (API Google Fit), sẽ không cung cấp kết quả trừ phi người dùng đã cấp cho ứng dụng của bạn quyền này.

Cảm biến tích hợp duy nhất trên thiết bị yêu cầu bạn khai báo quyền này là cảm biến bộ đếm bướccảm biến bộ phát hiện bước.

Nếu ứng dụng của bạn nhắm đến Android 9 (API cấp 28) trở xuống, thì hệ thống sẽ tự động cấp quyền android.permission.ACTIVITY_RECOGNITION cho ứng dụng của bạn (nếu cần) nếu ứng dụng của bạn đáp ứng từng điều kiện sau:

  • Tệp kê khai chứa quyền com.google.android.gms.permission.ACTIVITY_RECOGNITION.
  • Tệp kê khai không chứa quyền android.permission.ACTIVITY_RECOGNITION.

Nếu hệ thống tự động cấp quyền android.permission.ACTIVITY_RECOGNITION, thì ứng dụng của bạn sẽ giữ lại quyền này sau khi bạn cập nhật ứng dụng để nhắm đến Android 10. Tuy nhiên, người dùng có thể thu hồi quyền này bất cứ lúc nào trong phần cài đặt hệ thống.

Đã xoá nhóm quyền khỏi giao diện người dùng

Kể từ Android 10, các ứng dụng không thể tra cứu cách các quyền được nhóm trong giao diện người dùng.