gpt4 book ai didi

java - Android PackageStats 始终为零

转载 作者:太空宇宙 更新时间:2023-11-03 12:14:11 36 4
gpt4 key购买 nike

我正在尝试获取我的应用程序包占用的大小。每个应用程序在内部/外部存储中都有一个位置。

我想计算以下目录的大小,我该怎么做?我知道我可以使用 StorageStateManager在 Oreo (API 26) 设备上及以上,但我怎样才能在 oreo 设备之前实现这一点。

应用程序目录:/Android/data/myapplicationpackage

我正在尝试使用 PackageStats但它总是给我零。使用此代码的实际方法是什么?

我使用了下面的代码,它给了我所有的零。

PackageStats stats = new PackageStats(context.getPackageName());
long codeSize = stats.codeSize + stats.externalCodeSize;
long dataSize = stats.dataSize + stats.externalDataSize;
long cacheSize = stats.cacheSize + stats.externalCacheSize;
long appSize = codeSize + dataSize + cacheSize;

最佳答案

PackageStats stats = new PackageStats(context.getPackageName());

它只会创建 packagestats 对象。作为from the source ,构造函数将初始化字段,

 public PackageStats(String pkgName) {
packageName = pkgName;
userHandle = UserHandle.myUserId();
}

对于 api<26,

您需要使用 IPackageStatsObserver.aidl 并且必须通过反射<调用getPackageSizeInfo 方法/em>。

PackageManager pm = getPackageManager();

Method getPackageSizeInfo = pm.getClass().getMethod(
"getPackageSizeInfo", String.class, IPackageStatsObserver.class);

getPackageSizeInfo.invoke(pm, "com.yourpackage",
new IPackageStatsObserver.Stub() {

@Override
public void onGetStatsCompleted(PackageStats pStats, boolean succeeded)
throws RemoteException {

//here the pStats has all the details of the package
}
});

这是 complete solution为了它。效果很好。

来自 api 26

getPackageSizeInfo 方法已弃用。

您可以使用此代码,

 @SuppressLint("WrongConstant")
final StorageStatsManager storageStatsManager = (StorageStatsManager) context.getSystemService(Context.STORAGE_STATS_SERVICE);
final StorageManager storageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
try {
ApplicationInfo ai = context.getPackageManager().getApplicationInfo(packagename, 0);
StorageStats storageStats = storageStatsManager.queryStatsForUid(ai.storageUuid, info.uid);
cacheSize =storageStats.getCacheBytes();
dataSize =storageStats.getDataBytes();
apkSize =storageStats.getAppBytes();
size+=info.cacheSize;
} catch (Exception e) {}

但是要使用此代码,您需要USAGE ACCESS PERMISSION

关于java - Android PackageStats 始终为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49606077/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com