Android开发之通过反射获取到Android隐藏的方法
来源:互联网 发布:淘宝怎么传宝贝视频 编辑:程序博客网 时间:2024/06/09 20:46
感恩原创:http://www.cnblogs.com/liyiran/p/5296756.html
在PackageManger中,有些方法被隐藏了,无法直接调用,需要使用反射来获取到该方法。
比如方法:getPackageSizeInfo(),通过这个方法可以获取到apk的CacheSize,CodeSize,DataSize等信息,但是该方法是隐藏的,@hide。
遇到这种情况,需要使用反射:
try { //通过反射,获取到PackageManager隐藏的方法getPackageSizeInfo() Method getPackageSizeInfo = PackageManager.class.getMethod("getPackageSizeInfo", String.class, int.class, IPackageStatsObserver.class);} catch ( NoSuchMethodException e ) { e.printStackTrace();}
getPackageSizeInfo()反射以后的使用:
getPackageSizeInfo.invoke(mPm, appInfo.packageName, myUserId.invoke(null, null), myStatsObserver);
反射参数说明:
PackageManager源码:
public abstract void getPackageSizeInfo(String packageName, int userHandle,IPackageStatsObserver observer);
通过源码可以看出来,该方法需要三个参数,第一个参数为String类型的packageName,第二个参数是int类型的userHandle,第三个参数是IPackageStatsObserver类型的observer
所以getMethod()需要填写的参数:
第一个参数为该方法名:“getPackageSizeInfo”
第二个参数为getPackageSizeInfo()的第一个参数:String.class
第三个参数为getPackageSizeInfo()的第二个参数:int.class
第四个参数为getPackageSizeInfo()的第三个参数:IPackageStatsObserver.class
这样就可以通过反射获取到该方法,然后就是该方法的使用了,如下:
通过invoke()方法使用
第一个参数:执行该方法的类,mPm
第二个参数:包名,appInfo.packageName
第三个参数:UserHandle.myUserId(),因为该方法也是隐藏的,所以需要使用反射获取到该方法。
第四个参数:IPackageStatsObserver的对象,myStatsObserver
第二种反射方法:
Method method = null;Method[] methods = PackageManager.class.getMethods(); for ( Method m : methods ) { if ( "getPackageSizeInfo".equals(m.getName()) ) { method = m; } }
通过getMethods获取到该类的所有方法,然后遍历方法,通过判断方法名来判断是否是getPackageSizeInfo()方法,然后赋值给method方法。然后就可以使用method了。
- Android开发之通过反射获取到Android隐藏的方法
- android中通过"反射"的到android隐藏的API
- 14、Android开发基础之通过系统提供的方法获取到保存文件的路径
- android开发学习 -- 通过反射去获取类的属性
- android通过反射获取状态栏的高度
- Android 通过反射来隐藏年月日的日-DatePicker
- Android通过反射的方法获取手机存储设备的状态信息
- android中使用反射获取隐藏类
- android开发 隐藏软件盘的方法
- Android通过反射机制获取目录下的文件名
- android通过反射获取资源ID的工具类
- Android开发之通过Handler的post方法更新UI
- Android--通过AIDL+反射,调用android内部隐藏的服务实现挂断电话
- Android开发学习笔记之通过反射技术修改listview的快速滑块图像
- android上通过反射,获取存储器列表
- android上通过反射,获取存储器列表
- android上通过反射,获取存储器列表
- android上通过反射,获取存储器列表
- typedef定义别名
- tarjan
- xutils大全
- lower_bound和upper_bound(STL算法)
- DOM操作--表格的相关操作
- Android开发之通过反射获取到Android隐藏的方法
- opencv3.0 IplImage* 与Mat 格式相互转换
- Java注解和注解处理器使用详解
- 对称密码&公钥密码
- java中方法的重载(重载的定义、特点和好处)
- [编程题] 疯狂队列
- 干货分享:oracle数据库基础知识精讲视频!
- 洛谷:P1046 陶陶摘苹果 题解
- MD5加密算法流程