The size of the previously acquired app is used
Packagemanager mpackagemanager= Getpackagemanager ();
try {Method Getpackagesizeinfomethod = PackageManager.class.getDeclaredMethod ("Getpackagesizeinfo", String.class, ipackagestatsobserver.class); Getpackagesizeinfomethod.invoke (Mpackagemanager, Packageinfo.packagename,new myobserver ()); } catch (Exception e) {
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); } }
But after 4.2 packagemanager.getpackagesizeinfo (String PackageName, Ipackagestatsobserver observer) is not available,
Change to Packagemanager.getpackagesizeinfo (String packagename, int userhandle, Ipackagestatsobserver observer),
As for the added parameter Userhandle explanation is: the user whose size information should be retrieved.
How does this userhandle come? Obtained through the Userhandle.myuserid () of the system class;
Method myUserID = UserHandle.class.getDeclaredMethod ("myUserID"); int UserID = (Integer) myuserid.invoke (mpackagemanager,null);
You can use the new Getpackagesizeinfo function once you have obtained it.
Getpackagesizeinfomethod.invoke (Mpackagemanager,packageinfo.packagename, UserID, New Myobserver ());
(original) The method of obtaining the application and cache size after android4.2 (the source code has changed)