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êngContext.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ùngMediaStorehoặcStorage 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.