Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách kiểm tra USB/External Storage đã mount trên Android

Giới thiệu

Sử dụng Environment.getExternalStorageState() để kiểm tra trạng thái bộ nhớ ngoài (SD card, USB OTG, shared storage).

Code (MainActivity.java)

public class MainActivity extends AppCompatActivity {

    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = findViewById(R.id.text);

        String state = Environment.getExternalStorageState();
        String msg;

        switch (state) {
            case Environment.MEDIA_MOUNTED:
                msg = "✅ Đã mount, đọc/ghi được";
                break;
            case Environment.MEDIA_MOUNTED_READ_ONLY:
                msg = "⚠️ Đã mount nhưng chỉ đọc";
                break;
            case Environment.MEDIA_CHECKING:
                msg = "🔍 Đang kiểm tra";
                break;
            case Environment.MEDIA_NOFS:
                msg = "❌ Không có filesystem";
                break;
            case Environment.MEDIA_REMOVED:
                msg = "❌ Đã rút/tháo";
                break;
            case Environment.MEDIA_UNMOUNTED:
                msg = "❌ Chưa mount";
                break;
            case Environment.MEDIA_UNMOUNTABLE:
                msg = "❌ Không thể mount";
                break;
            default:
                msg = "Trạng thái: " + state;
        }

        textView.setText(msg);
    }
}

Quyền (AndroidManifest.xml)

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Lưu ý quan trọng (Scoped Storage)

  • Android 10 (API 29)+: getExternalStorageState() vẫn hoạt động nhưng truy cập file bị hạn chế. App chỉ truy cập được thư mục riêng Context.getExternalFilesDir() mà không cần quyền.
  • Android 11 (API 30)+: Không thể dùng WRITE_EXTERNAL_STORAGE để truy cập thư mục của app khác. Dùng MediaStore hoặc Storage Access Framework (ACTION_OPEN_DOCUMENT_TREE).
  • USB OTG: Cần UsbManager để liệt kê thiết bị USB, không chỉ phụ thuộc storage state.