在手机卫士中,有缓存清理的功能,代码如下

private void getAppCacheSize(String packageName) {Class clazz = pm.getClass();// 获取PackageManager的类类型try {Method method = clazz.getDeclaredMethod("getPackageSizeInfo", String.class,IPackageStatsObserver.class);// 把包名传递给回调对象//getcacheInfo.packName = packageName;method.invoke(pm, packageName, new GetCacheInfo(packageName));// 结果回调在IPackageStatsObserver的对象中} catch (NoSuchMethodException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}
}

报错如下

java.lang.reflect.InvocationTargetException
java.lang.NoSuchMethodException: getPackageSizeInfo

在Android4.2以上版本中,PackageManager.getPackageSizeInfo(String packageName, IPackageStatsObserver observer)不可用,改为PackageManager.getPackageSizeInfo(String packageName, int userHandle, IPackageStatsObserver observer), 至于增加的参数userHandle的解释是:The user whose size information should be retrieved。下面是PackageManager内部的用法:

/*** Retrieve the size information for a package.* Since this may take a little while, the result will* be posted back to the given observer.  The calling context* should have the {@link android.Manifest.permission#GET_PACKAGE_SIZE} permission.** @param packageName The name of the package whose size information is to be retrieved* @param userHandle The user whose size information should be retrieved.* @param observer An observer callback to get notified when the operation* is complete.* {@link android.content.pm.IPackageStatsObserver#onGetStatsCompleted(PackageStats, boolean)}* The observer's callback is invoked with a PackageStats object(containing the* code, data and cache sizes of the package) and a boolean value representing* the status of the operation. observer may be null to indicate that* no callback is desired.** @hide*/public abstract void getPackageSizeInfo(String packageName, int userHandle,IPackageStatsObserver observer);/*** Like {@link #getPackageSizeInfo(String, int, IPackageStatsObserver)}, but* returns the size for the calling user.** @hide*/public void getPackageSizeInfo(String packageName, IPackageStatsObserver observer) {getPackageSizeInfo(packageName, UserHandle.myUserId(), observer);}

代码修改为

private void getAppCacheSize(String packageName) {Class clazz = pm.getClass();// 获取PackageManager的类类型try {Method method = clazz.getDeclaredMethod("getPackageSizeInfo", String.class, int.class,IPackageStatsObserver.class);/** * after invoking, PkgSizeObserver.onGetStatsCompleted() will be called as callback function. <br> * About the third parameter ‘Process.myUid() / 100000’,please check: * <android_source>/frameworks/base/core/java/android/content/pm/PackageManager.java: * getPackageSizeInfo(packageName, UserHandle.myUserId(), observer); */ // 把包名传递给回调对象//getcacheInfo.packName = packageName;method.invoke(pm, packageName, android.os.Process.myUid() / 100000, new GetCacheInfo(packageName));// 结果回调在IPackageStatsObserver的对象中} catch (NoSuchMethodException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}
}

运行后报错,添加相应的权限即可

java.lang.SecurityException: Neither user 10603 nor current process has android.permission.GET_PACKAGE_SIZE.
java.lang.SecurityException: Neither user 10603 nor current process has android.permission.CLEAR_APP_CACHE.

测试后,可用。通过查阅资料,其中Process.myUid() / 100000的解释为:

表示多用户中的某一个用户,因为一个用户装的apk可以有100000个,用uid表示,uid/100000的商就是某个特定的用户id也叫userId或者userHandle。

java.lang.NoSuchMethodException: getPackageSizeInfo相关推荐

  1. java.lang.NoSuchMethodException 错误

    报错: Stacktraces java.lang.NoSuchMethodException: com.gssw.action.ProAction.update() java.lang.Class. ...

  2. Java之——java.lang.NoSuchMethodException: [org.springframework.web.multipart.MultipartFile;.()

    转自:https://blog.csdn.net/l1028386804/article/details/65449355 ava.lang.NoSuchMethodException: [org.s ...

  3. 错误处理:java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addFilter

    部署项目时,启动Tomcat一直出错:java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addFilter SEVE ...

  4. java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.base.BaseSelectProvider.<init>()的问题解决

    在使用通用mapper进行crud的时候运行报java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.base.BaseSelectPr ...

  5. SpringAop对struts2的Action设置切面织入时报错java.lang.NoSuchMethodException

    学习springAop,尝试对struts2的Action层使用Aop切面实现日志的打印. 执行出现报错:java.lang.NoSuchMethodException. 查阅资料解决办法:sprin ...

  6. 解决:java.lang.NoSuchMethodException: gentle.entity.User.<init>()

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1. 运行程序报错: java.lang.NoSuchMethodException: gentle ...

  7. 解决报错:java.lang.NoSuchMethodException: com.tangyuan.entity.RicherProduct.<init>()

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1.报错;java.lang.NoSuchMethodException: com.tangyuan ...

  8. [转载] Controller报错:java.lang.NoSuchMethodException: java.util.List.<init>()

    参考链接: Java8中的java.util.StringJoiner 报错详情: java.lang.NoSuchMethodException: java.util.List.<init&g ...

  9. struts2的java.lang.NoSuchMethodException异常处理

    不久前在学习struts时出现这个错误,在网上搜索了半天,发现答案不一.将其总结如下,以方便大家参考. 1. 你有没有试试看 其它的方法能不能用,要是都是这种情况的话,可能是你的Action类没有继承 ...

最新文章

  1. Windows Server 2012 文件服务器群集
  2. 字节跳动李航:自学机器学习,研究AI三十载,他说AI发展或进入平缓期
  3. Global.asax使用1
  4. 简单介绍tomcat中maxThreads,acceptCount,connectionTimeout
  5. Crawler:关于爬虫的简介、安装、使用方法之详细攻略
  6. cpu工作原理flash动画_17张PLC工作原理动画,每一个都是经典
  7. fedora mysql 初始化_Linux(fedora)下启动MySQL,结果显示:env: /etc/init.d/mysql:权限不够。 我已经将权限切换到su了...
  8. mybatis-plus 逻辑删除
  9. python爬虫小说实例源码_Python下载网络小说实例代码
  10. Easy3D 样条曲线拟合
  11. HBase二级索引方案
  12. 软件测评师的一些重点①
  13. 国内三大云数据库测试对比
  14. ORACLE新增字段、注释等
  15. php实现wav转mp3,求,用PHP实现MP3转WAV后生成波形图的方法
  16. pfSense软路由防火墙
  17. 情感驿站004:我有一壶酒,可以慰风尘
  18. Linux 安装 Composer
  19. 原本 1.3绿色版-扫描仪/相机/手机拍摄照片变清晰软件
  20. 学习笔记—增量式PID详细实现(C语言)

热门文章

  1. 广域网应用场景包括哪些?—Vecloud
  2. 使用VS进行远程调试
  3. 学JS的心路历程 -非同步执行
  4. 20165301第十周课下补做
  5. iOS GCD中级篇 - dispatch_group的理解及使用
  6. 【学习备份】ajax添加小例子
  7. iOS开发知识点总结
  8. 一款简洁大气的jquery日期日历插件
  9. 单链表基本操作(可执行程序),二级指针使用必要性的初步理解
  10. *58.作业与进程的关系