2011-05-31 28 views
1

我在錄製視頻時嘗試設置最大文件大小時遇到​​問題。 recorder.setMaxFileSize(long filesize_in_bytes)的文檔說明了變量的長變量類型。我有一個方法返回long值的可用空間。當我嘗試將這個長變量設置爲參數時,它每次都會失敗。Media Recorder setMaxFileSize問題

自由空間法

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

我找到了答案。我忘記了FAT文件系統的最大文件大小爲4 GB。所以如果你現在有很多用戶使用大容量存儲卡,可能會有超過4GB的可用空間。這是一個文件系統限制。

也有這個here

1

使用getAvailableBlocks()而不是getBlockCount()。看起來你得到的是SD卡的總大小,而不是可用空間。

+0

你是正確的另一個堆棧溢出的答案。這修正了變量只是自由空間。返回的值是29641244672,這在很長的值範圍內。它仍然失敗。 – Phobos 2011-05-31 07:28:03

+1

您可能會遇到FAT32系統上的4GB文件大小限制問題。我不知道它是否有一個好的Android支持的方式,但如果你不需要比這更大的任何東西,請嘗試將它設置在4GB以下,看看它是否有效。 – Geobits 2011-05-31 07:32:17

+1

我的解決方案是檢查可用空間,將其與最大文件大小(4000000000)進行比較併發送較小者。 – Phobos 2011-05-31 07:38:47