Android 4.4 (API cấp 19) giới thiệu Khung truy cập bộ nhớ (SAF). SAF cho phép người dùng duyệt xem và mở tài liệu, hình ảnh cũng như các tệp khác trên tất cả các nhà cung cấp bộ nhớ tài liệu mà họ ưu tiên. Giao diện người dùng chuẩn, dễ sử dụng cho phép người dùng duyệt qua các tệp và truy cập vào các tệp gần đây một cách nhất quán trên các ứng dụng và nhà cung cấp.
Các dịch vụ lưu trữ trên đám mây hoặc cục bộ có thể tham gia vào hệ sinh thái này bằng cách triển khai một DocumentsProvider
đóng gói các dịch vụ của chúng. Các ứng dụng khách cần quyền truy cập vào tài liệu của nhà cung cấp có thể tích hợp với SAF bằng một vài dòng mã.
SAF bao gồm những thành phần sau:
- Trình cung cấp tài liệu: một trình cung cấp nội dung cho phép một dịch vụ lưu trữ, chẳng hạn như Google Drive, tiết lộ các tệp mà dịch vụ đó quản lý. Trình cung cấp tài liệu được triển khai dưới dạng một lớp con của lớp
DocumentsProvider
. Giản đồ nhà cung cấp tài liệu dựa trên hệ phân cấp tệp truyền thống, mặc dù cách nhà cung cấp tài liệu lưu trữ dữ liệu thực tế là tuỳ thuộc vào bạn. Nền tảng Android bao gồm một số trình cung cấp tài liệu tích hợp sẵn, chẳng hạn như Tệp tải xuống, Hình ảnh và Video. - Ứng dụng khách: một ứng dụng tuỳ chỉnh gọi các thao tác theo ý định
ACTION_CREATE_DOCUMENT
,ACTION_OPEN_DOCUMENT
vàACTION_OPEN_DOCUMENT_TREE
, đồng thời nhận các tệp do trình cung cấp tài liệu trả về. - Công cụ chọn: giao diện người dùng hệ thống cho phép người dùng truy cập vào tài liệu của tất cả nhà cung cấp tài liệu đáp ứng tiêu chí tìm kiếm của ứng dụng khách.
SAF cung cấp các tính năng sau:
- Cho phép người dùng duyệt xem nội dung của tất cả các nhà cung cấp tài liệu, chứ không chỉ một ứng dụng.
- Cho phép ứng dụng của bạn có quyền truy cập lâu dài, liên tục vào các tài liệu do nhà cung cấp tài liệu sở hữu. Thông qua quyền truy cập này, người dùng có thể thêm, chỉnh sửa, lưu và xoá tệp trên nhà cung cấp.
- Hỗ trợ nhiều tài khoản người dùng và thư mục gốc tạm thời, chẳng hạn như trình cung cấp bộ nhớ USB. Các thư mục này chỉ xuất hiện nếu ổ đĩa được cắm.
Tổng quan
SAF tập trung vào một trình cung cấp nội dung là một lớp con của lớp DocumentsProvider
. Trong một trình cung cấp tài liệu, dữ liệu được cấu trúc dưới dạng hệ phân cấp tệp truyền thống:

Xin lưu ý những điều sau:
- Mỗi nhà cung cấp tài liệu báo cáo một hoặc nhiều gốc. Đây là điểm xuất phát để khám phá cây tài liệu.
Mỗi thư mục gốc có một
COLUMN_ROOT_ID
riêng biệt và thư mục gốc này trỏ đến một tài liệu (thư mục) đại diện cho nội dung trong thư mục gốc đó. Theo thiết kế, thư mục gốc là động để hỗ trợ các trường hợp sử dụng như nhiều tài khoản, thiết bị lưu trữ USB tạm thời hoặc đăng nhập và đăng xuất của người dùng. - Dưới mỗi thư mục gốc là một tài liệu. Tài liệu đó trỏ đến 1 đến N tài liệu, mỗi tài liệu có thể trỏ đến 1 đến N tài liệu.
- Mỗi phần phụ trợ bộ nhớ hiển thị các tệp và thư mục riêng lẻ bằng cách tham chiếu các tệp và thư mục đó bằng một
COLUMN_DOCUMENT_ID
duy nhất. Mã nhận dạng tài liệu là duy nhất và không thay đổi sau khi được cấp, vì chúng được dùng để cấp URI liên tục trên các lần khởi động lại thiết bị. - Tài liệu có thể là một tệp có thể mở, với một loại MIME cụ thể hoặc một thư mục chứa các tài liệu bổ sung, với loại MIME
MIME_TYPE_DIR
. - Mỗi tài liệu có thể có các chức năng khác nhau, như mô tả trong
COLUMN_FLAGS
. Ví dụ:FLAG_SUPPORTS_WRITE
,FLAG_SUPPORTS_DELETE
vàFLAG_SUPPORTS_THUMBNAIL
. Bạn có thể đưa cùng mộtCOLUMN_DOCUMENT_ID
vào nhiều thư mục.
Luồng điều khiển
Mô hình dữ liệu của nhà cung cấp tài liệu dựa trên hệ phân cấp tệp truyền thống. Tuy nhiên, bạn có thể lưu trữ dữ liệu theo cách bạn muốn, miễn là bạn có thể truy cập dữ liệu đó bằng API DocumentsProvider
. Ví dụ: bạn có thể sử dụng bộ nhớ trên đám mây dựa trên thẻ cho dữ liệu của mình.
Hình 2 cho thấy cách một ứng dụng ảnh có thể sử dụng SAF để truy cập vào dữ liệu được lưu trữ:

Xin lưu ý những điều sau:
- Trong SAF, nhà cung cấp và ứng dụng không tương tác trực tiếp với nhau. Ứng dụng yêu cầu quyền tương tác với các tệp, tức là đọc, chỉnh sửa, tạo hoặc xoá tệp.
- Quá trình tương tác bắt đầu khi một ứng dụng (trong ví dụ này là ứng dụng ảnh) kích hoạt ý định
ACTION_OPEN_DOCUMENT
hoặcACTION_CREATE_DOCUMENT
. Ý định có thể bao gồm các bộ lọc để tinh chỉnh thêm tiêu chí, chẳng hạn như "cho tôi tất cả tệp có thể mở có loại MIME là "image"". - Sau khi ý định kích hoạt, bộ chọn hệ thống sẽ chuyển đến từng nhà cung cấp đã đăng ký và hiển thị cho người dùng các thư mục gốc nội dung trùng khớp.
- Bộ chọn cung cấp cho người dùng một giao diện tiêu chuẩn để truy cập vào tài liệu, ngay cả khi các nhà cung cấp tài liệu cơ bản rất khác nhau. Ví dụ: hình 2 cho thấy một nhà cung cấp Google Drive, một nhà cung cấp USB và một nhà cung cấp đám mây.
Trong Hình 3, người dùng đang chọn thư mục Downloads (Tệp đã tải xuống) từ một bộ chọn được mở trong một lượt tìm kiếm hình ảnh. Bộ chọn cũng hiển thị tất cả các thư mục gốc có sẵn cho ứng dụng khách.
Sau khi người dùng chọn thư mục Downloads (Tải xuống), hình ảnh sẽ xuất hiện. Hình 4 cho thấy kết quả của quá trình này. Giờ đây, người dùng có thể tương tác với hình ảnh theo cách mà nhà cung cấp và ứng dụng khách hỗ trợ.
Viết ứng dụng khách
Trên Android 4.3 trở xuống, nếu bạn muốn ứng dụng truy xuất một tệp từ một ứng dụng khác, thì ứng dụng đó phải gọi một ý định như ACTION_PICK
hoặc ACTION_GET_CONTENT
. Sau đó, người dùng chọn một ứng dụng để chọn tệp. Ứng dụng đã chọn phải cung cấp giao diện người dùng để người dùng duyệt xem và chọn trong số các tệp có sẵn.
Trên Android 4.4 (API cấp 19) trở lên, bạn có thêm lựa chọn sử dụng ý định ACTION_OPEN_DOCUMENT
. Ý định này hiển thị giao diện người dùng bộ chọn do hệ thống kiểm soát, cho phép người dùng duyệt qua tất cả tệp mà các ứng dụng khác đã cung cấp. Từ giao diện người dùng này, người dùng có thể chọn một tệp từ bất kỳ ứng dụng nào được hỗ trợ.
Trên Android 5.0 (API cấp 21) trở lên, bạn cũng có thể sử dụng ý định ACTION_OPEN_DOCUMENT_TREE
để cho phép người dùng chọn một thư mục cho ứng dụng khách truy cập.
Lưu ý: ACTION_OPEN_DOCUMENT
không thay thế cho ACTION_GET_CONTENT
.
Phương thức bạn sử dụng sẽ tuỳ thuộc vào nhu cầu của ứng dụng:
- Sử dụng
ACTION_GET_CONTENT
nếu bạn muốn ứng dụng đọc hoặc nhập dữ liệu. Với phương pháp này, ứng dụng sẽ nhập một bản sao của dữ liệu, chẳng hạn như tệp hình ảnh. - Sử dụng
ACTION_OPEN_DOCUMENT
nếu bạn muốn ứng dụng của mình có quyền truy cập lâu dài, liên tục vào các tài liệu do nhà cung cấp tài liệu sở hữu. Ví dụ: ứng dụng chỉnh sửa ảnh cho phép người dùng chỉnh sửa hình ảnh được lưu trữ trong trình cung cấp tài liệu.
Để biết thêm thông tin về cách hỗ trợ duyệt qua các tệp và thư mục bằng giao diện người dùng bộ chọn hệ thống, hãy xem hướng dẫn về cách truy cập vào tài liệu và các tệp khác.
Tài nguyên khác
Để biết thêm thông tin về nhà cung cấp tài liệu, hãy sử dụng các tài nguyên sau: