Я хочу получить бесплатный размер (внутреннего и внешнего) моего устройства. У меня есть следующее хранилище на устройстве, например: Внутреннее хранилище, SD-карта, Телефон Хранение, Я могу получить внутреннюю и SD-карту памяти, но не могу получить Хранение телефона. Пожалуйста помоги.Android сколько свободного места на каждом хранилище
ответ
См. this question, вы можете получить как свободное пространство для хранения, так и свободное место на SD-карте.
EDIT: от связанного вопроса:
public long freeMemory() {
StatFs statFs = new StatFs(Environment.getDataDirectory().getAbsolutePath());
long free = (statFs.getAvailableBlocks() * statFs.getBlockSize());
return free;
}
Чтобы преобразовать в удобочитаемый формат (МБ, ГБ и т.д.) См понравившегося вопроса.
Обычно (на китайских телефонах) внутреннее хранилище разделено на две части: одна для приложений и данных приложения, а другая - как SD-карта, для фотографий, мультимедиа и т. Д. Некоторые телефоны также имеют слот для SD-карты, к которому вы также можете получить доступ.
по вашей ссылке, это не дает мне правильный ответ, который я хочу знать. –
См. Мой обновленный ответ. – JonasCz
public static long getAvailableStorage() {
File path = StorageUtils.getCacheDirectory(ApplicationController.getInstance(), true);
long blockSize = 0;
long availableBlocks = 0;
StatFs stat = new StatFs(path.getPath());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
blockSize = stat.getBlockSizeLong();
availableBlocks = stat.getAvailableBlocksLong();
} else {
blockSize = stat.getBlockSize();
availableBlocks = stat.getAvailableBlocks();
}
return availableBlocks * blockSize;
}
public static File getCacheDirectory(Context context,
boolean preferExternal) {
File appCacheDir = null;
String externalStorageState;
try {
externalStorageState = Environment.getExternalStorageState();
} catch (NullPointerException e) { // (sh)it happens (Issue #660)
externalStorageState = "";
}
if (preferExternal && MEDIA_MOUNTED.equals(externalStorageState)
&& hasExternalStoragePermission(context)) {
appCacheDir = getExternalCacheDir(context);
}
if (appCacheDir == null) {
appCacheDir = context.getCacheDir();
}
if (appCacheDir == null) {
String cacheDirPath = "/data/data/" + context.getPackageName()
+ "/"+DOWNLOAD_SUB_DIRECTORY+"/";
appCacheDir = new File(cacheDirPath);
}
return appCacheDir;
}
private static File getExternalCacheDir(Context context) {
File dataDir = new File(new File(
Environment.getExternalStorageDirectory(), "Android"), "data");
File appCacheDir = new File(
new File(dataDir, context.getPackageName()), DOWNLOAD_SUB_DIRECTORY);
if (!appCacheDir.exists()) {
if (!appCacheDir.mkdirs()) {
L.w("Unable to create external cache directory");
return null;
}
try {
new File(appCacheDir, ".nomedia").createNewFile();
} catch (IOException e) {
}
}
return appCacheDir;
}
Внутреннее хранилище - это хранилище для телефона. Также ... это даже не связано с программированием. –
На самом деле, телефонное хранилище разделено на две части: внутреннее и телефонное хранилище в моем устройстве с микромахом. –
Я предполагаю, что ваш телефон не поддерживает SD-карты ...? В этом случае ... возможно ... другое хранилище, которое вы называете «хранилищем для телефона», будет установлено как SD-карта. –