Kiểm tra và ghi file xuống SD Card hoặc Internal Storage

Mới đây khi test ứng dụng Ôn thi lý thuyết lái xe trên máy Droid 3, mình phát hiện ra một lỗi khiến quá trình tải dữ liệu ảnh từ internet về không chạy được. Lý do là do máy Droid 3 đó của anh bạn mình mới mua, và do bộ nhớ trong của máy khá lớn (16GB hay 32GB gì đó), nên anh không cắm thẻ nhớ ngoài. Do vậy việc đọc và ghi file trên SD Card gặp lỗi.

Sau khi tìm kiếm, mình đã khắc phục vấn đề này bằng cách thêm đoạn code kiểm tra nếu máy có SD Card, và có khả năng ghi file lên đó thì ta sẽ ghi lên SD Card. Nếu không, ta sẽ ghi file lên bộ nhớ trong của máy. File sẽ được ghi vào thư mục có dạng /data/data/com.tonnguyen.sathach/tênthưmục

Dưới đây là đoạn code để lấy ra đường dẫn thư mục mà ta có thể ghi file vào đó, tùy thuộc xem máy có thẻ nhớ ngoài hay không:

	public static String getStorageDirectory(Context context) {
		String state = Environment.getExternalStorageState();
		if (Environment.MEDIA_MOUNTED.equals(state)) {
			// sd card - external storage : /mnt/sdcard/data/com.tonnguyen.sathach/
			return Environment.getExternalStorageDirectory() + "/data/com.tonnguyen.sathach/";
		} else {
			// internal storage: /data/data/com.tonnguyen.sathach/app_media/
			ContextWrapper cw = new ContextWrapper(context);
			File dir = cw.getDir("media", Context.MODE_PRIVATE);
			String path = dir.getAbsolutePath();
			if(!path.endsWith("/")) {
				path += "/";
			}
			return path;
		}
	}

Chúc bạn thành công, hoặc để lại comment nếu bạn có câu hỏi.