java.lang.NoSuchMethodException: getPackageSizeInfo
在手机卫士中,有缓存清理的功能,代码如下
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相关推荐
- java.lang.NoSuchMethodException 错误
报错: Stacktraces java.lang.NoSuchMethodException: com.gssw.action.ProAction.update() java.lang.Class. ...
- Java之——java.lang.NoSuchMethodException: [org.springframework.web.multipart.MultipartFile;.()
转自:https://blog.csdn.net/l1028386804/article/details/65449355 ava.lang.NoSuchMethodException: [org.s ...
- 错误处理:java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addFilter
部署项目时,启动Tomcat一直出错:java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addFilter SEVE ...
- java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.base.BaseSelectProvider.<init>()的问题解决
在使用通用mapper进行crud的时候运行报java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.base.BaseSelectPr ...
- SpringAop对struts2的Action设置切面织入时报错java.lang.NoSuchMethodException
学习springAop,尝试对struts2的Action层使用Aop切面实现日志的打印. 执行出现报错:java.lang.NoSuchMethodException. 查阅资料解决办法:sprin ...
- 解决:java.lang.NoSuchMethodException: gentle.entity.User.<init>()
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1. 运行程序报错: java.lang.NoSuchMethodException: gentle ...
- 解决报错:java.lang.NoSuchMethodException: com.tangyuan.entity.RicherProduct.<init>()
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1.报错;java.lang.NoSuchMethodException: com.tangyuan ...
- [转载] Controller报错:java.lang.NoSuchMethodException: java.util.List.<init>()
参考链接: Java8中的java.util.StringJoiner 报错详情: java.lang.NoSuchMethodException: java.util.List.<init&g ...
- struts2的java.lang.NoSuchMethodException异常处理
不久前在学习struts时出现这个错误,在网上搜索了半天,发现答案不一.将其总结如下,以方便大家参考. 1. 你有没有试试看 其它的方法能不能用,要是都是这种情况的话,可能是你的Action类没有继承 ...
最新文章
- Windows Server 2012 文件服务器群集
- 字节跳动李航:自学机器学习,研究AI三十载,他说AI发展或进入平缓期
- Global.asax使用1
- 简单介绍tomcat中maxThreads,acceptCount,connectionTimeout
- Crawler:关于爬虫的简介、安装、使用方法之详细攻略
- cpu工作原理flash动画_17张PLC工作原理动画,每一个都是经典
- fedora mysql 初始化_Linux(fedora)下启动MySQL,结果显示:env: /etc/init.d/mysql:权限不够。 我已经将权限切换到su了...
- mybatis-plus 逻辑删除
- python爬虫小说实例源码_Python下载网络小说实例代码
- Easy3D 样条曲线拟合
- HBase二级索引方案
- 软件测评师的一些重点①
- 国内三大云数据库测试对比
- ORACLE新增字段、注释等
- php实现wav转mp3,求,用PHP实现MP3转WAV后生成波形图的方法
- pfSense软路由防火墙
- 情感驿站004:我有一壶酒,可以慰风尘
- Linux 安装 Composer
- 原本 1.3绿色版-扫描仪/相机/手机拍摄照片变清晰软件
- 学习笔记—增量式PID详细实现(C语言)