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

获取手机的总内存和可用的内存信息等(这里所值的手机的总内存指的是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);
    }



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值