Android获取RAM大小,内部存储大小,外部存储大小
2016-07-19 01:31
405 查看
转载自:http://www.devnote.cn/article/238.html
package com.mob.getsdandphone;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.IOException;import java.text.DecimalFormat;import android.app.ActivityManager;import android.content.Context;import android.os.Environment;import android.os.StatFs;public class FileSizeUtil {private static final int ERROR = -1;/*** SDCARD是否存*/public static boolean externalMemoryAvailable() {return android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);}/*** 获取手机内部剩余存储空间** @return*/public static long getAvailableInternalMemorySize() {File path = Environment.getDataDirectory();StatFs stat = new StatFs(path.getPath());long blockSize = stat.getBlockSize();long availableBlocks = stat.getAvailableBlocks();return availableBlocks * blockSize;}/*** 获取手机内部总的存储空间** @return*/public static long getTotalInternalMemorySize() {File path = Environment.getDataDirectory();StatFs stat = new StatFs(path.getPath());long blockSize = stat.getBlockSize();long totalBlocks = stat.getBlockCount();return totalBlocks * blockSize;}/*** 获取SDCARD剩余存储空间** @return*/public static long getAvailableExternalMemorySize() {if (externalMemoryAvailable()) {File path = Environment.getExternalStorageDirectory();StatFs stat = new StatFs(path.getPath());long blockSize = stat.getBlockSize();long availableBlocks = stat.getAvailableBlocks();return availableBlocks * blockSize;} else {return ERROR;}}/*** 获取SDCARD总的存储空间** @return*/public static long getTotalExternalMemorySize() {if (externalMemoryAvailable()) {File path = Environment.getExternalStorageDirectory();StatFs stat = new StatFs(path.getPath());long blockSize = stat.getBlockSize();long totalBlocks = stat.getBlockCount();return totalBlocks * blockSize;} else {return ERROR;}}/*** 获取系统总内存** @param context 可传入应用程序上下文。* @return 总内存大单位为B。*/public static long getTotalMemorySize(Context context) {String dir = "/proc/meminfo";try {FileReader fr = new FileReader(dir);BufferedReader br = new BufferedReader(fr, 2048);String memoryLine = br.readLine();String subMemoryLine = memoryLine.substring(memoryLine.indexOf("MemTotal:"));br.close();return Integer.parseInt(subMemoryLine.replaceAll("\\D+", "")) * 1024l;} catch (IOException e) {e.printStackTrace();}return 0;}/*** 获取当前可用内存,返回数据以字节为单位。** @param context 可传入应用程序上下文。* @return 当前可用内存单位为B。*/public static long getAvailableMemory(Context context) {ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();am.getMemoryInfo(memoryInfo);return memoryInfo.availMem;}private static DecimalFormat fileIntegerFormat = new DecimalFormat("#0");private static DecimalFormat fileDecimalFormat = new DecimalFormat("#0.#");/*** 单位换算** @param size 单位为B* @param isInteger 是否返回取整的单位* @return 转换后的单位*/public static String formatFileSize(long size, boolean isInteger) {DecimalFormat df = isInteger ? fileIntegerFormat : fileDecimalFormat;String fileSizeString = "0M";if (size < 1024 && size > 0) {fileSizeString = df.format((double) size) + "B";} else if (size < 1024 * 1024) {fileSizeString = df.format((double) size / 1024) + "K";} else if (size < 1024 * 1024 * 1024) {fileSizeString = df.format((double) size / (1024 * 1024)) + "M";} else {fileSizeString = df.format((double) size / (1024 * 1024 * 1024)) + "G";}return fileSizeString;}}
相关文章推荐
- Android动画系列之补间动画
- android studio xposed教程(含jar下载地址)
- NanoPC-T2(S5P4418)无法通过Android usb host API识别两个以上USB设备
- android源码中使用getDirtyBounds方法的类
- android 后台运行
- NDK环境配置之Android Studio
- android 7.0带来的
- 转 android 侧滑实现
- Android NDK : 基本类型,字符串与数组
- android MVP 模式介绍与实战
- Android百度地图(二)结合方向传感器我们自己定位哪里走
- android CoordinatorLayout使用
- android 开发之画布初步探索
- Android App应用启动分析与优化
- Android五布局——线性布局LinearLayout
- Android 验证码倒计时 与 getDrawable(int) 方法过期问题
- 直接调用android原生接口实现点击直接拨打电话功能
- Android String占位符功能[笔记]
- android 显示特殊符号[笔记]
- android中sqlite数据库的基本使用和添加多张表