zoukankan      html  css  js  c++  java
  • Android获取系统cpu信息,内存,版本,电量等信息

    本文转自:http://www.cnblogs.com/brainy/archive/2012/05/30/2526752.html

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

    通过读取文件/proc/cpuinfo系统CPU的类型等多种信息。

    读取/proc/stat 所有CPU活动的信息来计算CPU使用率

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

    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;
        }
        
        //CPU个数
        public static int getNumCores() {
            //Private Class to display only CPU devices in the directory listing
            class CpuFilter implements FileFilter {
                @Override
                public boolean accept(File pathname) {
                    //Check if filename is "cpu", followed by a single digit number
                    if(Pattern.matches("cpu[0-9]", pathname.getName())) {
                        return true;
                    }
                    return false;
                }      
            }
    
            try {
                //Get directory containing CPU info
                File dir = new File("/sys/devices/system/cpu/");
                //Filter to only list the devices we care about
                File[] files = dir.listFiles(new CpuFilter());
    //            Log.d(TAG, "CPU Count: "+files.length);
                //Return the number of cores (virtual CPU devices)
                return files.length;
            } catch(Exception e) {
                //Print exception
    //            Log.d(TAG, "CPU Count: Failed.");
                e.printStackTrace();
                //Default to return 1 core
                return 1;
            }
        }
        
        
    }

    2、内存:/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) {  
            }  
        }  

    3、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;  
        }  

    4、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;  
        }  

    5、电池电量 

    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));  

    6、系统的版本信息

    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;  
    }  

    7、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);  
    }  
  • 相关阅读:
    Inside The C++ Object Model
    Inside The C++ Object Model
    奇偶剪枝算法
    HDU 1088 Write a simple HTML Browser
    HDU 1084 What Is Your Grade?
    二分图的最大匹配(匈牙利算法)HDU1083
    来自codeblock 贴吧
    HDU 1075 What Are You Taking About
    HDU 1082 Matrix Chain Multiplication
    pair模板类
  • 原文地址:https://www.cnblogs.com/sishuiliuyun/p/3245599.html
Copyright © 2011-2022 走看看