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à quyền truy cập vào mọi tệp trong những tình huống này.
Ví dụ: Một trường hợp sử dụng chính của ứng dụng chống vi-rút có thể yêu cầu thường xuyên quét nhiều tệp trên các thư mục khác nhau. Nếu quá trình quét này yêu cầu người dùng phải tương tác nhiều lần để chọn các thư mục bằng bộ chọn tệp hệ thống, thì quá trình này có thể đem lại trải nghiệm người dùng không tốt. Các trường hợp sử dụng khác – chẳng hạn như ứng dụng trình quản lý tệp, ứng dụng sao lưu và khôi phục, cũng như các ứng dụng quản lý tài liệu – có thể cần cân nhắc các yếu tố tương tự.
Yêu cầu quyền truy cập vào mọi tệp
Một ứng dụng có thể yêu cầu người dùng cấp quyền truy cập vào mọi tệp bằng cách thực hiện các thao tác sau:
- Khai báo quyền
MANAGE_EXTERNAL_STORAGE
trong tệp kê khai. - Sử dụng thao tác theo ý định
ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION
để chuyển hướng người dùng tới trang cài đặt hệ thống. Tại đây, người dùng có thể bật tuỳ chọn sau cho ứng dụng của mình: Allow access to manage all files (Cho phép truy cập để quản lý tất cả các tệp).
Để xác định xem ứng dụng của bạn đã được cấp quyền MANAGE_EXTERNAL_STORAGE
hay chưa, hãy gọi Environment.isExternalStorageManager()
.
Các thao tác mà MANAGE_EXTERNAL_STORAGE cho phép
Quyền MANAGE_EXTERNAL_STORAGE
cấp những quyền sau:
Quyền đọc và ghi tất cả tệp để trong bộ nhớ dùng chung.
Truy cập vào nội dung của bảng
MediaStore.Files
.Quyền truy cập vào thư mục gốc của cả ổ đĩa USB di động (OTG) và thẻ SD.
Quyền ghi tất cả các thư mục bộ nhớ trong, ngoại trừ
/Android/data/
,/sdcard/Android
và hầu hết các thư mục con của/sdcard/Android
. Quyền ghi này bao gồm quyền truy cập đường dẫn tệp trực tiếp.Các ứng dụng được cấp quyền này vẫn không thể truy cập vào thư mục dành riêng cho ứng dụng thuộc về các ứng dụng khác vì các thư mục này xuất hiện dưới dạng thư mục con của
Android/data/
trong một phương tiện bộ nhớ.
Khi một ứng dụng có quyền MANAGE_EXTERNAL_STORAGE
, ứng dụng đó có thể truy cập vào các tệp và thư mục bổ sung này bằng API MediaStore
hoặc đường dẫn tệp trực tiếp. Tuy nhiên, khi sử dụng Khung truy cập bộ nhớ (Storage Access Framework), bạn chỉ có thể truy cập tệp hoặc thư mục nếu bạn có thể truy cập mà không cần quyền MANAGE_EXTERNAL_STORAGE
.
Gọi hoạt động quản lý bộ nhớ của ứng dụng khác
Trên Android 12 (API cấp 31) trở lên, những ứng dụng có cả quyền
MANAGE_EXTERNAL_STORAGE
và quyền QUERY_ALL_PACKAGES
, chẳng hạn như các ứng dụng quản lý tệp, có thể sử dụng getManageSpaceActivityIntent()
để đưa người dùng đến hoạt động quản lý dung lượng
tuỳ chỉnh của ứng dụng khác.
Phương thức getManageSpaceActivityIntent()
lấy tên gói và mã
yêu cầu, đồng thời sẽ trả về một trong các mục sau:
PendingIntent
, nếu ứng dụng có tên gói được chỉ định đã xác định một hoạt động "manage space" (quản lý dung lượng) tuỳ chỉnh. Sau đó, ứng dụng quản lý tệp tên là phương thứcgetManageSpaceActivityIntent()
có thể gọi ý định được trả về để chuyển người dùng đến hoạt động tuỳ chỉnh.null
, nếu ứng dụng có tên gói được chỉ định không xác định hoạt động "manage space" (quản lý dung lượng).
Bật MANAGE_EXTERNAL_STORAGE để kiểm thử
Để khám phá xem quyền MANAGE_EXTERNAL_STORAGE
ảnh hưởng như thế nào đến ứng dụng của bạn, bạn có thể bật quyền này cho mục đích kiểm thử. Để làm như vậy, hãy chạy lệnh sau trên máy đã kết nối với thiết bị kiểm thử của bạn:
adb shell appops set --uid PACKAGE_NAME MANAGE_EXTERNAL_STORAGE allow
Thông báo của Google Play
Phần này thông báo cho các nhà phát triển phát hành ứng dụng trên Google Play.
Để hạn chế quyền truy cập trên phạm vi rộng vào bộ nhớ dùng chung, Cửa hàng Google Play đã cập nhật chính sách để đánh giá các ứng dụng nhắm mục tiêu đến Android 11 (API cấp 30) trở lên và yêu cầu quyền truy cập vào mọi tệp thông qua quyền MANAGE_EXTERNAL_STORAGE
. Chính sách này sẽ có hiệu lực kể từ tháng 5 năm 2021.
Khi ứng dụng của bạn nhắm mục tiêu đến Android 11 trở lên và khai báo quyền MANAGE_EXTERNAL_STORAGE
, Android Studio sẽ hiển thị cảnh báo tìm lỗi mã nguồn như trong hình 1. Cảnh báo này nhắc bạn rằng Cửa hàng Google Play có chính sách giới hạn việc sử dụng quyền này.
MANAGE_EXTERNAL_STORAGE
.
Chỉ yêu cầu quyền MANAGE_EXTERNAL_STORAGE
khi ứng dụng của bạn không thể tận dụng hiệu quả các API tôn trọng quyền riêng tư hơn, chẳng hạn như Khung quyền truy cập bộ nhớ hoặc API Lưu trữ nội dung nghe nhìn. Việc sử dụng quyền của ứng dụng phải nằm trong phạm vi sử dụng được phép và phải liên quan trực tiếp đến chức năng cốt lõi của ứng dụng. Nếu ứng dụng của bạn bao gồm một trường hợp sử dụng tương tự như bất kỳ trường hợp sử dụng nào sau đây, thì có thể ứng dụng sẽ yêu cầu cấp quyền MANAGE_EXTERNAL_STORAGE
:
- Trình quản lý tệp
- Ứng dụng sao lưu và khôi phục
- Ứng dụng chống vi-rút
- Ứng dụng quản lý tài liệu
- Tìm tệp trên thiết bị
- Mã hoá ổ đĩa và tệp
- Di chuyển dữ liệu giữa các thiết bị