• Android开发之通过反射获取到Android隐藏的方法


    在PackageManger中,有些方法被隐藏了,无法直接调用,需要使用反射来获取到该方法。

    比如方法:getPackageSizeInfo(),通过这个方法可以获取到apk的CacheSize,CodeSize,DataSize等信息,但是该方法是隐藏的,@hide

    遇到这种情况,需要使用反射:

    1 try {
    2     //通过反射,获取到PackageManager隐藏的方法getPackageSizeInfo()
    3     Method getPackageSizeInfo = PackageManager.class.getMethod("getPackageSizeInfo", String.class, int.class, IPackageStatsObserver.class);
    4 } catch ( NoSuchMethodException e ) {
    5     e.printStackTrace();
    6 }

    getPackageSizeInfo()反射以后的使用:

    1 getPackageSizeInfo.invoke(mPm, appInfo.packageName, myUserId.invoke(null, null), myStatsObserver);

    反射参数说明:

    PackageManager源码:

    1     public abstract void getPackageSizeInfo(String packageName, int userHandle,
    2             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

    ------------------------------------------------------------------------------------------------------------------------------

    第二种反射方法:

    1 Method method = null;
    2 Method[] methods = PackageManager.class.getMethods();
    3   for ( Method m : methods ) {
    4       if ( "getPackageSizeInfo".equals(m.getName()) ) {
    5            method = m;
    6          }
    7       }

    通过getMethods获取到该类的所有方法,然后遍历方法,通过判断方法名来判断是否是getPackageSizeInfo()方法,然后赋值给method方法。然后就可以使用method了。

  • 相关阅读:
    关于asp.net页面自定义404错误码返回302的最新解决方法
    基于sharpdevelop核心和ArcEngine打造插件式桌面GIS应用(概述)
    WPF自定义控件踩坑记录,用户自定义控件 绑定后台定义的 命令 依赖项属性 注意事项 静态
    WPF C# 以非独占式读取本地图片
    C#DataGridView控件60招(一)
    用TEXT文件做数据源
    boost智能指针
    linux下安装boost库
    ASP/ASP.NET程序设计电子书专题下载
    Highcharts 点击多选框取消,添加数据上绑定最大,最小值和图例上绑定提示框数据
  • 原文地址:https://www.cnblogs.com/liyiran/p/5296756.html
Copyright © 2020-2023  润新知