Vì bạn đang sử dụng Bộ nhớ ngoài, ứng dụng của bạn phải biết trạng thái Bộ nhớ ngoài mà bạn có thể nhận được qua Environment.getExternalStorageState()
.
Bạn chỉ phải truy cập Bộ nhớ ngoài khi trạng thái là MOUNTED
.
Nếu bạn đang cố gắng mở một tệp (hoặc SQLite DB; nó chỉ là một tệp!) Trong khi khởi động thiết bị, bạn sẽ chắc chắn gặp sự cố vì Bộ nhớ ngoài chưa được gắn kết cho đến khi khởi động thiết bị (sau khi Màn hình chính hiển thị).
Cách giải quyết vấn đề này là đăng ký IntentFilter
để được thông báo về tất cả các thay đổi trong trạng thái Bộ nhớ ngoài và hoạt động tương ứng.
Luôn luôn là một ý kiến hay khi đọc tài liệu! Xem tài liệu Android để biết chi tiết:http://developer.android.com/reference/android/os/Enosystem.html
Việc sử dụng Bộ nhớ ngoài cho mục đích này là không rõ ràng, vì bạn không thể kiểm soát khi nào nó không khả dụng! Ví dụ:người dùng cắm thiết bị của họ vào USB trên máy tính của họ và chọn tùy chọn "Bật USB Mass Storage", để họ có thể truy cập Bộ nhớ ngoài của thiết bị từ máy tính của họ. Tin xấu! Ứng dụng của bạn sẽ bị ngắt kết nối khỏi Bộ nhớ ngoài và rất có thể không có cơ hội thực hiện bất kỳ IO dọn dẹp nào!
Với tình trạng này, bây giờ bạn không còn phải làm gì với tất cả dữ liệu bạn sẽ đưa vào cơ sở dữ liệu của mình, nếu chỉ có nó là có sẵn.