Android内/外置SD卡路径获取与写入实践
159 浏览量
更新于2024-08-28
收藏 72KB PDF 举报
在Android开发中,管理设备的内置存储(Internal Storage)和外置SD卡(External Storage)是常见的需求,特别是在处理文件操作和用户数据存储时。本文档介绍了如何在Android应用中获取并显示内置和外置SD卡的路径,并实现数据的写入功能。以下步骤和代码将帮助开发者理解这个过程。
1. 权限管理:
在Android 6.0(API level 23)及更高版本中,为了访问外部存储,你需要请求`Manifest.permission.WRITE_EXTERNAL_STORAGE`和`Manifest.permission.READ_EXTERNAL_STORAGE`权限。在`MainActivity`类中,可以检查当前应用是否已经拥有这些权限,如果没有,需要在运行时请求。
```java
private void checkPermissions() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_EXTERNAL_STORAGE);
}
}
}
```
2. 获取路径:
使用`Environment.getExternalStorageDirectory()`获取外置SD卡的根路径,`getFilesDir()`获取内部存储的私有目录。为了兼容不同版本和设备,可以使用`StorageManager`来获取更精确的路径。
```java
public String getInternalStoragePath() {
return Environment.getDataDirectory().toString();
}
public String getExternalStoragePath() {
StorageManager storageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE);
String extStorageState = storageManager.getVolumeState(Environment.getExternalStorageDirectory().getPath());
if (Environment.MEDIA_MOUNTED.equals(extStorageState)) {
return Environment.getExternalStorageDirectory().getPath();
} else {
// 处理SD卡未挂载的情况
return null;
}
}
```
3. 按钮交互与操作:
设计两个按钮,分别对应内置和外置SD卡的路径显示和数据写入。当用户点击按钮时,调用相应的路径获取方法,并在文本视图中显示结果。
```java
mBtIn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
result = "Internal Storage Path: " + getInternalStoragePath();
mTv.setText(result);
}
});
mBtOut.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String sdcardPath = getExternalStoragePath();
if (sdcardPath != null) {
result = "External Storage Path: " + sdcardPath;
mTv.setText(result);
tryWriteData(sdcardPath);
} else {
Toast.makeText(MainActivity.this, "SD card is not mounted", Toast.LENGTH_SHORT).show();
}
}
});
```
4. 数据写入:
使用`FileOutputStream`和`OutputStream`实例将数据写入指定路径。这里仅作示例,实际应用中需要处理可能出现的异常。
```java
private void tryWriteData(String path) {
File file = new File(path, "data.txt");
try {
OutputStream outputStream = new FileOutputStream(file);
outputStream.write("Hello, Android!".getBytes());
outputStream.close();
result += "\nData written to file: " + file.getAbsolutePath();
} catch (FileNotFoundException e) {
result += "\nError: " + e.getMessage();
} catch (IOException e) {
result += "\nError: " + e.getMessage();
}
mTv.setText(result);
}
```
5. 总结:
本文档展示了在Android应用中获取和显示内置存储和外置SD卡路径的方法,以及如何在用户点击按钮后写入数据到这些路径。开发者需要确保处理权限请求,根据设备状态正确判断SD卡路径,并妥善处理可能出现的异常,以提供稳定的数据操作体验。
2021-01-04 上传
2021-01-20 上传
2014-06-10 上传
2016-06-10 上传
2020-08-31 上传
178 浏览量
点击了解资源详情
307 浏览量
2015-04-14 上传
weixin_38544075
- 粉丝: 10
- 资源: 931
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍