Android 媒体记录器setMaxFileSize问题

Android 媒体记录器setMaxFileSize问题,android,video,record,Android,Video,Record,录制视频时,我在尝试设置最大文件大小时遇到问题。recorder.setMaxFileSize(long filesize,以字节为单位)的文档说明了参数的长变量类型。我有一个方法返回长值的空闲空间。当我尝试将这个长变量设置为参数时,每次都会失败 自由空间法 public long freeSpace(){ StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath()); long free = (lon

录制视频时,我在尝试设置最大文件大小时遇到问题。
recorder.setMaxFileSize(long filesize,以字节为单位)
的文档说明了参数的长变量类型。我有一个方法返回长值的空闲空间。当我尝试将这个长变量设置为参数时,每次都会失败

自由空间法

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)它可以工作


我缺少什么明显的东西?

使用
getAvailableBlocks()
而不是
getBlockCount()
。看起来您得到的是SD卡的总大小,而不是可用空间。

使用
getAvailableBlocks()
而不是
getBlockCount()
。看起来您得到的是SD卡的总大小,而不是可用空间。

我找到了答案。我忘了FAT文件系统的最大文件大小为4GB。因此,如果你像现在许多用户一样使用大型卡,可能会有超过4GB的可用空间。这是一个文件系统限制


这上面还有另一个堆栈溢出的答案

我找到了答案。我忘了FAT文件系统的最大文件大小为4GB。因此,如果你像现在许多用户一样使用大型卡,可能会有超过4GB的可用空间。这是一个文件系统限制


这上面还有另一个堆栈溢出的答案

您是正确的。这将变量固定为自由空间。返回的值为29641244672,在长值范围内。它仍然失败。您可能在FAT32系统上遇到了4GB文件大小限制问题。我不知道是否有一种支持Android的好方法,但是如果你不需要比这更大的东西,试着将其设置在4GB以下,看看是否有效。我的解决方案是检查可用空间,将其与最大文件大小(4000000000)进行比较,然后发送较小的文件。你是正确的。这将变量固定为自由空间。返回的值为29641244672,在长值范围内。它仍然失败。您可能在FAT32系统上遇到了4GB文件大小限制问题。我不知道是否有一种支持Android的好方法,但是如果你不需要比这更大的东西,试着将它设置在4GB以下,看看是否有效。我的解决方案是检查可用空间,将其与最大文件大小(4000000000)进行比较,然后发送较小的文件。