Как получить размер установленного приложения в Oreo?

Я разрабатываю стандартное приложение «чистый мастер».

Мое приложение отлично работает, если уровень API ниже 26..

Мне нужно показать общий размер приложения на телефоне, чтобы пользователь мог решить, удалять его или нет.

  private void getPackageSizeInfo(Context context, final String packageName) {
    try {
        PackageManager packageManager = context.getPackageManager();
        Method getPackageSizeInfo = packageManager.getClass().getMethod("getPackageSizeInfo", String.class, IPackageStatsObserver.class);

        getPackageSizeInfo.invoke(packageManager, packageName, new IPackageStatsObserver.Stub() {
            public void onGetStatsCompleted(PackageStats packageStats, boolean succeeded) throws RemoteException {
                long totalCacheSize = packageStats.cacheSize + packageStats.externalCacheSize;
                long totalDataSize = packageStats.dataSize + packageStats.externalDataSize;
                long totalCodeSize = packageStats.codeSize + packageStats.externalCodeSize;
                long totalSize = totalDataSize + totalCodeSize;

                Log.i("appSize", "Total Size:" +packageName + "   " + NetworkHelper.humanReadableByteCount(totalSize) );
                Log.i("appSize", "App Size:" + packageName + "   " +NetworkHelper.humanReadableByteCount(totalCodeSize) );
                Log.i("appSize", "Data Size:" +packageName + "   " +NetworkHelper.humanReadableByteCount(totalDataSize)  );
                Log.i("appSize", "Cache Size:" +packageName + "   " +NetworkHelper.humanReadableByteCount(totalCacheSize)  );
            }
        });
    } catch (Exception e) {
        e.printStackTrace();
    }
}

как я уже сказал, этот код отлично работает под API 26 (добавлен helpl ofc)

Я знаю, что это возможно, потому что Clean master - расширенная часть очистки работает на API 26.

Caused by: java.lang.UnsupportedOperationException: Shame on you for calling the hidden API getPackageSizeInfoAsUser(). Shame!

Я получаю эту ошибку. Я уже прочитал все темы об этом.

У меня есть разрешение <uses-permission android:name="android.permission.GET_PACKAGE_SIZE" /> . Получил доступ к использованию и т. д.

Примечание. Я не хочу получать размер apk (у меня уже есть), мне нужен только общий размер приложения.


person O. Kumru    schedule 12.02.2018    source источник
comment
Вы используете отражение для доступа к скрытому методу. Конечно, он должен генерировать исключения   -  person Zoe    schedule 12.02.2018
comment
я ищу то же самое. есть что-нибудь еще?   -  person Arnav M.    schedule 15.02.2018
comment
Начиная с версии 8.0 функция getPackageSizeInfo устарела. Поэтому используйте StorageStatsmanager. обратитесь по этой ссылке   -  person BHARADWAJ Marripally    schedule 13.06.2018