Android开发进阶系列(三) 系统参数的获取和Broadcast
2015-11-23 15:48
603 查看
系统参数的获取
获取系统参数比较简单,毕竟Android系统的底层从Linux来的,一看就明白了。public class SystemInfo { private final static String FILE_CPU = "/proc/cpuinfo"; private final static String FILE_VERSION = "/proc/version"; private final static String FILE_MEMORY = "/proc/meminfo"; public String mManufacture; public String mModel; public String mCPU; public String mFirmwareVersion; public String mBuildID; public String mBattery; public String mMemTotal; //public String mMemFree; public String mInternalStorageTotal; public String mInternalStorageFree; public String mSDTotal; public String mSDFree; public void GetSystemInfo() { mManufacture = Build.MANUFACTURER; mFirmwareVersion = Build.VERSION.RELEASE; mModel = Build.MODEL; mBuildID = Build.DISPLAY; mCPU = GetCPU(); mMemTotal = GetMem(); mInternalStorageTotal = String.valueOf((float)getTotalInternalStorageSize()/1024/1024) + "M"; mInternalStorageFree = String.valueOf((float)getAvailableInternalStorageSize()/1024/1024) + "M"; mSDTotal = String.valueOf((float)getTotalSDCardSize()/1024/1024/1024) + "G"; mSDFree = String.valueOf((float)getAvailableSDCardSize()/1024/1024/1024) + "G"; } public static String GetCPU() { String strTmp=""; String cpuInfo=""; String[] arrayOfString; try { FileReader fr = new FileReader(FILE_CPU); BufferedReader localBufferedReader = new BufferedReader(fr, 8192); strTmp = localBufferedReader.readLine(); arrayOfString = strTmp.split("\\s+"); for (int i = 2; i < arrayOfString.length; i++) { cpuInfo = cpuInfo + arrayOfString[i] + " "; } localBufferedReader.close(); } catch (IOException e) { } return cpuInfo; } public static String GetMem() { String strTmp=""; String meminfo=""; String[] arrayOfString; try { FileReader fileReader = new FileReader(FILE_MEMORY); BufferedReader localBufferedReader = new BufferedReader(fileReader, 8192); while ((strTmp = localBufferedReader.readLine()) != null) { arrayOfString = strTmp.split("\\s+"); if (arrayOfString.length == 3) { if (arrayOfString[0].equals("MemTotal:")) meminfo = String.valueOf((float)Integer.parseInt(arrayOfString[1])/1024) + "M"; //else if (arrayOfString[0].equals("MemFree:")) //meminfo[1] = arrayOfString[1]; } } localBufferedReader.close(); } catch (IOException e) { } return meminfo; } // 内部存储卡总量 public long getTotalInternalStorageSize() { long romSize = 0; File path = Environment.getDataDirectory(); StatFs stat = new StatFs(path.getPath()); long blockSize = stat.getBlockSize(); long totalBlocks = stat.getBlockCount(); romSize = totalBlocks * blockSize; // Log.d("ysm", "block大小:" + blockSize + ",block数目:" + totalBlocks + // ",总大小:" + blockSize * totalBlocks / 1024 + "KB"); return romSize; } // 内部存储卡剩余 public long getAvailableInternalStorageSize() { long romSize = 0; File path = Environment.getDataDirectory(); StatFs stat = new StatFs(path.getPath()); long blockSize = stat.getBlockSize(); long availableBlocks = stat.getAvailableBlocks(); romSize = blockSize * availableBlocks; // Log.d("ysm", "block大小:" + blockSize + ",block数目:" + availableBlocks + // ",总大小:" + blockSize * availableBlocks / 1024 + "KB"); return romSize; } // 获取SD卡总容量大小 public long getTotalSDCardSize() { long size = 0; String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { File sdcardDir = Environment.getExternalStorageDirectory(); StatFs sf = new StatFs(sdcardDir.getPath()); long bSize = sf.getBlockSize(); long bCount = sf.getBlockCount(); // long availBlocks = sf.getAvailableBlocks(); size = bSize * bCount;// 总大小 // sdCardInfo[1] = bSize * availBlocks;//可用大小 } return size; } // 获取SD卡可用空间大小 public long getAvailableSDCardSize() { long size = 0; String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { File sdcardDir = Environment.getExternalStorageDirectory(); StatFs sf = new StatFs(sdcardDir.getPath()); long bSize = sf.getBlockSize(); // long bCount = sf.getBlockCount(); long availBlocks = sf.getAvailableBlocks(); // sdCardInfo[0] = bSize * bCount;//总大小 size = bSize * availBlocks;// 可用大小 } return size; } }
WiFi状态的获取 - Broadcast
WiFi连接的状态和信号强度是频繁变化的,这就要用到接收广播消息。首先注册监听哪些广播:
// 广播消息监听:Wifi变化 registerReceiver(mStatusReceiver, new IntentFilter(WifiManager.RSSI_CHANGED_ACTION)); registerReceiver(mStatusReceiver, new IntentFilter(WifiManager.NETWORK_STATE_CHANGED_ACTION)); registerReceiver(mStatusReceiver, new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION));
接收广播:
// 接收广播消息 private BroadcastReceiver mStatusReceiver =new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); if(action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION) || action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION) || action.equals(WifiManager.RSSI_CHANGED_ACTION)) { wifiRSSI = wm.getConnectionInfo().getRssi();// Strength // 其它处理过程 } } };
* Android开发进阶系列(一) 序言 *
* Android开发进阶系列(二) Tab页界面布局 *
* Android开发进阶系列(三) 系统参数的获取和Broadcast *
* Android开发进阶系列(四) 左移拉出Menu菜单界面布局 *
* Android开发进阶系列(五) 连接服务器更新APK或下载资源文件 *
* Android开发进阶系列(六) ListView的基本用法 *
* Android开发进阶系列(七) 使用数据库 *
* Android开发进阶系列(八) 界面美化之自定义弹出框 *
* Android开发进阶系列(九) AChartEngine专题 *
相关文章推荐
- Android 使用存放在存assets文件夹下的SQLite数据库
- Android Studio 快捷键
- Android libs中jar源码查看
- Android ListView+ScrollView显示和触摸冲突解决
- 获取android系统的一些功能
- Android高效加载大图、多图解决方案_LruCache,有效避免程序OOM
- android 获取屏幕的宽和高
- Android编程之菜单的实现方法实例详解
- Android中Bitmap和Drawable详解
- 【Android笔记】各个屏幕的logo尺寸要求
- Android学习----发行版本
- android 下拉菜单Spinner
- Android 实现可视化动态音频柱状图
- Android 实时录音和回放,边录音边播放 (KTV回音效果)
- Android Java和JavaScript交互
- 39.Android BroadcastReceiver
- android studio打包apk两个bug解决办法
- android GridView
- Android中实现不同文字颜色和图文混排的Span总结
- Android项目的启动一般过程,Activity的启动(加载)模式