安卓学习笔记获取手机内存与SD卡路径及大小
来源:互联网 发布:第三方抽奖软件 编辑:程序博客网 时间:2024/06/08 17:44
实现原理
- 通过反射,调用StorageManger被隐藏接口getVolumePaths(),来获得手机的存储路径,进而通过StatFs获取区块blockCount与blockSize的大小,以计算出内存值
- 在使用getBlockCountLong(),getBlockSizeLong(),getAvailableBlocks()时要注意api>=18;
方法代码
/** * 获取ROM总大小 * @param context * @return */ public static String getMaxRomSpace(Context context) { StatFs fs = new StatFs(getInnerSDCardPath(context)); String romSpace; if (Build.VERSION.SDK_INT >=18) { long blockCount = fs.getBlockCountLong(); long bloackSize = fs.getBlockSizeLong(); long totalSpace = bloackSize*blockCount; romSpace = Formatter.formatFileSize(context, totalSpace); }else{ long blockCount = fs.getBlockCount(); long bloackSize = fs.getBlockSize(); long totalSpace = bloackSize*blockCount; romSpace = Formatter.formatFileSize(context, totalSpace); } return romSpace; }
/** * 获取SD卡总大小 * @param context * @return */ public static String getMaxSDSpace(Context context) { String extPath = getExtSDCardPath(context); if (TextUtils.isEmpty(extPath)) { Toast.makeText(context, "无SD卡", 0).show(); return null; } File path = new File(extPath); StatFs fs = new StatFs(path.getPath()); String sdSpace; if (Build.VERSION.SDK_INT >=18) { long blockCount = fs.getBlockCountLong(); long bloackSize = fs.getBlockSizeLong(); long totalSpace = bloackSize*blockCount; sdSpace = Formatter.formatFileSize(context, totalSpace); }else{ long blockCount = fs.getBlockCount(); long bloackSize = fs.getBlockSize(); long totalSpace = bloackSize*blockCount; sdSpace = Formatter.formatFileSize(context, totalSpace); } return sdSpace; }
/** * 获取rom可用大 * 小 * @param context * @return */ public static String getAvailableRomSpace(Context context) { File path = Environment.getDataDirectory(); StatFs fs = new StatFs(path.getPath()); String Space = null ; if (Build.VERSION.SDK_INT >=18) { long blockCount = fs.getAvailableBlocksLong(); long bloackSize = fs.getBlockSizeLong(); long totalSpace = bloackSize*blockCount; Space = Formatter.formatFileSize(context, totalSpace); }else{ long blockCount = fs.getAvailableBlocks(); long bloackSize = fs.getBlockSize(); long totalSpace = bloackSize*blockCount; Space = Formatter.formatFileSize(context, totalSpace); } return Space; }
/** * 获取SD卡可用大小 * @param context * @return */ public static String getAvailableSdSpace(Context context) { String extPath = getExtSDCardPath(context); if (TextUtils.isEmpty(extPath)) { Toast.makeText(context, "无SD卡", 0).show(); return null; } File path = new File(extPath); StatFs fs = new StatFs(path.getPath()); String Space; if (Build.VERSION.SDK_INT >=18) { long blockCount = fs.getAvailableBlocksLong(); long bloackSize = fs.getBlockSizeLong(); long totalSpace = bloackSize*blockCount; Space = Formatter.formatFileSize(context, totalSpace); }else{ long blockCount = fs.getAvailableBlocks(); long bloackSize = fs.getBlockSize(); long totalSpace = bloackSize*blockCount; Space = Formatter.formatFileSize(context, totalSpace); } return Space; }
/** * 获取外置SD卡路径 * @return 应该就一条记录或空 */ public static String getExtSDCardPath(Context context){ StorageManager sm = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE); try { getPathsMethod = sm.getClass().getMethod("getVolumePaths", null); String[] path = (String[]) getPathsMethod.invoke(sm, null); return path[1]; } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } return null; }
/** * 获取内置内存路径 * @return 应该就一条记录或空 */ public static String getInnerSDCardPath(Context context){ StorageManager sm = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE); try { getPathsMethod = sm.getClass().getMethod("getVolumePaths", null); String[] path = (String[]) getPathsMethod.invoke(sm, null); return path[0]; } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } return null; }
0 0
- 安卓学习笔记获取手机内存与SD卡路径及大小
- android 获取手机内存及SD卡内存可用空间
- 获取安卓手机设备信息(cpu,手机内存,SD卡,运行内存,mac和开机时间)
- Android手机如何获取手机内存路径和sd卡路径
- Android获取SD卡路径及SDCard内存的方法
- 获取手机C盘路径,获取手机SD卡路径
- 将文件保存到内存、SD以及获取手机内部存储与外部存储空间的大小
- 获取SD卡和手机内存空间大小
- 获取Android手机SD卡容量大小
- android学习笔记之——获取SD卡及手机ROM容量
- android学习笔记之——获取SD卡及手机ROM容量
- 获取安卓设备外置SD路径
- android 手机获取外置SD卡路径
- 获取手机外置sd卡路径
- 安卓学习笔记之获取安卓手机联系人
- Android_获取手机上SD卡和内存中的可用空间的大小
- 如何获取手机sd可用空间大小和手机内存可用空间大小
- 判断SD卡是否存在及获取手机与SD卡总容量和剩余容量
- Error running app: Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled.
- [LintCode] 前序遍历和中序遍历树构造二叉树 Construct Binary Tree from Preorder and Inorder Traversal
- AngularJS最理想开发工具WebStorm
- 制作图片数字 [代码清单10-3]
- leetcode_088 Merge Sorted Array
- 安卓学习笔记获取手机内存与SD卡路径及大小
- 用隐藏域判断页面是否第一次登陆
- 使用 udev 高效、动态地管理 Linux 设备文件
- C 语言static
- Maven配置+eclipse创建Maven项目
- CSDN 开始支持 markdown,好事!最新动态已同步到CSDN博客
- centos虚拟机网络配置
- maven菜单中update project
- 回归博客