Android外部存储
在Android开发中,数据存储是一个非常重要的主题。Android提供了多种数据存储方式,其中外部存储是一种常见的选择。本文将详细介绍Android外部存储的概念、使用方法以及实际应用场景。
什么是Android外部存储?
Android外部存储是指设备上的存储空间,通常指的是SD卡或设备的共享存储空间。与内部存储不同,外部存储可以被用户和其他应用程序访问。外部存储通常用于存储较大的文件,如照片、视频、音乐等。
外部存储并不一定指的是物理上的SD卡。现代Android设备通常将外部存储作为设备内部存储的一部分,但仍然称为“外部存储”。
外部存储的类型
Android外部存储分为两种类型:
- 公共外部存储:所有应用程序都可以访问的存储空间,通常用于存储用户生成的媒体文件(如照片、视频、音乐等)。
- 私有外部存储:每个应用程序都有自己的私有外部存储空间,其他应用程序无法直接访问。
访问外部存储的权限
在Android中,访问外部存储需要特定的权限。从Android 6.0(API级别23)开始,访问外部存储需要动态请求权限。
权限声明
在AndroidManifest.xml
中声明以下权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
动态权限请求
在运行时,你需要动态请求这些权限:
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()
方法来访问这些文件。
示例:保存图片到公共外部存储
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()
方法来访问这些文件。
示例:保存文件到私有外部存储
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外部存储是一种重要的数据存储方式,适用于存储较大的文件或用户生成的媒体文件。通过本文,你应该已经了解了如何访问外部存储、请求权限以及在实际应用中使用外部存储。
附加资源
练习
- 编写一个Android应用,将用户输入的文本保存到私有外部存储中。
- 修改上述应用,将文本保存到公共外部存储的
Documents
目录中。 - 尝试使用
MediaStore
API在Android 10及以上设备上保存图片到公共外部存储。