我能找到的与文件存储最接近的文档是这篇文章(如果您无法访问它,请参阅下文),但它给我留下了几个问题。
我真的,真的,真的很想知道什么路径映射到这里的存储,看看我们应该如何对它们进行硬编码,以及我们应该如何精确地访问它们。一个实际的代码示例将是最高级的。我最好的猜测是:
- /sdcard-> 映射到内部 eMMC 插槽,访问受限。Environment.getExternalStorageDirectory(); ...仍然返回这个。
- /media -> 映射到内部 8GB 内存(我可以写这个)
- /数据->?
- ? -> 映射到可选的 microSD 卡
如果/sdcard 映射到受限存储,我们如何访问外部(可选的,附加的,您可以弹出的)sdcard ?
现在引用 Nook 开发者文档:
背景 目前市场上的 NOOK Color 设备有两种不同的分区方案,一种只有 250MB 可用于 /data 分区上的应用程序,另一种是 4GB 可用于 /data 分区上的应用程序。因此,必须以有效管理空间的方式设计和开发应用程序。未能这样做的申请将不被接受通过商店分发。
区域相关技术建议或解决方案如果您的应用程序需要大量数据(包括但不限于图像、音频或视频内容),您应该在运行时下载这些资源并将它们存储在设备的较大分区中。如果您的应用程序要请求和存储超过 100MB 的数据或资源,您必须遵守以下限制:
您的应用程序必须在说明中清楚明确地说明应用程序使用/交付了大量数据。您必须将您的资源和数据写入适当的分区。您可以检测设备是否有扩大的 /data 分区,如下所示:
StatFs stat = new StatFs("/data"); long bytesAvailable = (long)stat.getBlockSize() *(long)stat.getBlockCount(); long megAvailable = bytesAvailable / 1048576; if (megAvailable > 1000){ ... write your resources in /data } else { ... write your resources on /mnt/media ... }
将数据写入应用程序的 /data 上的私有空间
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_WORLD_READABLE);
您的应用程序不应假定设备上存在 sdcard,但您可以通过调用
Environment.getExternalStorageState(); 如果未找到 SD 卡,您的应用程序必须正常退出,并通知用户退出原因。
请记住,要访问 /media 分区以及 ExternalStorage,您需要在清单中声明:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"> </uses-permission>