【Android】SD卡
- SD卡:Android的外部存储空间
使用DOS命令创建SD卡:mksdcard 2048M D:\sdcard.img
其中mksdcard.exe位于[SDK安装目录]\emulator
- 检测SD卡是否存在:
1
2
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
// SD卡存在
- 向SD卡写文件:
1
2
3
File sdCardDir = Environment.getExternalStorageDirectory(); // 获取SD卡目录
File saveFile = new File(sdCardDir, "itcast.txt");
FileOutputStream outputStream = new FileOutputStream(saveFile);
需要的权限(第一个权限似乎并不需要,Android Studio还会报错):
1
2
3
4
5
6
<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 从SDCard读取数据权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Genymotion模拟器测试结果:
其中legacy是一个指向mnt/shell/emulated/0的链接,实际的绝对路径:mnt/shell/emulated/0/itcast.txt
真实手机(Android 6.0)测试结果:
因为WRITE_EXTERNAL_STORAGE和READ_EXTERNAL_STORAGE权限在Android 6.0之上的系统除了在表单文件中配置,还要在代码中动态申请!
1
2
3
4
5
6
7
8
9
10
private void verifyStoragePermissions() {
//检查是否有写权限
int check = ActivityCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (check != PackageManager.PERMISSION_GRANTED) {
String[] permissions = new String[]{ Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE };
ActivityCompat.requestPermissions(this, permissions, 1);
}
}
再次测试结果如下:
安装时提示的权限申请是表单文件中静态配置的:
运行时提示的权限申请是代码中动态申请的:
成功写入文件:
This post is licensed under CC BY 4.0 by the author.