您的位置:首页 > 移动开发 > Android开发

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专题 *
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: