跳到主要内容

Android外部存储

在Android开发中,数据存储是一个非常重要的主题。Android提供了多种数据存储方式,其中外部存储是一种常见的选择。本文将详细介绍Android外部存储的概念、使用方法以及实际应用场景。

什么是Android外部存储?

Android外部存储是指设备上的存储空间,通常指的是SD卡或设备的共享存储空间。与内部存储不同,外部存储可以被用户和其他应用程序访问。外部存储通常用于存储较大的文件,如照片、视频、音乐等。

备注

外部存储并不一定指的是物理上的SD卡。现代Android设备通常将外部存储作为设备内部存储的一部分,但仍然称为“外部存储”。

外部存储的类型

Android外部存储分为两种类型:

  1. 公共外部存储:所有应用程序都可以访问的存储空间,通常用于存储用户生成的媒体文件(如照片、视频、音乐等)。
  2. 私有外部存储:每个应用程序都有自己的私有外部存储空间,其他应用程序无法直接访问。

访问外部存储的权限

在Android中,访问外部存储需要特定的权限。从Android 6.0(API级别23)开始,访问外部存储需要动态请求权限。

权限声明

AndroidManifest.xml中声明以下权限:

xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

动态权限请求

在运行时,你需要动态请求这些权限:

java
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);
}

访问公共外部存储

公共外部存储通常用于存储用户生成的媒体文件。你可以使用Environment.getExternalStoragePublicDirectory()方法来访问这些文件。

示例:保存图片到公共外部存储

java
File publicDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File imageFile = new File(publicDirectory, "my_image.jpg");

try (FileOutputStream out = new FileOutputStream(imageFile)) {
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
out.flush();
} catch (IOException e) {
e.printStackTrace();
}
警告

从Android 10(API级别29)开始,访问公共外部存储的方式发生了变化。建议使用MediaStore API来访问公共外部存储。

访问私有外部存储

每个应用程序都有自己的私有外部存储空间,其他应用程序无法直接访问。你可以使用getExternalFilesDir()方法来访问这些文件。

示例:保存文件到私有外部存储

java
File privateDirectory = getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS);
File textFile = new File(privateDirectory, "my_text.txt");

try (FileWriter writer = new FileWriter(textFile)) {
writer.write("Hello, World!");
} catch (IOException e) {
e.printStackTrace();
}

实际应用场景

场景1:保存用户生成的照片

假设你正在开发一个相机应用,用户拍摄的照片需要保存到外部存储中。你可以将这些照片保存到公共外部存储的Pictures目录中,以便用户可以在图库中查看这些照片。

场景2:备份应用数据

你可以将应用的私有数据备份到外部存储中。例如,将应用的数据库文件备份到私有外部存储中,以便在用户卸载应用后仍然可以恢复数据。

总结

Android外部存储是一种重要的数据存储方式,适用于存储较大的文件或用户生成的媒体文件。通过本文,你应该已经了解了如何访问外部存储、请求权限以及在实际应用中使用外部存储。

附加资源

练习

  1. 编写一个Android应用,将用户输入的文本保存到私有外部存储中。
  2. 修改上述应用,将文本保存到公共外部存储的Documents目录中。
  3. 尝试使用MediaStore API在Android 10及以上设备上保存图片到公共外部存储。