Android开发进阶系列(三) 系统参数的获取和Broadcast

系统参数的获取

获取系统参数比较简单,毕竟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
                  // 其它处理过程
              }
        }   
    };  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值