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

时间:2015-12-22 13:00:52

标签: android

我是Java和Android应用程序开发的新手。 我试图阅读安装的应用程序的总大小。根据本网站上的一些建议,我使用了PackageStats方法来读取下面的大小

       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在每次运行时都不同。任何线索都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

首先,在您的清单文件中,您需要获得

的许可
    <uses-permission android:name="android.permission.GET_PACKAGE_SIZE"/>

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

Android Studio •右键单击您的项目New&gt;文件夹&gt; AIDL文件夹

•按完成

•右键单击aidl文件夹New&gt;封装

•插入android.content.pm并按OK

•下载IPackageStatsObserver.aidl

•复制android.content.pm包中的aidl文件

•构建&gt;重建项目

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

   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安装的大小,但还有其他方法。我测试了它,它适用于我

快乐编码:)