Android反射简单应用
来源:互联网 发布:如何翻墙 知乎 编辑:程序博客网 时间:2024/05/20 15:12
获得或修改TelephonyManager状态
注意:这只是个例子,实际需要可能比这要复杂~
以下是两种方式的调用,注意反射要包裹在try/catch语句中并抛出异常。
try { getInfo(1);//这里参数是1 因为原文件中 “NETWORK_TYPE_GPRS = 1” getField(); } catch (Exception e) { e.printStackTrace(); }
一、根据方法名字和参数来调用相应的值
**
/** * 这个方法是重点,怎么用反射获取方法并运行方法 * @param value * @return * @throws Exception */ public void getInfo(int value) throws Exception { TelephonyManager mTelephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); // 首先获取一个Clas对象 几个对象是用来获取方法用的 Class ownerClass = Class.forName("android.telephony.TelephonyManager"); // Class ownerClass = mTelephonyManager.getClass(); // 参数类型, 获取的方法说不定会有好多重载过的 可以通过参数来确认 /** * 这个可以有好几个参数的形势 例如:Class[] argsClass = new Class[3]; argsClass[0] = * int.class; argsClass[1] = boolean.class; argsClass[0] = String.class; */ Class[] argsClass = new Class[1]; argsClass[0] = int.class; // 参数, 在方法运行的时候需要的参数 /** * ====== 这个一定要 对应 要不然报错了 很难找 和argsClass 一一对应。 */ Object[] params = new Object[1]; params[0] = value; // 获取参数 getNetworkTypeName 是你要获取的方法的名称 argsClass 是你方法的参数类型 Method method = ownerClass.getMethod("getNetworkTypeName", argsClass); // 使用 method.invoke 来调用方法 mTelephonyManager 调用方法的对象 ,params 则就是参数 Object result=method.invoke(mTelephonyManager, params); Log.i("jinjie","getNetworkTypeName== " + result); }
过程总结:
1、首先要找到类名,就是你要反射函数所在的类
2、找到方法,用getMethod(…)注意里边的参数
3、抛出反射invoke方法,得到返回值,进行必要的类型转化即可
二、通过实例化对象获得
/** * 额外添加一个获取属性值和一些其他的调用 * * @return */ private void getField() throws Exception{ Class ownerClass = Class.forName("android.telephony.TelephonyManager"); TelephonyManager mTelephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); //实例化一个对象 /***Object instance = ownerClass.newInstance();**/ // 我不清楚有没有隐藏 我现在解随便来一个 Field field = ownerClass.getField("NETWORK_TYPE_GPRS"); // 这个参数是我理解为是实例的对象 int a = (Integer) field.get(mTelephonyManager); // 下面是一个超级bug的东西 // 怎么bug 呢 据说如果field是一个private我们是不可以调用的但是反射是可以的哦 //由于是final类型的 我们先在这里注释掉哦 /***field.set(mTelephonyManager, 2);**/ Log.i("jinjie","NETWORK_TYPE_GPRS == " + a); }
过程总结:
1、首先要找到类名,就是你要反射函数所在的类
2、找到方法,用getField(…)注意里边的参数
3、field.get(一个实例化对象),再进行必要的类型转换
参考自:http://blog.csdn.net/y_haiyang/article/details/9924925
0 0
- Android反射简单应用
- Java反射在Android中的简单应用
- Android反射的简单应用之BottomNavigationView
- 反射的简单应用
- C#反射简单应用
- Java反射-简单应用
- 反射简单的应用
- 反射的简单应用
- 反射的简单应用
- android 反射应用
- android 反射的应用
- android 反射应用
- android 反射应用
- Android 反射应用汇总
- Android 反射Field应用
- Android 反射Method应用
- Android 反射Construct应用
- Android 反射Method应用
- spring securitycontext稍微说说
- 深入Android动画-----属性动画
- 两台Linux远程拷贝数据--SCP
- web前台技术之间的关系html,css,javascript
- eclipse运行时内存不足
- Android反射简单应用
- sizeof与strlen的区别
- 上传图片,剪切,旋转
- Date类
- toj 4316 报数游戏
- 关于引用
- leecode 378. Kth Smallest Element in a Sorted Matrix java
- Spark Streaming源码解读之Receiver在Driver的精妙实现全生命周期彻底研究和思考
- Python初学者(零基础学习Python、Python入门)书籍、视频、资料、社区推荐