我在尝试录制视频时设置最大文件大小时遇到问题。 recorder.setMaxFileSize(long filesize_in_bytes)
的文档说明了参数的长变量类型。我有一个方法,返回长值的可用空间。当我尝试将这个long变量设置为参数时,它每次都会失败。
自由空间方法
public long freeSpace(){
StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
long free = (long)stat.getBlockSize() *(long)stat.getBlockCount();
Log.w("FREESPACE METHOD", "Free space on SD card: "+free);
return free;
}
摘录媒体记录器方法
long spaceFree = freeSpace();
recorder.setblahblah
recorder.setMaxFileSize(spaceFree); //Fails right here.
logcat的
05-31 00:30:28.201: ERROR/AndroidRuntime(17697): Caused by: java.lang.RuntimeException: setMaxFileSize failed.
但是,如果这样做recorder.setMaxFileSize(5000000L);
就行了。
我遗失了哪些明显的东西?
答案 0 :(得分:1)
使用getAvailableBlocks()
代替getBlockCount()
。看起来你得到的是SD卡的总大小,而不是可用空间。
答案 1 :(得分:0)
我找到了答案。我忘了FAT文件系统的最大文件大小为4 GB。因此,如果您像现在这么多用户那样使用大卡,则可能有超过4GB的可用空间。这是文件系统限制。
此here
还有另一个堆栈溢出答案