andorid storage tatal and free
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了andorid storage tatal and free相关的知识,希望对你有一定的参考价值。
1 在Setting应用中,storage 显示total and free code:
final File path = VolumeInfo.getPath(); final long freeBytes = path.getFreeSpace(); final long totalBytes = path.getTotalSpace(); final long usedBytes = totalBytes - freeBytes; final String used = Formatter.formatFileSize(context, usedBytes); final String total = Formatter.formatFileSize(context, totalBytes);
2 VolumeInfo.java 是hidden的,只能通过反射得到。代码如下:
try { StorageManager sManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE); Class class_StorageManager = StorageManager.class; Method method_getVolumes = class_StorageManager.getMethod("getVolumes"); List<Object> volumes = (List<Object>) method_getVolumes.invoke(sManager); mClassType = Class.forName("android.os.storage.VolumeInfo"); for (Object volumeInfo : volumes) { mGetMethod = mClassType.getDeclaredMethod("getPath"); File path = (File) mGetMethod.invoke(volumeInfo); final long freeBytes = path.getFreeSpace(); final long totalBytes = path.getTotalSpace(); final long usedBytes = totalBytes - freeBytes; Log.i("cyy1","freeBytes="+Formatter.formatFileSize(context,freeBytes)); Log.i("cyy1","usedBytes="+Formatter.formatFileSize(context,usedBytes)); mGetMethod1 = mClassType.getDeclaredMethod("getId"); String id = (String) mGetMethod1.invoke(volumeInfo); Log.i("cyy1","id="+id); } }catch (Exception e){ Log.i("cyy1",e.getMessage()); e.printStackTrace(); }
得到数据: 08-18 17:28:31.087 32148-32148/ I/cyy1: freeBytes=190 MB 08-18 17:28:31.088 32148-32148/ I/cyy1: usedBytes=22.68 GB 08-18 17:28:31.088 32148-32148/ I/cyy1: id=private 08-18 17:28:31.088 32148-32148/ I/cyy1: freeBytes=9.90 MB 08-18 17:28:31.088 32148-32148 I/cyy1: usedBytes=22.84 GB 08-18 17:28:31.088 32148-32148/ I/cyy1: id=emulated
其中emulated 是external stroage的数据。而private 是data的数据 3 可以通过以下code验证: File path = Environment.getExternalStorageDirectory(); StatFs stat = new StatFs(path.getPath()); long blockSize = stat.getBlockSizeLong(); long blockCount = stat.getBlockCountLong(); long availableBlocks = stat.getAvailableBlocksLong(); long avaibByte = stat.getAvailableBytes(); Log.i("cyy","avaibByte="+Formatter.formatFileSize(context,avaibByte)); long free= stat.getFreeBytes(); Log.i("cyy","free="+Formatter.formatFileSize(context,free)); String totalSize = Formatter.formatFileSize(context, blockCount*blockSize); String availableSize = Formatter.formatFileSize(context, availableBlocks*blockSize); Environment.getExternalStorageDirectory() 跟emulated 数据一致;Environment.getDataDirectory() 和private数据一致。
以上是关于andorid storage tatal and free的主要内容,如果未能解决你的问题,请参考以下文章
Storage Types and Storage Policies
Parallel I/O and Columnar Storage
SSTable and Log Structured Storage: LevelDB
AWS CSAA -- 04 AWS Object Storage and CDN - S3 Glacier and CloudFront
AWS CSAA -- 04 AWS Object Storage and CDN - S3 Glacier and CloudFront