Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓软件包始终为零_Java_Android_Android Package Managers_Android Storage - Fatal编程技术网

Java 安卓软件包始终为零

Java 安卓软件包始终为零,java,android,android-package-managers,android-storage,Java,Android,Android Package Managers,Android Storage,我正在尝试获取应用程序包占用的大小。每个应用程序在内部/外部存储器中都有一个位置 我想计算以下目录的大小,如何计算? 我知道我可以在Oreo(API 26)设备上使用,但在Oreo设备之前如何实现这一点 应用程序目录:/Android/data/myapplicationpackage 我试着用,但它总是给我零。这个代码的实际使用方法是什么 我使用了下面的代码,它给了我所有的零 PackageStats stats = new PackageStats(context.getPackageNam

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

我想计算以下目录的大小,如何计算? 我知道我可以在Oreo(API 26)设备上使用,但在Oreo设备之前如何实现这一点

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

我试着用,但它总是给我零。这个代码的实际使用方法是什么

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

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=新的PackageStats(context.getPackageName())

它将只创建packagestats对象。同样,构造函数将初始化字段

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

谢谢你的回答,但是我正在寻找没有反射的答案,你不能依赖反射来生成代码。感谢您澄清了PackageStats的概念,我相信android文档不适合这个类。当我试图获取包大小时,我搜索了很多。我没有得到任何正式的解决方案。@JyotiJK谢谢你的代码,但是在哪里使用了
storageManager
变量,我们如何获得
info.uid
?谢谢。@Acuna抱歉,我刚刚粘贴了我的项目代码。这里info.uid是您的应用程序uid。getApplicationInfo().ui是的,使用访问权限是什么?是不是android.permission.PACKAGE\u USAGE\u STATS?
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
        }
    });
 @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) {}