Bạn nói:
Vấn đề đầu tiên là tôi kiểm tra nếu có một thẻ SD gắn kết. Hàm này trả về true ngay cả khi không có thẻ SD nào được chèn vào.
Tôi nghĩ bạn đã tình cờ gặp phải điều gì đó phải mất chút thời gian để nắm bắt, bởi vì nó không rõ ràng.
Trong Android, bạn sẽ tìm thấy 2 loại bộ nhớ:
- Hệ thống một, luôn luôn có sẵn, rất bảo đảm: ứng dụng của bạn chỉ có thể truy cập vào một phần nhỏ của nó dành riêng cho bạn và các ứng dụng khác không thể đọc được dữ liệu của bạn đó.
- Thẻ được chia sẻ, thường được gọi là công khai, bên ngoài hoặc "sdcard". Mỗi ứng dụng đều có quyền truy cập đọc/ghi vào tất cả. Nhưng nó không phải là luôn luôn có sẵn, như bạn có thể "gắn kết" nó trên máy tính của bạn, có hiệu lực để tháo gắn nó trong Android và do đó ẩn nó. (nhưng chỉ trước khi Android 3.X).
Bạn sẽ tìm thấy 3 loại thiết bị trong môi trường tự nhiên:
- Trên một số thiết bị, bộ nhớ chia sẻ này là trên một con chip được hàn bên trong thiết bị. do đó, sdcard tên là không đủ. Tuy nhiên, đường dẫn có thể là "/ sdcard"
- Trên các thiết bị khác, bộ nhớ dùng chung này nằm trên thẻ sdcard thực mà bạn có thể xóa.
- Trên một số thiết bị khác, bộ nhớ này dành cho một phần trên chip và một phần khác trên thẻ sdcard của bạn.
Dựa trên những gì bạn đã nói Tôi nghĩ bạn đang ở trên loại thiết bị thứ 3. Vì vậy, sdcard vật lý của bạn sẽ được tìm thấy trong loại đường dẫn: /mnt/sdcard/external_sd/
. Đáng buồn thay, đây là thiết bị cụ thể, tôi không nghĩ rằng có một cái gì đó trong API Android để có được con đường này.
Ngoài ra, lưu ý hơn, kể từ Android 3.X, chúng tôi không cần phải "gắn kết" bộ nhớ dùng chung này nữa. Vì vậy, bộ nhớ dùng chung của bạn sẽ luôn ở đó cho Android vì chúng tôi hiện đang sử dụng giao thức MTP.
Đây là lý do tại sao isExternalStorageAvailable() trả về true, ngay cả khi sdcard của bạn bị xóa.
vui lòng mở một câu hỏi cho mỗi sự cố. – pcans
đã tách các câu hỏi – Rik