前言
最近应公司需求,需要针对市场上具有虚假内存的辨别,获取到真实的可用内存空间,但是获取真实的内存空间需要获取到libcore.io.StructStatVfs这个Api,问题是:这个Api是隐藏并且是私有的,里面的函数无法通过直接来获取,对于这个需要使用到Android反射机制处理。不多说,看代码。
代码
// 判断是否有Sdcard
if (!Environment.MEDIA_MOUNTED.equals(Environment
.getExternalStorageState())) return ;
// 获取Sdcard下的可用空间
File path = Environment.getExternalStorageDirectory();
StatFs sf = new StatFs(path.getPath());
long blockSize = sf.getBlockSize();
long freeBlocks = sf.getAvailableBlocks();
Log.d(TAG, "<span style="font-family: Arial, Helvetica, sans-serif;">statF </span>size " + freeBlocks * blockSize);// 这种方式获取的值是会是虚假的内存
try {
Field mStatClass = StatFs.class.getDeclaredField("mSt