使用外部存储
外部存储是另一种类型的存储,我们可以使用它来将文件保存到用户的设备。它与内部存储有一些关键的区别,即:
- 它并不总是可用。在可移动介质(SD 卡)的情况下,用户可以简单地移除存储器。
- 它不是私人的。用户(和其他应用程序)可以访问这些文件。
- 如果用户卸载了应用程序,则将删除使用
getExternalFilesDir()
检索的目录中保存的文件。
要使用外部存储,我们需要首先获得适当的权限。你需要使用:
要授予这些权限,你需要在 AndroidManifest.xml
中识别它们
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
注意: 如果你使用的是 API 级别 23 或更高版本,则它们是危险权限 ,因此你需要在运行时请求权限 。 **** ****
在尝试从外部存储写入或读取之前,应始终检查存储介质是否可用。
String state = Environment.getExternalStorageState();
if (state.equals(Environment.MEDIA_MOUNTED)) {
// Available to read and write
}
if (state.equals(Environment.MEDIA_MOUNTED) ||
state.equals(Environment.MEDIA_MOUNTED_READ_ONLY)) {
// Available to at least read
}
将文件写入外部存储时,应确定是将文件识别为公共还是私有。虽然用户和设备上的其他应用程序仍然可以访问这两种类型的文件,但它们之间存在重要区别。
当用户卸载应用程序时,公共文件应保留在设备上。应保存为 Public 的文件示例是通过你的应用程序获取的照片。
当用户卸载应用程序时,应删除所有私人文件。这些类型的文件将是特定于应用程序的,并且对用户或其他应用程序无用。防爆。你的应用程序下载/使用的临时文件。
以下是如何访问公共文件和私有文件的 Documents
目录。
上市
// Access your app's directory in the device's Public documents directory
File docs = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DOCUMENTS), "YourAppDirectory");
// Make the directory if it does not yet exist
myDocs.mkdirs();
私人的
// Access your app's Private documents directory
File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS),
"YourAppDirectory");
// Make the directory if it does not yet exist
myDocs.mkdirs();