Jak uzyskać Rozmiar zewnętrznej karty pamięci sd (z zamontowaną kartą SD)?
Link: pracowałem na podstawie tego linku
Dodałem tę linię, aby znaleźć Rozmiar (zarówno wewnętrzny, jak i zewnętrzny) Rozmiar,
return availableExternalMemorySize/(1024*1024);
Testowałem w moim tablecie. Dostaję zarówno wewnętrzny, jak i zewnętrzny rozmiar karty SD,
W Pamięci Wewnętrznej:
- Pamięć Całkowita --1007
- Dostępna Pamięć --683
W Pamięci Zewnętrznej:
- Pamięć Całkowita -- 1763
- Dostępna Pamięć -- 1554
Ale w tablecie widziałem ustawienia. Zewnętrzny Rozmiar pamięci ma 8 GB. Ale pokazuje mi 1.7 GB, kiedy testowałem programowo.
Jaka jest procedura znalezienia zewnętrznego rozmiaru pamięci?
4 answers
Aby uzyskać dostęp do "wolnego" miejsca na zewnętrznej karcie SD, aby wyświetlić numer zgodny z Menu - > Ustawienia - >numer karty SD i pamięci telefonu, użyj następującego kodu:
StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
double sdAvailSize = (double)stat.getAvailableBlocks()
* (double)stat.getBlockSize();
//One binary gigabyte equals 1,073,741,824 bytes.
double gigaAvailable = sdAvailSize / 1073741824;
Oto jak uzyskać rozmiary pamięci wewnętrznej:
StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath());
long blockSize = statFs.getBlockSize();
long totalSize = statFs.getBlockCount()*blockSize;
long availableSize = statFs.getAvailableBlocks()*blockSize;
long freeSize = statFs.getFreeBlocks()*blockSize;
Oto jak można uzyskać rozmiary pamięci zewnętrznej (rozmiar karty SD):
StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath());
long blockSize = statFs.getBlockSize();
long totalSize = statFs.getBlockCount()*blockSize;
long availableSize = statFs.getAvailableBlocks()*blockSize;
long freeSize = statFs.getFreeBlocks()*blockSize;
krótka notka
Wolne bloki:
Całkowita liczba bloków, które są darmowy w systemie plików, w tym zarezerwowane bloki (które nie są dostępne dla normalnych aplikacji).
Dostępne bloki:
Liczba bloków, które są wolne na system plików i Dostępny dla aplikacje.
Oto jak wykryć, czy karta SD jest zamontowana:
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state))
{
// We can read and write the media
}
else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state))
{
// We can only read the media
}
else
{
// No external media
}
Odpowiednia dokumentacja: http://developer.android.com/reference/android/os/StatFs.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-30 11:40:31
Możesz użyć getTotalSpace ()
, getFreeSpace ()
lub getUsableSpace ()
https://developer.android.com/reference/java/io/File.html
import java.io.File;
import android.util.Log;
....
File f = getMyFile();
Log.d("MyApp", f.getTotalSpace()+"");
....
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-17 12:42:52
Aby wyjaśnić deprecjację i dostępność krzyżową, stworzyłem te metody.
public static long sdCardFree_bytes() {
File path = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getPath());
long free_memory = 0; //return value is in bytes
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
free_memory = stat.getAvailableBlocksLong() * stat.getBlockSizeLong();
} else {
free_memory = stat.getAvailableBlocks() * stat.getBlockSize();
}
return free_memory;
}
public static long sdCardUsed_bytes() {
File path = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getPath());
long free_memory = 0;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
free_memory = (stat.getBlockCountLong() - stat.getAvailableBlocksLong()) * stat.getBlockSizeLong(); //return value is in bytes
} else {
free_memory = (stat.getBlockCount() - stat.getAvailableBlocks()) * stat.getBlockSize(); //return value is in bytes
}
return free_memory;
}
public static long sdCardTotal_bytes() {
File path = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getPath());
long free_memory = 0;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
free_memory = stat.getBlockCountLong() * stat.getBlockSizeLong(); //return value is in bytes
} else {
free_memory = stat.getBlockCount() * stat.getBlockSize(); //return value is in bytes
}
return free_memory;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-30 15:09:12
Use the
following code
it may
help
public void getInternalmemorySize() {
StatFs stat_fs = new StatFs(Environment.getExternalStorageDirectory().getPath());
double avail_sd_space = (double) stat_fs.getAvailableBlocksLong() * (double) stat_fs.getBlockSizeLong();
double GB_Available = (avail_sd_space / 1073741824);
double GBTotal = ((double) stat_fs.getBlockCountLong() * (double) stat_fs.getBlockSizeLong()) / 1073741824;
SDCardCheck();
Log.e("Memory", "Available MB Internal: " + GB_Available + "---" + GBTotal);
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
static String getExternalSdCardSize() {
File storage = new File("/storage");
String external_storage_path = "";
String size = "";
if (storage.exists()) {
File[] files = storage.listFiles();
for (File file : files) {
if (file.exists()) {
try {
if (Environment.isExternalStorageRemovable(file)) {
// storage is removable
external_storage_path = file.getAbsolutePath();
break;
}
} catch (Exception e) {
e.printStackTrace();
Log.e("TAG", e.toString());
}
}
}
}
if (!external_storage_path.isEmpty()) {
File external_storage = new File(external_storage_path);
if (external_storage.exists()) {
size = totalSize(external_storage);
}
}
return size;
}
private static String totalSize(File file) {
StatFs stat = new StatFs(file.getPath());
long blockSize, totalBlocks;
long avaiblockSize, availableBlocks;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
blockSize = stat.getBlockSizeLong();
totalBlocks = stat.getBlockCountLong();
avaiblockSize = stat.getAvailableBlocksLong();
availableBlocks = stat.getBlockSizeLong();
} else {
blockSize = stat.getBlockSize();
totalBlocks = stat.getBlockCount();
avaiblockSize = stat.getAvailableBlocks();
availableBlocks = stat.getBlockSize();
}
Log.e("Memory", "Memory--external--" + (double) (blockSize * totalBlocks) / 1073741824 + "---" + (double) (avaiblockSize * availableBlocks) / 1073741824);
return formatSize(totalBlocks * blockSize);
}
private static String formatSize(long size) {
String suffix = null;
if (size >= 1024) {
suffix = "KB";
size /= 1024;
if (size >= 1024) {
suffix = "MB";
size /= 1024;
}
}
size = size / 1024;
StringBuilder resultBuilder = new StringBuilder(Long.toString(size));
int commaOffset = resultBuilder.length() - 3;
while (commaOffset > 0) {
resultBuilder.insert(commaOffset, ',');
commaOffset -= 3;
}
if (suffix != null)
resultBuilder.append(suffix);
return resultBuilder.toString();
}
Ther is
some calculation
behalf of
these Methods.
StructStatVfs[
f_bavail=81523,
f_bfree=81523,
f_blocks=242304,
f_bsize=32768,
f_favail=0,
f_ffree=0,
f_files=0,
f_flag=1038,
f_frsize=32768,
f_fsid=0,
f_namemax=1530
]
StructStatVfs[
f_bavail=1633375,
f_bfree=1641567,
f_blocks=3134770,
f_bsize=4096,
f_favail=767939,
f_ffree=767939,
f_files=804672,
f_flag=1038,
f_frsize=4096,
f_fsid=0,
f_namemax=255
]
Internal-
3134770*4096/1024*1024*1024=11.957.10 1633375*4096/1024*1024*1024=6.23
External-
81523*32768/1024*1024*1024=2.487 242304*32768/1024*1024*1024=7.39
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-26 08:04:55