Android 判断SD卡是否存在 ?
参考答案:
在Android中,判断SD卡(外部存储)是否存在可以通过检查其路径是否存在来实现。从Android 10(API级别29)开始,对外部存储的访问方式有所改变,引入了MediaStore
和Storage Access Framework
来管理文件和目录。以下是几种方法来检查SD卡是否存在,取决于你的应用的目标API级别和所需的权限。
-
使用
Environment.getExternalStorageDirectory()
:- 适用于旧版本的Android(API级别<29)。
- 这个方法返回一个表示外部存储根目录的
File
对象。 - 你可以通过调用
File.exists()
来检查这个目录是否存在。
File externalStorage = Environment.getExternalStorageDirectory();
if (externalStorage.exists()) {
// SD卡存在
} else {
// SD卡不存在
}
-
使用
MediaStore
:- 适用于Android 10及以上版本。
MediaStore
提供了访问外部存储中的媒体文件的方法,但不直接提供检查SD卡是否存在的功能。- 你可以尝试查询
MediaStore
中的某些内容来判断是否有外部存储。
// 需要添加相应的权限,如READ_EXTERNAL_STORAGE
ContentResolver contentResolver = context.getContentResolver();
Cursor cursor = contentResolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, null);
if (cursor != null && cursor.getCount() > 0) {
// 外部存储(可能是SD卡)存在并且包含图片
} else {
// 没有找到外部存储或没有图片
cursor.close();
}
-
检查存储权限:
- 在Android 6.0(API级别23)及以上,需要动态请求
READ_EXTERNAL_STORAGE
和WRITE_EXTERNAL_STORAGE
权限。 - 你可以通过
ActivityCompat.checkSelfPermission()
来检查应用是否已获得这些权限。
- 在Android 6.0(API级别23)及以上,需要动态请求
if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
// 有权限访问外部存储
} else {
// 没有权限
}
请注意,随着Android版本的更新,对外部存储的访问方式也在不断变化。始终确保你的应用遵循最新的Android存储访问指南和最佳实践。如果你的应用需要访问外部存储,建议阅读Android官方文档以获取最新信息。