移动测试基础 Android 获取系统 cpu 信息,内存,版本,电量等信息

恒温 · 2014年02月22日 · 最后由 Mr Wang 回复于 2014年04月03日 · 3869 次阅读

zz from http://www.cnblogs.com/brainy/archive/2012/05/30/2526752.html
未亲自验证过。

CPU 频率,CPU 信息:/proc/cpuinfo 和/proc/stat

  • 读取文件 /proc/cpuinfo 系统 CPU 的类型等多种信息。
  • 读取文件 /proc/stat 所有 CPU 活动的信息来计算 CPU 使用率。

下面我们就来讲讲如何通过代码来获取 CPU 频率:

package com.orange.cpu;



import java.io.BufferedReader;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

import java.io.InputStream;



public class CpuManager {



        // 获取CPU最大频率(单位KHZ)

     // "/system/bin/cat" 命令行

     // "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq" 存储最大频率的文件的路径

        public static String getMaxCpuFreq() {

                String result = "";

                ProcessBuilder cmd;

                try {

                        String[] args = { "/system/bin/cat",

                                        "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq" };

                        cmd = new ProcessBuilder(args);

                        Process process = cmd.start();

                        InputStream in = process.getInputStream();

                        byte[] re = new byte[24];

                        while (in.read(re) != -1) {

                                result = result + new String(re);

                        }

                        in.close();

                } catch (IOException ex) {

                        ex.printStackTrace();

                        result = "N/A";

                }

                return result.trim();

        }



         // 获取CPU最小频率(单位KHZ)

        public static String getMinCpuFreq() {

                String result = "";

                ProcessBuilder cmd;

                try {

                        String[] args = { "/system/bin/cat",

                                        "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq" };

                        cmd = new ProcessBuilder(args);

                        Process process = cmd.start();

                        InputStream in = process.getInputStream();

                        byte[] re = new byte[24];

                        while (in.read(re) != -1) {

                                result = result + new String(re);

                        }

                        in.close();

                } catch (IOException ex) {

                        ex.printStackTrace();

                        result = "N/A";

                }

                return result.trim();

        }



         // 实时获取CPU当前频率(单位KHZ)

        public static String getCurCpuFreq() {

                String result = "N/A";

                try {

                        FileReader fr = new FileReader(

                                        "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq");

                        BufferedReader br = new BufferedReader(fr);

                        String text = br.readLine();

                        result = text.trim();

                } catch (FileNotFoundException e) {

                        e.printStackTrace();

                } catch (IOException e) {

                        e.printStackTrace();

                }

                return result;

        }



        // 获取CPU名字

        public static String getCpuName() {

                try {

                        FileReader fr = new FileReader("/proc/cpuinfo");

                        BufferedReader br = new BufferedReader(fr);

                        String text = br.readLine();

                        String[] array = text.split(":\\s+", 2);

                        for (int i = 0; i < array.length; i++) {

                        }

                        return array[1];

                } catch (FileNotFoundException e) {

                        e.printStackTrace();

                } catch (IOException e) {

                        e.printStackTrace();

                }

                return null;

        }

}

内存:/proc/meminfo

public void getTotalMemory() {  
        String str1 = "/proc/meminfo";  
        String str2="";  
        try {  
            FileReader fr = new FileReader(str1);  
            BufferedReader localBufferedReader = new BufferedReader(fr, 8192);  
            while ((str2 = localBufferedReader.readLine()) != null) {  
                Log.i(TAG, "---" + str2);  
            }  
        } catch (IOException e) {  
        }  
    }  

Rom 大小

public long[] getRomMemroy() {  
        long[] romInfo = new long[2];  
        //Total rom memory  
        romInfo[0] = getTotalInternalMemorySize();  

        //Available rom memory  
        File path = Environment.getDataDirectory();  
        StatFs stat = new StatFs(path.getPath());  
        long blockSize = stat.getBlockSize();  
        long availableBlocks = stat.getAvailableBlocks();  
        romInfo[1] = blockSize * availableBlocks;  
        getVersion();  
        return romInfo;  
    }  

    public long getTotalInternalMemorySize() {  
        File path = Environment.getDataDirectory();  
        StatFs stat = new StatFs(path.getPath());  
        long blockSize = stat.getBlockSize();  
        long totalBlocks = stat.getBlockCount();  
        return totalBlocks * blockSize;  
    }  

sdCard 大小

public long[] getSDCardMemory() {  
        long[] sdCardInfo=new long[2];  
        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;//总大小  
            sdCardInfo[1] = bSize * availBlocks;//可用大小  
        }  
        return sdCardInfo;  
    }  
   

电池电量

private BroadcastReceiver batteryReceiver=new BroadcastReceiver(){  

        @Override 
        public void onReceive(Context context, Intent intent) {  
            int level = intent.getIntExtra("level", 0);  
            //  level加%就是当前电量了  
    }  
    };  
registerReceiver(batteryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));  

系统的版本信息

public String[] getVersion(){  
    String[] version={"null","null","null","null"};  
    String str1 = "/proc/version";  
    String str2;  
    String[] arrayOfString;  
    try {  
        FileReader localFileReader = new FileReader(str1);  
        BufferedReader localBufferedReader = new BufferedReader(  
                localFileReader, 8192);  
        str2 = localBufferedReader.readLine();  
        arrayOfString = str2.split("\\s+");  
        version[0]=arrayOfString[2];//KernelVersion  
        localBufferedReader.close();  
    } catch (IOException e) {  
    }  
    version[1] = Build.VERSION.RELEASE;// firmware version  
    version[2]=Build.MODEL;//model  
    version[3]=Build.DISPLAY;//system version  
    return version;  
}  

mac 地址和开机时间

public String[] getOtherInfo(){  
    String[] other={"null","null"};  
       WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);  
       WifiInfo wifiInfo = wifiManager.getConnectionInfo();  
       if(wifiInfo.getMacAddress()!=null){  
        other[0]=wifiInfo.getMacAddress();  
    } else {  
        other[0] = "Fail";  
    }  
    other[1] = getTimes();  
       return other;  
}  
private String getTimes() {  
    long ut = SystemClock.elapsedRealtime() / 1000;  
    if (ut == 0) {  
        ut = 1;  
    }  
    int m = (int) ((ut / 60) % 60);  
    int h = (int) ((ut / 3600));  
    return h + " " + mContext.getString(R.string.info_times_hour) + m + " "  
            + mContext.getString(R.string.info_times_minute);  
}  
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 2 条回复 时间 点赞

在哪里看到过这篇文章

通过 ddmlib 获取也可以,代码也容易维护,升级。我基于 ddmlib 本想封装一下,可发现原生的也不那么难用...
https://github.com/cosysoft/device

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册