如何获取Android设备的总内存和内部存储大小?

6
我试图获取总内存(RAM)和内部存储大小,但是我使用的每种方法都报告过低。我知道内核可能需要一些空间,但我需要知道安装的总量有多少。
对于内存,我首先只是从/proc/meminfo/中读取,然后使用了getMemoryInfo. 每个方法都报告比安装的内存少(700MB而不是1GB)。
对于内部存储大小,我正在使用Environment.getDataDirectorygetBlockSizeLonggetBlockCountLong。这个结果比我知道已安装的存储空间要低得多。操作系统中的设置与我的方法报告的数量相符,但我需要知道安装的总量,而不仅仅是它认为存在的数量(即使我在输入时听起来在我的脑海中似乎是违反直觉的)。
编辑:我查看了被发送的问题并尝试了其中的方法,但所报告的值与我知道已安装的值不正确。

2
可能是重复的问题:如何获取设备的总RAM大小?在Android上获取所有可用空间和总空间。在提问之前搜索网站对您和社区都非常有帮助。 - prettyvoid
1
正如我在问题中所说,我已经尝试了那些帖子中提到的方法。这些方法报告的值比所需值低。 - jambo
发布您从这些方法中获取的值。您从memInfo.totalMem获得什么值? - prettyvoid
当模拟器的值设置为1024MB时,memInfo.totalMem会给出879MB的值。 - jambo
这种行为在AVD上是正常的,尝试在真实设备上运行代码,你会发现它报告的RAM数量是正确的。 - prettyvoid
1个回答

5

关于RAM:

安卓应用可用总RAM

基本上是这样的:

MemoryInfo mi = new MemoryInfo();
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
activityManager.getMemoryInfo(mi);
long availableMegs = mi.availMem / 1048576L;

存储:

Android APP 可用存储空间

StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
long bytesAvailable = (long)stat.getBlockSize() *(long)stat.getBlockCount();
long megAvailable = bytesAvailable / 1048576;

Good luck!


在我看来,重复的问题最好转发到它们的重复线程,而不是回答它们。 - prettyvoid
2
正如我所说,我已经尝试使用getMemoryInfo,但它报告的是700KB而不是1GB。至于存储空间,我需要内部存储空间。 - jambo
@prettyvoid 我同意,但那是两个之前的答案合并而成。谢谢。 - Fer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接