首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >android应用程序:获取已安装应用程序的大小

android应用程序:获取已安装应用程序的大小
EN

Stack Overflow用户
提问于 2015-12-22 21:00:52
回答 1查看 243关注 0票数 2

我是Java和Android应用程序开发方面的新手。我正在尝试读取安装的应用程序的总大小。根据这个网站上的一些建议,我已经使用了PackageStats方法来读取尺寸,如下所示

代码语言:javascript
复制
       for (ApplicationInfo apInfo: installedApps) {
        if ((apInfo.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) == 0) {
            Method getPackageSizeInfo = mPackageManager.getClass().getMethod(
                    "getPackageSizeInfo", String.class, IPackageStatsObserver.class);

            getPackageSizeInfo.invoke(mPackageManager, item.applicationInfo.packageName, new IPackageStatsObserver.Stub() {
                @Override
                public void onGetStatsCompleted(final PackageStats pStats, boolean succeeded)
                        throws RemoteException {
                        AppSize = pStats.codeSize + pStats.cacheSize + pStats.dataSize
                                + pStats.externalCodeSize + pStats.externalCacheSize + pStats.externalDataSize
                                + pStats.externalMediaSize + pStats.externalObbSize;

} totalAppSize = totalAppSize+AppSize;

注意:我获取了一个信号量,并在读取循环结束时释放。每次运行函数时,totalAppSize都是不同的。任何线索都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2015-12-22 21:37:57

首先,在您的清单文件中,您需要授予

代码语言:javascript
复制
    <uses-permission android:name="android.permission.GET_PACKAGE_SIZE"/>

完成后,请按照以下步骤操作

Android Studio·右键单击您的项目新建>文件夹> AIDL文件夹

·按下Finish

·右键单击aidl文件夹新建>包

·插入android.content.pm并按OK

·下载IPackageStatsObserver.aidl

·将aidl文件复制到android.content.pm包中

·生成>重建项目

完成此操作后,您只需获取pstats.codeSize

代码语言:javascript
复制
   try {
        PackageManager pm = getPackageManager();

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

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

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

                        Log.i("TEST", "codeSize: " + pStats.codeSize);
                    }
                });
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    }

正如你在官方的android Documentation中看到的,pstatus.codeSize返回的是安装的apk的大小,但是还有其他的方法。我已经测试过了,它对我来说很有效

快乐编码:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34416522

复制
相关文章

相似问题

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