Quyền lưu trữ không được cấp là gì?

Android 13 giới thiệu quyền lưu trữ chi tiết và công cụ chọn ảnh để truy cập tệp phương tiện

S bắt đầu với Android 13, quyền READ_EXTERNAL_STORAGE đã không còn được dùng để thay thế cho các API thay thế tốt hơn để truy cập các tệp phương tiện từ bộ nhớ Android. Nếu ứng dụng của bạn hướng đến Android 13 (API cấp 33) trở lên và cần truy cập vào các tệp phương tiện mà các ứng dụng khác đã tạo, thì bạn cần cập nhật mã để sử dụng bộ API mới được giới thiệu cùng với bản phát hành Android 13

Sample image for change

Ảnh của Ross Findon trên Bapt

Trong bài viết này, chúng ta sẽ thấy hai cách tiếp cận khác nhau để truy cập các tệp phương tiện từ bộ nhớ Android. Lựa chọn cách tiếp cận nào tùy thuộc vào trường hợp sử dụng và yêu cầu kinh doanh. Đây là 2 cách

1. Bộ chọn ảnh (Không cần xin phép)

Công cụ này cung cấp cách để người dùng chọn tệp phương tiện mà không cần cấp quyền truy cập vào toàn bộ thư viện phương tiện của họ

Trường hợp sử dụng
Nếu ứng dụng của bạn chỉ cần truy cập hình ảnh, ảnh và video, bạn có thể cân nhắc sử dụng Bộ chọn ảnh của Android. Hệ thống Android sẽ đảm nhận việc hiển thị Giao diện người dùng trình chọn phương tiện

Bộ chọn ảnh đã được đưa vào tất cả các thiết bị Android chạy Android OS 11 và 12 (không bao gồm thiết bị Android Go), vì vậy người dùng sẽ có được trải nghiệm tiêu chuẩn và thống nhất trên tất cả các thiết bị Android

giới hạn
Bộ chọn ảnh đi kèm với một vài hạn chế, e. g. nó chỉ hoạt động với các loại phương tiện Trực quan chứ không phải loại Âm thanh

Trong phần tiếp theo của bài viết này, chúng ta sẽ xem triển khai bộ chọn ảnh

2. Yêu cầu quyền phương tiện chi tiết

Trường hợp sử dụng
Mặc dù nên sử dụng bộ chọn ảnh mới thay vì yêu cầu quyền truy cập vào tất cả các tệp phương tiện, nhưng ứng dụng của bạn có thể có trường hợp sử dụng yêu cầu quyền truy cập rộng rãi này (e. g. sao lưu ảnh bộ sưu tập). Đối với những cách sử dụng cụ thể này, các quyền mới được giới thiệu cung cấp quyền truy cập vào các loại tệp phương tiện cụ thể, bao gồm hình ảnh, video hoặc âm thanh

Bắt đầu từ Mục tiêu 13, bạn phải yêu cầu một hoặc nhiều quyền phương tiện chi tiết sau thay vì quyền READ_EXTERNAL_STORAGE

  1. READ_MEDIA_IMAGES để truy cập hình ảnh
  2. READ_MEDIA_VIDEO để truy cập video
  3. READ_MEDIA_AUDIO để truy cập tệp âm thanh

Kiểm tra cây quyết định này để giúp bạn quyết định nên chọn cách tiếp cận nào

Decision tree to help you decide what approach to choose

Nguồn. Bài viết của Yacine Rezgui về cách sử dụng Bộ chọn ảnh

Bây giờ chúng ta đã rõ nên chọn cách tiếp cận nào trong trường hợp nào, bây giờ chúng ta sẽ xem xét chi tiết triển khai của cả hai cách tiếp cận

Triển khai bộ chọn ảnh

T bộ chọn ảnh cung cấp giao diện có thể duyệt, có thể tìm kiếm, hiển thị cho người dùng thư viện phương tiện của họ, được sắp xếp theo ngày từ mới nhất đến cũ nhất. Công cụ này cung cấp một cách tích hợp, an toàn để người dùng chọn hình ảnh và video mà không cần cấp cho ứng dụng của bạn quyền truy cập vào toàn bộ thư viện phương tiện của họ.

Ngoài ra, phần “Album” cho phép người dùng duyệt theo các danh mục hữu ích như Ảnh chụp màn hình hoặc Tải xuống. Bộ chọn ảnh có thể tùy chỉnh bằng cách chỉ định xem người dùng sẽ chỉ xem ảnh hay chỉ xem video hoặc bằng cách đặt số lượng mục tối đa mà họ có thể chọn

Công cụ cập nhật tự động, cung cấp chức năng mở rộng cho người dùng ứng dụng của bạn theo thời gian mà không yêu cầu bất kỳ thay đổi mã nào

Example of photo Picker

Ví dụ về bộ chọn ảnh. Nguồn. https. // nhà phát triển. Android. com

Thực hiện

Để sử dụng thư viện hỗ trợ chọn ảnh, bao gồm phiên bản 1. 6. 0 hoặc cao hơn của thư viện androidx.activity. Đó là một ý định khởi chạy đơn giản và nó sẽ sử dụng bộ chọn ảnh khi khả dụng và dự phòng ACTION_OPEN_DOCUMENT trên các thiết bị cũ hơn

Thư viện hỗ trợ sử dụng các hợp đồng kết quả hoạt động sau để khởi chạy bộ chọn ảnh

  1. PickVisualMedia. Để chọn một hình ảnh hoặc video
  2. PickMultipleVisualMedia, để chọn nhiều hình ảnh hoặc video

Nếu bộ chọn ảnh không khả dụng trên thiết bị, thư viện hỗ trợ sẽ tự động gọi hành động có ý định ACTION_OPEN_DOCUMENT để thay thế

Chọn một mục phương tiện duy nhất

Để chọn một mục phương tiện duy nhất, hãy sử dụng hợp đồng kết quả hoạt động READ_EXTERNAL_STORAGE0, như được hiển thị trong đoạn mã sau

Ví dụ về việc chọn một phương tiện trực quan từ bộ lưu trữ

Chọn nhiều mục phương tiện

Để chọn nhiều mục phương tiện, hãy đặt số lượng tệp phương tiện có thể chọn tối đa, như được hiển thị trong đoạn mã sau

Ví dụ về chọn nhiều phương tiện trực quan từ bộ lưu trữ

Nền tảng giới hạn số lượng tệp tối đa mà bạn có thể yêu cầu người dùng chọn trong bộ chọn ảnh. Để truy cập giới hạn này, hãy gọi READ_EXTERNAL_STORAGE1. Trên các thiết bị không hỗ trợ bộ chọn ảnh, giới hạn này sẽ bị bỏ qua

Bạn có thể xác minh xem bộ chọn ảnh có sẵn trên một thiết bị cụ thể hay không bằng cách gọi tới số READ_EXTERNAL_STORAGE2

Tiếp tục truy cập tệp phương tiện

Theo mặc định, hệ thống cấp cho ứng dụng của bạn quyền truy cập vào các tệp phương tiện cho đến khi thiết bị được khởi động lại hoặc cho đến khi ứng dụng của bạn dừng lại. Nếu ứng dụng của bạn thực hiện một số công việc kéo dài và cần duy trì quyền truy cập vào các tệp trong một khoảng thời gian dài hơn thì bạn có thể gọi phương thức READ_EXTERNAL_STORAGE3

val flag = Intent.FLAG_GRANT_READ_URI_PERMISSION
context.contentResolver.takePersistableUriPermission(uri, flag)

Quyền phương tiện chi tiết

S bắt đầu từ API cấp 33, nếu ứng dụng của bạn truy cập tệp phương tiện của ứng dụng khác, thì không yêu cầu quyền READ_EXTERNAL_STORAGE. Thay vào đó, hãy yêu cầu một hoặc nhiều quyền này. READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_MEDIA_AUDIO

Thực hiện

Để truy cập các tệp phương tiện mà các ứng dụng khác đã tạo, bạn phải khai báo các quyền thích hợp liên quan đến bộ nhớ. Đoạn mã sau trình bày cách khai báo quyền lưu trữ thích hợp

Ví dụ về quyền lưu trữ trên Android 13

Example of storage permissions on Android 13

Ví dụ về quyền lưu trữ trên Android 13

Nếu bạn yêu cầu đồng thời cả quyền READ_MEDIA_IMAGES và quyền READ_MEDIA_VIDEO, thì chỉ có một hộp thoại quyền hệ thống xuất hiện

Nếu trước đó người dùng đã cấp cho ứng dụng của bạn quyền READ_EXTERNAL_STORAGE, thì hệ thống sẽ tự động cấp quyền phương tiện chi tiết cho ứng dụng của bạn

Tôi hy vọng bài viết này đã giúp bạn. Nếu có, đừng quên nhấp vào biểu tượng CLAP đó và theo dõi để biết thêm nội dung như vậy