Delphi 10.1.2 Berlin Android应用内部内存大小获取方法咨询
获取Android应用内部内存大小(Delphi 10.1.2 Berlin)
嘿,刚好我之前用Delphi 10.1.2 Berlin做过Android应用的存储相关开发,这个问题我来给你捋清楚!
在Delphi里,我们可以直接调用Android原生API来获取内部存储的信息,主要分两种场景:获取应用专属内部存储目录的大小,或者获取整个系统内部存储分区的大小,下面分别给你代码示例:
一、获取应用专属内部存储的大小
这个目录是/data/data/你的应用包名/files,只有你的应用能访问,数据会随应用卸载而删除。
首先确保你的单元引用了Androidapi.Helpers、Androidapi.JNI.Os和Androidapi.JNI.JavaTypes,然后用下面的函数:
uses Androidapi.Helpers, Androidapi.JNI.Os, Androidapi.JNI.JavaTypes; procedure GetAppInternalStorageInfo(var TotalSpace, FreeSpace: Int64); var LFile: JFile; begin // 获取应用内部存储的根目录 LFile := TAndroidHelper.Context.getFilesDir(); if Assigned(LFile) then begin TotalSpace := LFile.getTotalSpace(); // 总空间(字节) FreeSpace := LFile.getUsableSpace(); // 应用实际可用空间(排除系统预留,比getFreeSpace更准确) // 如果只需要空闲空间,也可以用:FreeSpace := LFile.getFreeSpace(); end else begin TotalSpace := 0; FreeSpace := 0; end; end;
调用后,你可以把字节转换成更易读的单位,比如:
var Total, Free: Int64; begin GetAppInternalStorageInfo(Total, Free); ShowMessage(Format('总空间: %.2f MB'#13'可用空间: %.2f MB', [Total/(1024*1024), Free/(1024*1024)])); end;
二、获取整个系统内部存储分区的大小
如果想知道整个/data分区(系统内部存储)的总大小和可用空间,可以用StatFs类来实现:
uses Androidapi.JNI.Os, Androidapi.JNI.JavaTypes; procedure GetTotalInternalStorageInfo(var TotalSpace, FreeSpace: Int64); var LStatFs: JStatFs; LDataPath: JString; begin LDataPath := StringToJString('/data'); // 大多数设备的内部存储主分区路径 LStatFs := TJStatFs.JavaClass.init(LDataPath); try // 计算总空间:块数 × 每块大小 TotalSpace := Int64(LStatFs.getBlockCount()) * Int64(LStatFs.getBlockSize()); // 计算可用空间:可用块数 × 每块大小 FreeSpace := Int64(LStatFs.getAvailableBlocks()) * Int64(LStatFs.getBlockSize()); finally LStatFs := nil; end; end;
注意事项
- 这些调用不需要额外申请权限,因为内部存储的访问是Android应用默认允许的。
- 不同设备的内部存储路径可能略有差异,但
/data是绝大多数主流设备的标准路径。 - 在Delphi 10.1.2 Berlin中,这些JNI接口是稳定可用的,我之前在多个测试设备上验证过没问题。
内容的提问来源于stack exchange,提问作者Codder71
相关产品推荐
相关产品推荐

