Android系統信息(內存、cpu、sd卡、電量、版本)獲取

jopen 10年前發布 | 32K 次閱讀 Android Android開發 移動開發

一、內存(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) {    
            }    
        }    
</div> </div> 運行信息如下: 第一行是總內存大小(即用戶可以使用的ram的大小)

 
    11-30 08:05:14.807: INFO/-SystemInfo-(1519): ---MemTotal:       204876 kB    
    11-30 08:05:14.807: INFO/-SystemInfo-(1519): ---MemFree:          4596 kB    
    11-30 08:05:14.807: INFO/-SystemInfo-(1519): ---Buffers:         16020 kB    
    11-30 08:05:14.807: INFO/-SystemInfo-(1519): ---Cached:          82508 kB    
    11-30 08:05:14.807: INFO/-SystemInfo-(1519): ---SwapCached:         64 kB    
    11-30 08:05:14.807: INFO/-SystemInfo-(1519): ---Active:         137104 kB    
    11-30 08:05:14.807: INFO/-SystemInfo-(1519): ---Inactive:        41056 kB    
    11-30 08:05:14.807: INFO/-SystemInfo-(1519): ---SwapTotal:       65528 kB    
    11-30 08:05:14.817: INFO/-SystemInfo-(1519): ---SwapFree:        65368 kB    
    11-30 08:05:14.817: INFO/-SystemInfo-(1519): ---Dirty:              88 kB    
    11-30 08:05:14.817: INFO/-SystemInfo-(1519): ---Writeback:           0 kB    
    11-30 08:05:14.817: INFO/-SystemInfo-(1519): ---AnonPages:       79672 kB    
    11-30 08:05:14.817: INFO/-SystemInfo-(1519): ---Mapped:          38296 kB    
    11-30 08:05:14.817: INFO/-SystemInfo-(1519): ---Slab:             5768 kB    
    11-30 08:05:14.817: INFO/-SystemInfo-(1519): ---SReclaimable:     1856 kB    
    11-30 08:05:14.827: INFO/-SystemInfo-(1519): ---SUnreclaim:       3912 kB    
    11-30 08:05:14.827: INFO/-SystemInfo-(1519): ---PageTables:       8184 kB    
    11-30 08:05:14.827: INFO/-SystemInfo-(1519): ---NFS_Unstable:        0 kB    
    11-30 08:05:14.827: INFO/-SystemInfo-(1519): ---Bounce:              0 kB    
    11-30 08:05:14.827: INFO/-SystemInfo-(1519): ---CommitLimit:    167964 kB    
    11-30 08:05:14.827: INFO/-SystemInfo-(1519): ---Committed_AS: 11771920 kB    
    11-30 08:05:14.827: INFO/-SystemInfo-(1519): ---VmallocTotal:   761856 kB    
    11-30 08:05:14.827: INFO/-SystemInfo-(1519): ---VmallocUsed:     83656 kB    
    11-30 08:05:14.827: INFO/-SystemInfo-(1519): ---VmallocChunk:   674820 kB   
</div> </div> 獲取當前剩余內存(ram)大小的方法 :

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

二、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;    
}  </pre></div>


注意類型,不然相乘之后會有溢出。可用內部存儲的大小不能通過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;    
}  </pre></div>

四、電池電量
 

    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信息 : /proc/cpuinfo文件中第一行是CPU的型號,第二行是CPU的頻率

    adb shell                       (connect to your Android device shell)

cat /proc/cpuinfo               (read the CPU info)  </pre><br />

    private String getInfo() {

    StringBuffer sb = new StringBuffer();  

    sb.append("abi: ").append(Build.CPU_ABI).append("\n");  

    if (new File("/proc/cpuinfo").exists()) {  

        try {  

            BufferedReader br = new BufferedReader(new FileReader(new File("/proc/cpuinfo")));  

            String aLine;  

            while ((aLine = br.readLine()) != null) {  

                sb.append(aLine + "\n");  

            }  

            if (br != null) {  

                br.close();  

            }  

        } catch (IOException e) {  

            e.printStackTrace();  

        }   

    }  

    return sb.toString();  

}  </pre><br />

六、系統的版本信息:

 
    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;    
    }   
</div> </div> 版本信息里面還包括型號等信息。

七、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);    
}   </pre></b><a style="text-indent:0px;" title="派生到我的代碼片" href="/misc/goto?guid=4959549640366667327" target="_blank"></a></div>

</div> </div> 最后貼一個格式化數據的方法: 保留兩位小數。
 

public String formatSize(long size) {
String suffix = null;
float fSize=0;

if (size >= 1024) {    
    suffix = "KB";    
    fSize=size / 1024;    
    if (fSize >= 1024) {    
        suffix = "MB";    
        fSize /= 1024;    
    }    
    if (fSize >= 1024) {    
        suffix = "GB";    
        fSize /= 1024;    
    }    
} else {    
    fSize = size;    
}    
java.text.DecimalFormat df = new java.text.DecimalFormat("#0.00");    
StringBuilder resultBuffer = new StringBuilder(df.format(fSize));    
if (suffix != null)    
    resultBuffer.append(suffix);    
return resultBuffer.toString();    

} </pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!