以前获取应用的大小是用
PackageManager mPackageManager= getPackageManager();
1 2 3 4 5 | try {Method getPackageSizeInfoMethod = PackageManager. class .getDeclaredMethod( "getPackageSizeInfo" , String. class , IPackageStatsObserver. class ); getPackageSizeInfoMethod.invoke(mPackageManager, packageInfo.packageName, new MyObserver()); } catch (Exception e) { } |
1 2 3 4 5 6 7 8 9 10 11 12 | class MyObserver extends IPackageStatsObserver.Stub { @Override public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) throws RemoteException { long cacheSize = pStats.cacheSize; String packageName = pStats.packageName; String formatFileSize = Formatter.formatFileSize( getApplicationContext(), cacheSize); System.out.println(packageName + ":" + formatFileSize); } } |
但在4.2后 PackageManager.getPackageSizeInfo(String packageName, IPackageStatsObserver observer)不可用,
改为PackageManager.getPackageSizeInfo(String packageName, int userHandle, IPackageStatsObserver observer),
至于增加的参数userHandle的解释是:The user whose size information should be retrieved。
这个userHandle怎么来? 通过系统类的UserHandle.myUserId()获取;
1 2 | Method myUserId = UserHandle. class .getDeclaredMethod( "myUserId" ); int userID = (Integer) myUserId.invoke(mPackageManager, null ); |
获取了以后就可以使用新的getPackageSizeInfo函数了。
1 2 | getPackageSizeInfoMethod.invoke(mPackageManager,packageInfo.packageName, userID, new MyObserver() ); |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步