2017-02-17 14 views
0

Я работаю над файловым менеджером Android. поэтому на основной деятельности я хочу показать все доступные типы хранения, такие как внутреннее хранилище и внешняя SD-карта.получить внутреннюю и внешнюю информацию о хранении информации android

так я использовал этот код,

public static boolean externalMemoryAvailable() { 
    return android.os.Environment.getExternalStorageState().equals(
      android.os.Environment.MEDIA_MOUNTED); 
} 

public static long getAvailableInternalMemorySize() { 
    File path = Environment.getDataDirectory(); 
    StatFs stat = new StatFs(path.getPath()); 
    long blockSize = stat.getBlockSize(); 
    long availableBlocks = stat.getAvailableBlocks(); 
    return availableBlocks * blockSize; 
} 

public static long getTotalInternalMemorySize() { 
    File path = Environment.getDataDirectory(); 
    StatFs stat = new StatFs(path.getPath()); 
    long blockSize = stat.getBlockSize(); 
    long totalBlocks = stat.getBlockCount(); 
    return totalBlocks * blockSize; 
} 

public static long getAvailableExternalMemorySize() { 
    if (externalMemoryAvailable()) { 
     File path = Environment.getExternalStorageDirectory(); 

     StatFs stat = new StatFs(path.getPath()); 
     long blockSize = stat.getBlockSize(); 
     long availableBlocks = stat.getAvailableBlocks(); 
     return availableBlocks * blockSize; 
    } else { 
     return 0; 
    } 
} 

public static long getTotalExternalMemorySize() { 
    if (externalMemoryAvailable()) { 
     File path = Environment.getExternalStorageDirectory(); 
     StatFs stat = new StatFs(path.getPath()); 
     long blockSize = stat.getBlockSize(); 
     long totalBlocks = stat.getBlockCount(); 
     return totalBlocks * blockSize; 
    } else { 
     return 0; 
    } 
} 

но проблема в том, его дает мне такое же выходы памяти для внутреннего и внешнего хранения .. фактически его подачи правильного ответа для внутреннего хранения. но неправильно для внешней SD-карты.

Я думаю, что я ошибаюсь, чтобы получить путь к внешней SD-карте. любая помощь? плз.

+0

'но неправильно для внешней сд card'. В самом деле. В коде нет ничего, что относится к внешней SD-карте. – greenapps

+0

'его дает мне одинаковые выходы памяти как для внутреннего, так и для внешнего хранилища..'. Интересно. Подтверждено! – greenapps

ответ

1

Да путь сд расположение карты отличается для разных марок Android и не может быть гарантирована. У меня есть решение, но это работает с minSdkVersion 19.

static File dirs[]; 
dirs = ContextCompat.getExternalFilesDirs(context, null); 
//dirs[0] refers to internal memory and dirs[1] gives you external. Call the following methods to get total and available memory details. 


public static String getTotalExternalMemorySize(File dirs[]) { 
if (dirs.length > 1) { 
     StatFs stat = new StatFs(dirs[1].getPath()); 
     long blockSize = stat.getBlockSizeLong(); 
     long totalBlocks = stat.getBlockCountLong(); 
     return readableFileSize(totalBlocks * blockSize); 
    } else { 
     return "NA"; 
} 

public static String getAvailableExternalMemorySize(File[] dirs) { 
    if (dirs.length > 1) { 
     StatFs stat = new StatFs(dirs[1].getPath()); 
     long blockSize = stat.getBlockSizeLong(); 
     long availableBlocks = stat.getAvailableBlocksLong(); 
     return readableFileSize(availableBlocks * blockSize); 
    } else { 
     return "NA"; 
    } 
} 

public static String readableFileSize(long size) { 
    if(size <= 0) return "0"; 
    final String[] units = new String[] { "B", "kB", "MB", "GB", "TB" }; 
    int digitGroups = (int) (Math.log10(size)/Math.log10(1024)); 
    return new DecimalFormat("#,##0.##").format(size/Math.pow(1024, digitGroups)) + " " + units[digitGroups]; 
} 
+0

thanx @pavan. но скажите, пожалуйста, как я могу обнаружить другое хранилище usb. означает, что если телефон подключил USB-накопитель с otg. то как я могу его обнаружить здесь? –

+0

означает, что, если на телефоне вставлена ​​SD-карта, а также подключен pendrive? –

+0

Пробовал ли вы прокручивать массив dirs [], чтобы проверить, вернули ли все внешние крепления? В соответствии с документацией ** метод getExternalFilesDirs (context, type) ** делает следующее: ** Возвращает абсолютные пути к каталогам конкретных приложений на всех внешних устройствах хранения, где приложение может размещать постоянные файлы, которыми он владеет ** – Pavan

 Смежные вопросы

  • Нет связанных вопросов^_^