您的位置:首页 > 其它

获取手机的总内存和可用的内存信息等

2012-07-11 00:59 232 查看
获取手机的总内存和可用的内存信息等(这里所值的手机的总内存指的是Ram内存,可用的内存指的是手机可用的rom内存信息)

思路:
"/proc/meminfo"文件记录了android手机的一些内存信息,在命令行窗口里输入"adb shell",进入shell环境,输入"cat /proc/meminfo"即可在命令行里显示meminfo文件的内容
C:\Users\Figo>adb shell# cat /proc/meminfocat /proc/meminfoMemTotal: 94096 kBMemFree: 1684 kBBuffers: 16 kBCached: 27160 kB

MemTotal: 所有可用RAM大小。MemFree: LowFree与HighFree的总和,被系统留着未使用的内存。所以要获得手机的内存信息只需读取"/proc/meminfo"文件的第1行,并进行简单的字符串处理即可。

第二种方法:(利用Android提供的一组内部的API来实现)

Android系统提供了Environment 和StatFs两个类,配合可以实现对存储设备容量的查看。
Environment: 获取系统中的存储设备信息
getDataDirectory(): 获取应用存储空间文件对象。
getExternalStorageDirectory(): 获取外部存储设备及SD卡文件对象。
getRootDirectory(): 获取系统空间文件对象。
StatFs: 用于获取具体文件的信息。
getBlockCount(): 获取存储块数量。
getAvailableBlocks(): 获取可用的存储块数量。
getBlockSize(): 获取存储块大小。
因为Android是基于Linux系统的,所以其没有盘符的概念,而且是以存储块来存储数据。所以获得容量的正确方式为:
1. 通过Environment获取需要检测容量的文件对象。
2. 构建StatFs对象。
3. 获取存储块数量。
4. 获取存储块大小。
5. 计算得出容量大小。
通过getBlockSize()方法获取出来的值,是以字节做单位。

package com.luochuang.programView;

import java.io.File;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.os.StatFs;
import android.text.format.Formatter;
import android.widget.TextView;

public class ProgramViewActivity extends Activity {

private TextView app_manager_avail_sd;
private TextView app_manager_avail_mem;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.app_manager);
app_manager_avail_sd = (TextView) findViewById(R.id.tv_app_manager_avail_sd);
app_manager_avail_mem = (TextView) findViewById(R.id.tv_app_manager_avail_mem);
app_manager_avail_sd.setText("SD卡可用内存" + getAvailSdSize());
app_manager_avail_mem.setText("手机剩余内存:" + getInternalAvailSize());
}

/***
* 获取可用的sd卡的空间
*/
public String getAvailSdSize() {
File path = Environment.getExternalStorageDirectory();
// StatFs:检索有关整体上的一个文件系统的空间信息
StatFs stat = new StatFs(path.getPath());
// 一个文件系统的块大小,以字节为单位。
long blockSize = stat.getBlockSize();
// SD卡中可用的块数
long availableBlocks = stat.getAvailableBlocks();
return Formatter.formatFileSize(this, blockSize * blockSize);
}

/**
* 获取手机的内部存储设备的可用空间
*/
public String getInternalAvailSize() {
StatFs mDataFileStats = new StatFs("/data");
long freeStorage = (long) mDataFileStats.getAvailableBlocks()
* mDataFileStats.getBlockSize();
return Formatter.formatFileSize(this, freeStorage);
}

}
遇到的错误:

07-10 16:53:14.923: E/AndroidRuntime(394): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.luochuang.programView/com.luochuang.programView.ProgramViewActivity}: java.lang.RuntimeException: Binary XML file line #56: You must supply
a layout_width attribute.

07-10 16:53:14.923: E/AndroidRuntime(394): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)

07-10 16:53:14.923: E/AndroidRuntime(394): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)

07-10 16:53:14.923: E/AndroidRuntime(394): at android.app.ActivityThread.access$2300(ActivityThread.java:125)

07-10 16:53:14.923: E/AndroidRuntime(394): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)

07-10 16:53:14.923: E/AndroidRuntime(394): at android.os.Handler.dispatchMessage(Handler.java:99)

07-10 16:53:14.923: E/AndroidRuntime(394): at android.os.Looper.loop(Looper.java:123)

07-10 16:53:14.923: E/AndroidRuntime(394): at android.app.ActivityThread.main(ActivityThread.java:4627)

07-10 16:53:14.923: E/AndroidRuntime(394): at java.lang.reflect.Method.invokeNative(Native Method)

07-10 16:53:14.923: E/AndroidRuntime(394): at java.lang.reflect.Method.invoke(Method.java:521)

07-10 16:53:14.923: E/AndroidRuntime(394): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)

07-10 16:53:14.923: E/AndroidRuntime(394): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)

07-10 16:53:14.923: E/AndroidRuntime(394): at dalvik.system.NativeStart.main(Native Method)

07-10 16:53:14.923: E/AndroidRuntime(394): Caused by: java.lang.RuntimeException: Binary XML file line #56: You must supply a layout_width attribute.-----------------------------------------------XML文件的56行出现了错误。多了个标签

07-10 16:53:14.923: E/AndroidRuntime(394): at android.content.res.TypedArray.getLayoutDimension(TypedArray.java:491)

07-10 16:53:14.923: E/AndroidRuntime(394): at android.view.ViewGroup$LayoutParams.setBaseAttributes(ViewGroup.java:3592)

07-10 16:53:14.923: E/AndroidRuntime(394): at android.view.ViewGroup$MarginLayoutParams.<init>(ViewGroup.java:3672)

07-10 16:53:14.923: E/AndroidRuntime(394): at android.widget.FrameLayout$LayoutParams.<init>(FrameLayout.java:452)

07-10 16:53:14.923: E/AndroidRuntime(394): at android.widget.FrameLayout.generateLayoutParams(FrameLayout.java:418)

07-10 16:53:14.923: E/AndroidRuntime(394): at android.widget.FrameLayout.generateLayoutParams(FrameLayout.java:48)

07-10 16:53:14.923: E/AndroidRuntime(394): at android.view.LayoutInflater.rInflate(LayoutInflater.java:620)

07-10 16:53:14.923: E/AndroidRuntime(394): at android.view.LayoutInflater.rInflate(LayoutInflater.java:621)

07-10 16:53:14.923: E/AndroidRuntime(394): at android.view.LayoutInflater.inflate(LayoutInflater.java:407)

07-10 16:53:14.923: E/AndroidRuntime(394): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)

07-10 16:53:14.923: E/AndroidRuntime(394): at android.view.LayoutInflater.inflate(LayoutInflater.java:276)

07-10 16:53:14.923: E/AndroidRuntime(394): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198)

07-10 16:53:14.923: E/AndroidRuntime(394): at android.app.Activity.setContentView(Activity.java:1647)

07-10 16:53:14.923: E/AndroidRuntime(394): at com.luochuang.programView.ProgramViewActivity.onCreate(ProgramViewActivity.java:20)

07-10 16:53:14.923: E/AndroidRuntime(394): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)

07-10 16:53:14.923: E/AndroidRuntime(394): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)

07-10 16:53:14.923: E/AndroidRuntime(394): ... 11 more

1.首先获取手机内存的两种方法:(ram,断电不可保存数据)

public String getAvailMemory() {
MemoryInfo outInfo = new MemoryInfo();
manager.getMemoryInfo(outInfo);
return Formatter.formatFileSize(ManagerTestActivity.this,
outInfo.availMem);
}
2.
public String getInternalAvailSize() {
StatFs mDataFileStats = new StatFs("/data");
long freeStorage = (long) mDataFileStats.getAvailableBlocks()
* mDataFileStats.getBlockSize();
return Formatter.formatFileSize(this, freeStorage);
}

获取sdcard卡的内存空间

// Sdcard的可用空间
public String getAvailSdSize() {
File path = Environment.getExternalStorageDirectory();
// StatFs:检索有关整体上的一个文件系统的空间信息
StatFs stat = new StatFs(path.getPath());
// 一个文件系统的块大小,以字节为单位。
long blockSize = stat.getBlockSize();
// SD卡中可用的块数
long availableBlocks = stat.getAvailableBlocks();
return Formatter.formatFileSize(this, blockSize * availableBlocks);
}

// Sdcard的总空间
public String getALLAvailSdSize() {
File path = Environment.getExternalStorageDirectory();
// StatFs:检索有关整体上的一个文件系统的空间信息
StatFs stat = new StatFs(path.getPath());
// 一个文件系统的块大小,以字节为单位。
long blockSize = stat.getBlockCount();
// SD卡中可用的块数
long availableBlocks = stat.getAvailableBlocks();
return Formatter.formatFileSize(this, blockSize * availableBlocks);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: