首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android PackageStats给出负值

Android PackageStats给出负值
EN

Stack Overflow用户
提问于 2016-08-23 07:23:02
回答 1查看 902关注 0票数 39

我正在使用PackageStats,在打印PackageStats的codeSize、cacheSize、dataSize时,有些数据是负面的。

几个问题:

  • 这怎麽可能?
  • 假设apk大小在50 is左右,那么codeSize可能是负的情况是什么?
  • 还有其他可以可靠地提取上述信息的方法吗?

另外,对于安卓N,它给了我"NoSuchMethodException".So,

  • 是为Android删除了它,还是有什么方法可以使用它?
  • 有什么替代方案可以帮我计算上面的尺寸吗?

代码:

代码语言:javascript
复制
PackageManager packageManager = context.getPackageManager();
Method myUserId = UserHandle.class.getDeclaredMethod("myUserId");
int userID = (Integer) myUserId.invoke(packageManager);

Method getPackageSizeInfo = packageManager.getClass().getDeclaredMethod("getPackageSizeInfo", String.class, int.class,
IPackageStatsObserver.class);
getPackageSizeInfo.invoke(packageManager, context.getPackageName(), userID, new IPackageStatsObserver.Stub() {

    @Override
    public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) throws RemoteException {
        long codeSize = pStats.codeSize / MB; //long MB = 1024*1024;
        long cacheSize = pStats.cacheSize / MB;
        long dataSize = pStats.dataSize / MB;
        long appSize = codeSize + cacheSize + dataSize;
    };
}
EN

回答 1

Stack Overflow用户

发布于 2016-09-21 09:11:00

刚刚在API 23/24上试过了,可以简单地执行它。

这些external*属性可能引用SD卡。

代码语言:javascript
复制
    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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39094807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档