包含comandroidexternalstorage的词条

## Command Android External Storage: 访问和管理外部存储 ### 简介在 Android 开发中,应用程序通常需要访问外部存储器(例如 SD 卡)来存储和检索数据,例如照片、视频和文档。 `android.os.Environment` 类和 `Storage Access Framework` 提供了用于与外部存储交互的 API。### 访问外部存储#### 1. 检查外部存储可用性在访问外部存储之前,必须检查它是否可用并且可写。可以使用以下方法检查:

`Environment.getExternalStorageState()`: 此方法返回外部存储的状态,例如 `MEDIA_MOUNTED`(已挂载且可写)、 `MEDIA_UNMOUNTED`(未挂载)等。

`Environment.getExternalStorageDirectory()`: 此方法返回外部存储的根目录。```kotlin val state = Environment.getExternalStorageState() if (Environment.MEDIA_MOUNTED == state) {// 外部存储可用val externalStorageDirectory = Environment.getExternalStorageDirectory() } else {// 外部存储不可用 } ```#### 2. 请求外部存储权限从 Android 6.0 (API 级别 23) 开始,需要在运行时请求外部存储权限。需要在 `AndroidManifest.xml` 文件中声明权限,并在代码中请求权限。

声明权限:

```xml ```

请求权限:

```kotlin // 检查是否已授予权限 if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED ) {// 请求权限ActivityCompat.requestPermissions(this,arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),REQUEST_CODE) } else {// 已授予权限 } ```#### 3. 读取和写入文件获得必要的权限后,可以使用标准 Java 文件 I/O API 读取和写入外部存储上的文件。

创建文件:

```kotlin val file = File(externalStorageDirectory, "my_file.txt") file.createNewFile() ```

写入文件:

```kotlin val outputStream = FileOutputStream(file) outputStream.write("Hello, World!".toByteArray()) outputStream.close() ```

读取文件:

```kotlin val inputStream = FileInputStream(file) val content = inputStream.bufferedReader().use { it.readText() } inputStream.close() ```### 使用 Storage Access Framework从 Android 4.4 (API 级别 19) 开始,可以使用 `Storage Access Framework` 更轻松地访问外部存储,特别是对于用户生成的内容。`Storage Access Framework` 提供了一种标准化的方式来访问存储设备上的文件和目录,而无需直接处理路径和权限。#### 1. 创建 Intent可以使用 `ACTION_OPEN_DOCUMENT` 或 `ACTION_CREATE_DOCUMENT` 操作创建一个 Intent,以允许用户选择文件或目录。```kotlin val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {// 设置要显示的文件类型type = "

/

"// 添加其他过滤器(可选)addCategory(Intent.CATEGORY_OPENABLE) }startActivityForResult(intent, REQUEST_CODE) ```#### 2. 处理结果在 `onActivityResult()` 方法中,可以获取用户选择的文件或目录的 URI。```kotlin override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {super.onActivityResult(requestCode, resultCode, data)if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {val uri = data?.data // 用户选择的文件或目录的 URI} } ```#### 3. 读取和写入文件获得文件或目录的 URI 后,可以使用 `ContentResolver` 读取和写入内容。

读取文件:

```kotlin val inputStream = contentResolver.openInputStream(uri) // 读取文件内容 ```

写入文件:

```kotlin val outputStream = contentResolver.openOutputStream(uri) // 写入文件内容 ```### 总结`android.os.Environment` 类和 `Storage Access Framework` 提供了灵活且强大的 API,用于在 Android 应用程序中访问和管理外部存储。通过理解这些 API 并遵循最佳实践,可以创建安全有效地处理外部存储的应用程序。

标签列表