如何检查外部存储空间的可用性?
如何检查 SD 卡是否已满,以便您的应用程序可以决定是否可以继续执行其工作,即写入外部存储或通知用户存储空间已用完。
How do you check if the SD card is full or not so that your application can decide if it can continue to do its job i.e. write to external storage or notify the user that storage has run out of space.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
小心 StatFs &较新设备上的 int 溢出
此答案中的方法在具有大外部存储的设备上被破坏。
例如,在我的 Nexus 7 上,它当前返回约 2 GB,而实际上还剩约 10 GB 空间。
StatFs 确实有返回
long
的替换方法,getAvailableBlocksLong()
和getBlockCountLong()
,但问题是它们仅在API级别18中添加。使用这个
最简单的方法是使用
getFreeSpace java.io.File
中的 ()
,在 API 级别 9 中添加,返回long
:因此,要获得外部存储(“SD 卡”)上的可用空间:
或者,如果您确实想要使用 StatFs 但需要支持 API 级别 18,这将修复整数溢出:
Watch out with StatFs & int overflow on newer devices
The approach in this answer is broken on devices with large external storage.
For example on my Nexus 7, it currently returns ~2 GB when in reality there is ~10 GB of space left.
StatFs does have replacement methods returning
long
,getAvailableBlocksLong()
andgetBlockCountLong()
, but the problem is that they were only added in API level 18.Use this instead
Simplest way is to use
getFreeSpace()
in java.io.File, added in API level 9, which returnslong
:So, to get free space on the external storage ("SD card"):
Alternatively, if you really want to use StatFs but need to support API level < 18, this would fix the integer overflow:
使用
StatFs
并将外部存储目录的路径传递给构造函数,您可以调用getAvailableBlocks()
和getBlockSize()
等函数StatFs
对象。Use
StatFs
and pass the path of the external storage directory to the constructor and you can call functions such asgetAvailableBlocks()
andgetBlockSize()
on theStatFs
object.我认为你可以用这个陈述来解决你的问题。这无法检查SD卡的容量是否足够。
I think you can use this statement to do with your problem. this cant check whether or no enough capacity of sdcard.
以下是获取内部存储大小的方法:
以下是获取外部存储大小(SD 卡大小)的方法:
Here is how you get internal storage sizes:
Here is how you get external storage sizes (SD card size):