获取手机的总内存和可用的内存信息等
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()方法获取出来的值,是以字节做单位。
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,断电不可保存数据)
获取sdcard卡的内存空间
思路:
"/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); }
相关文章推荐
- Android 获取手机总内存和可用内存等信息
- Android 如何获取手机总内存和可用内存等信息
- Android 获取手机总内存和可用内存等信息
- Android 获取手机总内存和可用内存等信息
- Android 获取手机总内存和可用内存等信息
- Android 获取手机总内存和可用内存等信息
- Android 获取手机总内存和可用内存等信息
- Android 获取手机总内存和可用内存等信息
- Android 获取手机总内存和可用内存等信息
- Android 获取手机总内存和可用内存等信息
- Android 获取手机总内存和可用内存等信息
- Android 获取手机总内存和可用内存等信息
- Android 获取手机总内存和可用内存等信息
- Android 获取手机总内存和可用内存等信息
- Android 获取手机总内存和可用内存等信息
- Android 获取手机总内存和可用内存等信息
- Android 获取手机总内存和可用内存等信息
- Android 获取手机总内存和可用内存等信息
- Android 获取手机总内存和可用内存等信息
- 【小功能2】android获取手机信息(号码,内存,CPU,分辨率,MAC,IP,SD卡,IMEI,经纬度,信号强度等等)