java new Android PackageStats提供负值



android q (1)

我正在使用PackageStats并在打印PackageStats的codeSize,cacheSize,dataSize时,一些数据将变为负数。

几个问题:

  • 这怎么可能?
  • 考虑到apk大小约为50MB,codeSize可能是负面的情况是什么?
  • 可以可靠地用于提取上述信息的任何其他方式?

另外,对于Android N,它给了我“NoSuchMethodException”。所以,

  • 它是为Android N删除还是有某种方式使用它?
  • 任何可以帮助我计算上述尺寸的替代品?

码:

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;
    };
}

刚刚尝试使用API​​ 23/24并且可以实例化它。

这些external*属性可能指的是SD卡。

    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;




android-7.0-nougat