随笔 - 8, 文章 - 0, 评论 - 1, 阅读 - 4959

以前获取应用的大小是用

 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()
);

 

努力加载评论中...
点击右上角即可分享
微信分享提示