为了账号安全,请及时绑定邮箱和手机立即绑定

在内部存储器上获取可用空间

/ 猿问

在内部存储器上获取可用空间

桃花长相依 2019-12-27 10:09:05

是否可以通过Android SDK获得Android设备(而不是SD CARD)上的可用内存量?

如果是这样,怎么办?


查看完整描述

3 回答

?
弑天下

还检查此线程。这里有很多信息。


google一下,这是解决方案(位于android git)


File path = Environment.getDataDirectory();

StatFs stat = new StatFs(path.getPath());

long blockSize = stat.getBlockSize();

long availableBlocks = stat.getAvailableBlocks();

return Formatter.formatFileSize(this, availableBlocks * blockSize);


查看完整回答
反对 回复 2019-12-27
?
ABOUTYOU

/*************************************************************************************************

Returns size in bytes.


If you need calculate external memory, change this: 

    StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath());

to this: 

    StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath());        

**************************************************************************************************/

    public long TotalMemory()

    {

        StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath());   

        long   Total  = ( (long) statFs.getBlockCount() * (long) statFs.getBlockSize());

        return Total;

    }


    public long FreeMemory()

    {

        StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath());

        long   Free   = (statFs.getAvailableBlocks() * (long) statFs.getBlockSize());

        return Free;

    }


    public long BusyMemory()

    {

        StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath());   

        long   Total  = ((long) statFs.getBlockCount() * (long) statFs.getBlockSize());

        long   Free   = (statFs.getAvailableBlocks()   * (long) statFs.getBlockSize());

        long   Busy   = Total - Free;

        return Busy;

    }

将字节转换为人类可读的格式(例如1 Mb,1 Gb)


    public static String floatForm (double d)

    {

       return new DecimalFormat("#.##").format(d);

    }



    public static String bytesToHuman (long size)

    {

        long Kb = 1  * 1024;

        long Mb = Kb * 1024;

        long Gb = Mb * 1024;

        long Tb = Gb * 1024;

        long Pb = Tb * 1024;

        long Eb = Pb * 1024;


        if (size <  Kb)                 return floatForm(        size     ) + " byte";

        if (size >= Kb && size < Mb)    return floatForm((double)size / Kb) + " Kb";

        if (size >= Mb && size < Gb)    return floatForm((double)size / Mb) + " Mb";

        if (size >= Gb && size < Tb)    return floatForm((double)size / Gb) + " Gb";

        if (size >= Tb && size < Pb)    return floatForm((double)size / Tb) + " Tb";

        if (size >= Pb && size < Eb)    return floatForm((double)size / Pb) + " Pb";

        if (size >= Eb)                 return floatForm((double)size / Eb) + " Eb";


        return "???";

    }


查看完整回答
反对 回复 2019-12-27
?
一只名叫tom的猫

看起来StatFs该类可能是您需要使用的类。我不确定将哪个路径视为设备的根目录,但是我相信无论目录如何,只要它是内部存储的一部分,结果都是相同的。这样的事情可能会起作用:


StatFs stats = new StatFs("/data");

int availableBlocks = stats.getAvailableBlocks();

int blockSizeInBytes = stats.getBlockSize();

int freeSpaceInBytes = availableBlocks * blockSizeInBytes;

如果没有其他问题,StatFs类应该为您提供一个良好的起点。


查看完整回答
反对 回复 2019-12-27

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信