zoukankan      html  css  js  c++  java
  • Android -- 系统信息(内存、cpu、sd卡、电量、版本)获取

    内存(ram)                                                                             

    android的总内存大小信息存放在系统的/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) {  
            }  
        }

    运行信息如下:

    05-30 08:05:14.807: INFO/-SystemInfo-(1519): ---MemTotal:       204876 kB  
    05-30 08:05:14.807: INFO/-SystemInfo-(1519): ---MemFree:          4596 kB  
    05-30 08:05:14.807: INFO/-SystemInfo-(1519): ---Buffers:         16020 kB  
    05-30 08:05:14.807: INFO/-SystemInfo-(1519): ---Cached:          82508 kB  
    05-30 08:05:14.807: INFO/-SystemInfo-(1519): ---SwapCached:         64 kB  
    05-30 08:05:14.807: INFO/-SystemInfo-(1519): ---Active:         137104 kB  
    05-30 08:05:14.807: INFO/-SystemInfo-(1519): ---Inactive:        41056 kB  
    05-30 08:05:14.807: INFO/-SystemInfo-(1519): ---SwapTotal:       65528 kB  
    05-30 08:05:14.817: INFO/-SystemInfo-(1519): ---SwapFree:        65368 kB  
    05-30 08:05:14.817: INFO/-SystemInfo-(1519): ---Dirty:              88 kB  
    05-30 08:05:14.817: INFO/-SystemInfo-(1519): ---Writeback:           0 kB  
    05-30 08:05:14.817: INFO/-SystemInfo-(1519): ---AnonPages:       79672 kB  
    05-30 08:05:14.817: INFO/-SystemInfo-(1519): ---Mapped:          38296 kB  
    05-30 08:05:14.817: INFO/-SystemInfo-(1519): ---Slab:             5768 kB  
    05-30 08:05:14.817: INFO/-SystemInfo-(1519): ---SReclaimable:     1856 kB  
    05-30 08:05:14.827: INFO/-SystemInfo-(1519): ---SUnreclaim:       3912 kB  
    05-30 08:05:14.827: INFO/-SystemInfo-(1519): ---PageTables:       8184 kB  
    05-30 08:05:14.827: INFO/-SystemInfo-(1519): ---NFS_Unstable:        0 kB  
    05-30 08:05:14.827: INFO/-SystemInfo-(1519): ---Bounce:              0 kB  
    05-30 08:05:14.827: INFO/-SystemInfo-(1519): ---CommitLimit:    167964 kB  
    05-30 08:05:14.827: INFO/-SystemInfo-(1519): ---Committed_AS: 11771920 kB  
    05-30 08:05:14.827: INFO/-SystemInfo-(1519): ---VmallocTotal:   761856 kB  
    05-30 08:05:14.827: INFO/-SystemInfo-(1519): ---VmallocUsed:     83656 kB  
    05-30 08:05:14.827: INFO/-SystemInfo-(1519): ---VmallocChunk:   674820 kB

    第一行是总内存大小(即用户可以使用的ram的大小)!

    获取当前剩余内存(ram)大小的方法:

    public long getAvailMemory() {  
            ActivityManager am = (ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE);  
            ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();  
            am.getMemoryInfo(mi);  
            return mi.availMem;  
        }

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

    注意类型,不然相乘之后会有溢出。可用内部存储的大小不能通过getRootDirectory();取得,之前网上传的很多都是用getRootDirectory()取得的,我测试之后发现取得的数值不对。要根据getDataDirectory();取得。

    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加%就是当前电量了  
        }  
        };

    然后在activity的oncreate()方法中注册

    registerReceiver(batteryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

    CPU信息                                                                                   

    public String[] getCpuInfo() {  
        String str1 = "/proc/cpuinfo";  
        String str2="";  
        String[] cpuInfo={"",""};  
        String[] arrayOfString;  
        try {  
            FileReader fr = new FileReader(str1);  
            BufferedReader localBufferedReader = new BufferedReader(fr, 8192);  
            str2 = localBufferedReader.readLine();  
            arrayOfString = str2.split("\s+");  
            for (int i = 2; i < arrayOfString.length; i++) {  
                cpuInfo[0] = cpuInfo[0] + arrayOfString[i] + " ";  
            }  
            str2 = localBufferedReader.readLine();  
            arrayOfString = str2.split("\s+");  
            cpuInfo[1] += arrayOfString[2];  
            localBufferedReader.close();  
        } catch (IOException e) {  
        }  
        return cpuInfo;  
    }

    /proc/cpuinfo文件中第一行是CPU的型号,第二行是CPU的频率,可以通过读文件,读取这些数据!

    系统的版本信息                                                                             

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

    我是天王盖地虎的分割线                                                               

    参考:http://gqdy365.iteye.com/blog/1066113

  • 相关阅读:
    JAVA基础——编程练习(二)
    JAVA基础——面向对象三大特性:封装、继承、多态
    JVM内存
    50. Pow(x, n) (JAVA)
    47. Permutations II (JAVA)
    46. Permutations (JAVA)
    45. Jump Game II (JAVA)
    43. Multiply Strings (JAVA)
    42. Trapping Rain Water (JAVA)
    41. First Missing Positive (JAVA)
  • 原文地址:https://www.cnblogs.com/yydcdut/p/3851716.html
Copyright © 2011-2022 走看看