我正在开发标准的“清洁大师”应用程序。
如果 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 下完美运行。(添加了aidl 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 大小(我已经有),只想要总应用程序大小。