Android 11 (API cấp 30) giúp cải thiện nền tảng này hơn nữa, giúp bảo vệ tốt hơn dữ liệu ứng dụng và người dùng trong bộ nhớ ngoài. Bản phát hành này giới thiệu một số tính năng nâng cao, chẳng hạn như quyền truy cập vào đường dẫn tệp thô, thao tác chỉnh sửa hàng loạt đối với nội dung nghe nhìn và giao diện người dùng cập nhật cho Khung truy cập bộ nhớ.
Bản phát hành này cũng cải thiện bộ nhớ có giới hạn, giúp nhà phát triển dễ dàng hoàn thành các trường hợp sử dụng bộ nhớ sau khi chuyển sang sử dụng mô hình bộ nhớ này.
Thực thi bộ nhớ có giới hạn
Các ứng dụng chạy trên Android 11 nhưng nhắm đến Android 10 (API cấp 29) vẫn có thể yêu cầu thuộc tính requestLegacyExternalStorage
. Cờ này cho phép các ứng dụng tạm thời chọn không áp dụng
những thay đổi liên kết
với bộ nhớ có giới hạn, chẳng hạn như cấp quyền truy cập vào nhiều thư mục và
các loại tệp nội dung nghe nhìn khác nhau. Sau khi bạn cập nhật ứng dụng để nhắm đến Android 11, hệ thống sẽ bỏ qua cờ requestLegacyExternalStorage
.
Duy trì khả năng tương thích với Android 10
Nếu ứng dụng của bạn chọn không sử dụng bộ nhớ có giới hạn khi chạy trên các thiết bị Android 10, bạn
nên tiếp tục đặt requestLegacyExternalStorage
thành true
trong
tệp kê khai của ứng dụng. Nhờ đó, ứng dụng của bạn có thể tiếp tục hoạt động như mong đợi trên các thiết bị chạy Android 10.
Di chuyển dữ liệu sang các thư mục hiển thị khi sử dụng bộ nhớ có giới hạn
Nếu ứng dụng của bạn sử dụng mô hình bộ nhớ cũ và nhắm đến Android 10 trở xuống trước đó, thì bạn có thể đang lưu trữ dữ liệu trong một thư mục mà ứng dụng của bạn không thể truy cập khi mô hình bộ nhớ có giới hạn được bật. Trước khi bạn nhắm mục tiêu đến Android 11, hãy di chuyển dữ liệu sang một thư mục tương thích với bộ nhớ có giới hạn.
Kiểm thử bộ nhớ có giới hạn
Để bật bộ nhớ có giới hạn trong ứng dụng, bất kể phiên bản SDK mục tiêu và giá trị cờ tệp kê khai của ứng dụng là gì, hãy bật các cờ tương thích sau đây của ứng dụng:
DEFAULT_SCOPED_STORAGE
(được bật cho tất cả ứng dụng theo mặc định)FORCE_ENABLE_SCOPED_STORAGE
(bị tắt đối với tất cả ứng dụng theo mặc định)
Để tắt bộ nhớ có giới hạn và sử dụng mô hình bộ nhớ cũ, hãy huỷ thiết lập cả hai cờ.
Quản lý bộ nhớ thiết bị
Kể từ Android 11, các ứng dụng sử dụng mô hình bộ nhớ có giới hạn chỉ có thể truy cập vào các tệp bộ nhớ đệm dành riêng cho ứng dụng. Nếu ứng dụng của bạn cần quản lý bộ nhớ của thiết bị, hãy làm theo hướng dẫn về cách truy vấn dung lượng trống.
- Kiểm tra xem có dung lượng trống hay không bằng cách gọi thao tác theo ý định
ACTION_MANAGE_STORAGE
. Nếu thiết bị không có đủ dung lượng trống, hãy nhắc người dùng đồng ý xoá mọi bộ nhớ đệm. Để làm vậy, hãy gọi thao tác theo ý định
ACTION_CLEAR_APP_CACHE
.
Thư mục dành riêng cho ứng dụng trên bộ nhớ ngoài
Kể từ Android 11, các ứng dụng sẽ không thể tạo
thư mục dành riêng cho ứng dụng trên bộ nhớ ngoài. Để truy cập vào thư mục mà hệ thống cung cấp cho ứng dụng của bạn, hãy gọi getExternalFilesDirs()
.
Truy cập vào tệp nội dung nghe nhìn
Để giúp bạn dễ dàng truy cập vào nội dung nghe nhìn trong khi vẫn đảm bảo quyền riêng tư của người dùng, Android 11 bổ sung các tính năng sau.
Thực hiện các thao tác hàng loạt
Để đảm bảo tính nhất quán trên các thiết bị và thuận tiện hơn cho người dùng, Android 11 bổ sung một số phương thức giúp quản lý các nhóm tệp nội dung nghe nhìn dễ dàng hơn.
Truy cập tệp bằng đường dẫn tệp trực tiếp và thư viện gốc
Để giúp ứng dụng của bạn hoạt động trơn tru hơn với thư viện nội dung nghe nhìn của bên thứ ba, Android 11 cho phép bạn sử dụng các API khác với API MediaStore
để truy cập vào các tệp nội dung nghe nhìn từ bộ nhớ dùng chung thông qua đường dẫn tệp trực tiếp. Các API này bao gồm:
- API
File
. - Các thư viện gốc, chẳng hạn như
fopen()
.
Quyền truy cập vào dữ liệu từ các ứng dụng khác
Để bảo vệ quyền riêng tư của người dùng, trên các thiết bị chạy Android 11 trở lên, hệ thống sẽ hạn chế thêm quyền truy cập của ứng dụng vào các thư mục riêng tư của các ứng dụng khác.
Truy cập vào các thư mục dữ liệu trên bộ nhớ trong
Android 9 (API cấp 28) đã bắt đầu hạn chế những ứng dụng có thể cho phép các ứng dụng khác truy cập vào các tệp trong thư mục dữ liệu trên bộ nhớ trong của các ứng dụng khác. Các ứng dụng nhắm đến Android 9 trở lên không thể làm cho các tệp trong thư mục dữ liệu của ứng dụng có thể truy cập được trên toàn thế giới.
Android 11 mở rộng quy định hạn chế này. Nếu ứng dụng của bạn nhắm đến Android 11, thì ứng dụng đó sẽ không thể truy cập vào các tệp trong bất kỳ thư mục dữ liệu nào của ứng dụng khác, ngay cả khi ứng dụng đó nhắm đến Android 8.1 (API cấp 27) trở xuống và đã làm cho các tệp trong thư mục dữ liệu của ứng dụng có thể đọc được.
Quyền truy cập vào các thư mục dành riêng cho ứng dụng trên bộ nhớ ngoài
Trên Android 11, các ứng dụng không thể truy cập vào tệp trong bất kỳ thư mục nào khác dành riêng cho ứng dụng trong bộ nhớ ngoài nữa.
Quy định hạn chế về quyền truy cập vào tài liệu
Để nhà phát triển có thời gian kiểm thử, những thay đổi sau đây liên quan đến Khung truy cập bộ nhớ (SAF) chỉ có hiệu lực nếu ứng dụng của bạn nhắm đến Android 11 trở lên.
Quyền truy cập vào thư mục
Bạn không thể dùng thao tác theo ý định ACTION_OPEN_DOCUMENT_TREE
để yêu cầu quyền truy cập vào các thư mục sau nữa:
- Thư mục gốc của phương tiện bộ nhớ trong.
- Thư mục gốc của mỗi phương tiện ghi thẻ SD mà nhà sản xuất thiết bị cho là đáng tin cậy, bất kể thẻ đó là loại mô phỏng hay có thể tháo rời. Phương tiện ghi đáng tin cậy là phương tiện ghi mà hầu như lúc nào ứng dụng cũng có thể truy cập thành công.
- Thư mục
Download
.
Quyền truy cập vào tệp
Bạn không thể sử dụng thao tác theo ý định
ACTION_OPEN_DOCUMENT_TREE
hoặc
ACTION_OPEN_DOCUMENT
để yêu cầu người dùng chọn từng tệp riêng lẻ trong
các thư mục sau nữa:
- Thư mục
Android/data/
và tất cả các thư mục con. - Thư mục
Android/obb/
và tất cả các thư mục con.
Kiểm thử thay đổi
Để kiểm thử sự thay đổi về hành vi này, hãy làm như sau:
- Gọi một ý định bằng thao tác
ACTION_OPEN_DOCUMENT
. Hãy kiểm tra để đảm bảo rằng cả hai thư mụcAndroid/data/
vàAndroid/obb/
đều không xuất hiện. - Thực hiện một trong các thao tác sau:
- Bật cờ tương thích của ứng dụng
RESTRICT_STORAGE_ACCESS_FRAMEWORK
. - Nhắm mục tiêu đến Android 11 trở lên.
- Bật cờ tương thích của ứng dụng
- Gọi một ý định bằng thao tác
ACTION_OPEN_DOCUMENT_TREE
. Kiểm tra để đảm bảo thư mụcDownload
có xuất hiện và nút hành động liên kết với thư mục chuyển sang màu xám.
Quyền
Android 11 ra mắt các thay đổi sau đây liên quan đến quyền truy cập vào bộ nhớ.
Nhắm mục tiêu bất kỳ phiên bản nào
Các thay đổi sau đây sẽ có hiệu lực trên Android 11, bất kể phiên bản SDK mục tiêu của ứng dụng là gì:
- Quyền khi bắt đầu chạy Storage (Bộ nhớ) được đổi tên thành Files & Media (Tệp và nội dung nghe nhìn).
Nếu ứng dụng của bạn chưa chọn không sử dụng bộ nhớ có giới hạn và yêu cầu quyền
READ_EXTERNAL_STORAGE
, thì người dùng sẽ thấy một hộp thoại khác so với Android 10. Hộp thoại cho biết ứng dụng của bạn đang yêu cầu quyền truy cập vào ảnh và nội dung nghe nhìn, như trong Hình 1.Người dùng có thể xem ứng dụng nào có quyền
READ_EXTERNAL_STORAGE
trong phần cài đặt hệ thống. Trên trang Cài đặt > Quyền riêng tư > Trình quản lý quyền > Tệp và nội dung đa phương tiện, mỗi ứng dụng có quyền này sẽ được liệt kê trong phần Được phép đối với tất cả các tệp. Nếu ứng dụng của bạn nhắm đến Android 11, hãy lưu ý rằng quyền truy cập này vào "tất cả tệp" sẽ ở chế độ chỉ có thể đọc. Để đọc và ghi vào mọi tệp trong bộ nhớ dùng chung bằng ứng dụng này, bạn cần có quyền truy cập vào mọi tệp.
Nhắm mục tiêu đến Android 11
Nếu ứng dụng của bạn nhắm đến Android 11, thì cả quyền WRITE_EXTERNAL_STORAGE
và quyền đặc quyền WRITE_MEDIA_STORAGE
đều không cung cấp thêm quyền truy cập nào nữa.
Lưu ý rằng trên các thiết bị chạy Android 10 (API cấp 29) trở lên, ứng dụng của bạn có thể đóng góp cho các bộ sưu tập nội dung nghe nhìn được xác định rõ ràng, chẳng hạn như MediaStore.Downloads
mà không cần yêu cầu bất kỳ quyền liên quan đến bộ nhớ nào. Tìm hiểu thêm về cách chỉ yêu cầu các quyền cần thiết khi làm việc với các tệp nội dung nghe nhìn trong ứng dụng.
Quyền truy cập vào mọi tệp
Phần lớn các ứng dụng yêu cầu quyền truy cập vào bộ nhớ dùng chung đều có thể làm theo các phương pháp hay nhất để chia sẻ tệp nội dung nghe nhìn và chia sẻ tệp không phải nội dung nghe nhìn. Tuy nhiên, một số ứng dụng có trường hợp sử dụng cốt lõi yêu cầu quyền truy cập trên phạm vi rộng vào các tệp trên thiết bị, nhưng không thể truy cập hiệu quả bằng cách sử dụng các phương pháp hay nhất về bộ nhớ tôn trọng quyền riêng tư. Android cung cấp quyền truy cập đặc biệt có tên là All files access (Quyền truy cập vào mọi tệp) trong những tình huống này. Để tìm hiểu thêm, hãy xem hướng dẫn về cách quản lý tất cả các tệp trên thiết bị lưu trữ.
Tài nguyên khác
Để biết thêm thông tin về những thay đổi đối với bộ nhớ trong Android 11, hãy xem các tài liệu sau: