zoukankan      html  css  js  c++  java
  • (原)android4.2以后获取应用程序和缓存大小的方法(源码有改变)

    以前获取应用的大小是用

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

    但在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()获取;

    Method myUserId = UserHandle.class.getDeclaredMethod("myUserId");  
    int userID = (Integer) myUserId.invoke(mPackageManager,null);  
    

     获取了以后就可以使用新的getPackageSizeInfo函数了。

    getPackageSizeInfoMethod.invoke(mPackageManager,packageInfo.packageName, userID, new MyObserver() 
    );
    
  • 相关阅读:
    3、Linux知识点/dos基础命令
    2、进制转换
    1、软件测试基础####################################################
    50.React跳转路由传参3种方法和区别
    49.react中使用less
    48.vue-awesome-swipe使用
    47、安装node-sass后运行报错
    46、VUE + JS 面试宝典
    45、导航钩子函数中使用next()和next('指定路径')的区别:
    44、css实现水波纹效果
  • 原文地址:https://www.cnblogs.com/liuying3013/p/4280054.html
Copyright © 2011-2022 走看看