Я разрабатываю стандартное приложение «чистый мастер».
Мое приложение отлично работает, если уровень 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 (у меня уже есть), мне нужен только общий размер приложения.