使用外部存储

外部存储是另一种类型的存储,我们可以使用它来将文件保存到用户的设备。它与内部存储有一些关键的区别,即:

  • 它并不总是可用。在可移动介质(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();