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数据一致。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。