Mở tệp bằng Khung truy cập bộ nhớ

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 qua và mở các 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. Một giao diện người dùng chuẩn, dễ sử dụng cho phép người dùng duyệt xem 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 dịch vụ của các dịch vụ đó. 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 nội dung sau:

  • Nhà cung cấp tài liệu: nhà cung cấp nội dung cho phép dịch vụ lưu trữ, chẳng hạn như Google Drive, tiết lộ các tệp mà dịch vụ này quản lý. Trình cung cấp tài liệu được triển khai làm lớp con của lớp DocumentsProvider. Giản đồ của nhà cung cấp tài liệu dựa trên một hệ phân cấp tệp truyền thống, mặc dù cách nhà cung cấp tài liệu của bạn lưu trữ dữ liệu là tùy thuộc vào bạn. Nền tảng Android bao gồm một số nhà cung cấp tài liệu tích hợp sẵn, chẳng hạn như Nội dung 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_DOCUMENTACTION_OPEN_DOCUMENT_TREE, đồng thời nhận các tệp do nhà cung cấp tài liệu trả về.
  • Bộ chọn: một 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 từ tất cả cá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 những tính năng sau:

  • Cho phép người dùng duyệt qua nội dung từ tất cả các nhà cung cấp tài liệu, không chỉ một ứng dụng.
  • Giúp ứng dụng của bạn có thể có quyền truy cập lâu dài, liên tục vào các tài liệu do một 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à các gốc tạm thời, chẳng hạn như nhà cung cấp bộ nhớ USB. Các tài khoản này chỉ xuất hiện khi bạn đã cắm ổ đĩa.

Tổng quan

SAF tập trung vào một trình cung cấp nội dung là lớp con của lớp DocumentsProvider. Trong 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:

mô hình dữ liệu

Hình 1. Mô hình dữ liệu của nhà cung cấp tài liệu. Gốc trỏ đến một tài liệu, sau đó bắt đầu quạt ra khỏi cây.

Xin lưu ý những điều sau:

  • Mỗi trình cung cấp tài liệu báo cáo một hoặc nhiều gốc, là điểm bắt đầu để khám phá cây tài liệu. Mỗi gốc có một COLUMN_ROOT_ID duy nhất và trỏ đến một tài liệu (thư mục) đại diện cho nội dung trong gốc đó. gốc có thiết kế linh độ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 hoạt động đăng nhập và đăng xuất của người dùng.
  • Dưới mỗi 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 lần lượt có thể trỏ đến 1 đến N tài liệu.
  • Mỗi phần phụ trợ lưu trữ hiển thị các tệp và thư mục riêng lẻ bằng cách tham chiếu chúng bằng một COLUMN_DOCUMENT_ID duy nhất. Mã tài liệu là duy nhất và không thay đổi sau khi được phát hành, vì chúng được dùng để liên tục cấp URI trong các lần khởi động lại thiết bị.
  • Tài liệu có thể là một tệp mở được, 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, thuộc loại MIME MIME_TYPE_DIR.
  • Mỗi tài liệu có thể có các tính năng khác nhau, như được mô tả trong COLUMN_FLAGS. Ví dụ: FLAG_SUPPORTS_WRITE, FLAG_SUPPORTS_DELETEFLAG_SUPPORTS_THUMBNAIL. Bạn có thể đưa cùng một COLUMN_DOCUMENT_ID vào nhiều thư mục.

Luồng điều khiển

Mô hình dữ liệu của trì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 cách sử dụ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ể dùng SAF để truy cập vào dữ liệu đã lưu trữ:

ứng dụng

Hình 2. Quy trình Khung truy cập bộ nhớ.

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. Ứng dụng yêu cầu quyền để tương tác với tệp, nghĩa là đọc, chỉnh sửa, tạo hoặc xoá tệp.
  • Hoạt động 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ặc ACTION_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ư "hãy cung cấp cho tôi tất cả các tệp có thể mở có loại MIME "hình ảnh".
  • Sau khi ý định được kích hoạt, bộ chọn hệ thống sẽ chuyển đến từng trình cung cấp đã đăng ký và cho người dùng thấy các gốc nội dung phù hợp.
  • Bộ chọn này 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 trì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 dịch vụ đám mây.

Trong Hình 3, người dùng đang chọn thư mục Downloads (Tệp đã tải xuống) trong bộ chọn mở trong quá trình tìm kiếm hình ảnh. Bộ chọn này cũng cho thấy tất cả gốc có sẵn cho ứng dụng.

Ảnh chụp màn hình lựa chọn thư mục trong bộ chọn hệ thống

Hình 3. Bộ chọn hiển thị thư mục Downloads (Tệp đã tải xuống) được chọn làm vị trí tìm kiếm.

Sau khi người dùng chọn thư mục Downloads (Tệp đã 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. Người dùng hiện có thể tương tác với hình ảnh theo cách mà ứng dụng nhà cung cấp và ứng dụng hỗ trợ.

Ảnh chụp màn hình thư mục Downloads (Tệp đã tải xuống)

Hình 4. Hình ảnh được lưu trữ trong thư mục Downloads (Tệp đã tải xuống), như bạn đã xem trong bộ chọn hệ thống.

Viết một ứng dụng khách

Trên Android 4.3 trở xuống, nếu bạn muốn ứng dụng của mình truy xuất một tệp từ một ứng dụng khác, ứ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 duy nhất để 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 tuỳ 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 xem tất cả các tệp mà các ứng dụng khác đã cung cấp. Trên giao diện người dùng duy nhất 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 thư mục để một ứng dụng khách truy cập.

Lưu ý: ACTION_OPEN_DOCUMENT không thay thế cho ACTION_GET_CONTENT. Phương pháp bạn sử dụng phụ thuộc vào nhu cầu của ứng dụng:

  • Hãy 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 tài liệu do một 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 nhà cung cấp tài liệu.

Để biết thêm thông tin về cách hỗ trợ hoạt động duyệt xem các tệp và thư mục bằng giao diện người dùng của 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ề trình cung cấp tài liệu, hãy tận dụng các tài nguyên sau:

Mẫu

Video