2015-12-26 13 views
6

Trong ứng dụng Android của tôi, tôi lưu một số tệp vào thư mục Environment.getExternalStorageDirectory() + "\MyApp". Điều này làm việc tốt cho đến khi cập nhật Android 6 marshmallow. Sau khi cập nhật marshmallow, tôi không thể ghi vào thư mục này.Tôi có cần kiểm tra quyền thời gian chạy để ghi vào đường dẫn getExternalFilesDir() trong marshmallow không?

Như được mô tả trong câu trả lời this, trong marshmallow, ứng dụng cần phải yêu cầu sự cho phép của người dùng trong thời gian chạy trước khi ghi vào bộ nhớ ngoài.

Nhưng, khi tôi sử dụng context.getExternalFilesDir(null) thay vì Environment.getExternalStorageDirectory(), tôi không cần phải hỏi cho bất kỳ sự cho phép trong thời gian chạy và nó chỉ hoạt động (con đường trở về từ context.getExternalFilesDir(null) cũng là bên trong thư mục lưu trữ bên ngoài).

Đây có phải là một loại trùng hợp ngẫu nhiên hoặc tôi có thể tiếp tục viết thư cho context.getExternalFilesDir(null) mà không cần xin phép khi chạy không?

+0

Bạn có thực sự có khả năng viết các tập tin để lưu trữ bên ngoài mà không yêu cầu sự cho phép trên Android 6? –

Trả lời

8

Các documentation trạng thái:

Bắt đầu từ KitKat, không có quyền được yêu cầu phải đọc hoặc viết thư cho con đường quay trở lại; ứng dụng gọi điện luôn có thể truy cập được. chỉ áp dụng cho đường dẫn được tạo cho tên gói của ứng dụng gọi . Để truy cập đường dẫn thuộc các gói khác, cần có WRITE_EXTERNAL_STORAGE và/hoặc READ_EXTERNAL_STORAGE.

Bạn sẽ có quyền truy cập đọc/ghi vào getExternalFilesDir() trên Android 4.4+ mà không yêu cầu bất kỳ quyền nào.

Tôi khuyên bạn nên sử dụng FileProvider nếu bạn cần hỗ trợ các cấp API thấp hơn.

+0

Nếu tôi đang nhắm mục tiêu API 25, nhưng hỗ trợ xuống API 16, tôi vẫn cần khai báo quyền 'WRITE_EXTERNAL_STORAGE' trong Tệp kê khai và sau đó không yêu cầu quyền khi chạy không? – ankushg

0

Như tôi biết PERMISSIONS đều có phần bắt đầu kể từ khi Android 6 trở lên Vì vậy, không cần phải kiểm tra quyền truy cập cho API 16

Các vấn đề liên quan