如题   我原本用这段代码获取的public static long[] readSpaceInfo(){
long[] array = new long[2];
StatFs sf = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath());
int blockSize = sf.getBlockSize();
long total = sf.getBlockCount()*blockSize;
array[0] = total;
long available = sf.getAvailableBlocks()*blockSize;
array[1] = available;
return array;
}
该如何解决发现这段代码在android4.2.2系统上获取到的数据是错误的   我的手机是nexus4   标准的官方系统
请问这个Androidsdcard

解决方案 »

  1.   


    private static long getMemoryLength() {
            long result = 0;
            String state = Environment.getExternalStorageState();
            if (Environment.MEDIA_MOUNTED.equals(state)) {
                File path = Environment.getExternalStorageDirectory();
                StatFs stat = new StatFs(path.getPath());
                long blockSize = stat.getBlockSize();
                long availableBlocks = stat.getAvailableBlocks();
                result = availableBlocks * blockSize;
            }
            return result;
        }
    这是我写的方法,基本上和你一样,在4.2的版本没有问题,剩余存储量显示正常。
    4.22没有试过。
    这个long的值是返回总的字节数。如果要获得kb mb gb 要做换算
      

  2.   


    貌似支持sdcard扩展的设备都没问题  如果是不支持扩展只有内部存储卡就会出问题    你建个4.2.2没有外部sdcard的模拟器试试看
      

  3.   


    最终我决定用命令行    可以正确得出结果  用df命令如果代码中不准确,一些存储check怎么做啊。