Java反射获取Android系统属性值
来源:互联网 发布:手机屏幕写字的软件 编辑:程序博客网 时间:2024/05/17 17:58
- 目录
- 反射定义
- 为何需要反射
- 反射方法Method
- getDeclaredMethod方法
- getMethod方法
- 参数解释
- invoke方法
- Android 反射应用
反射定义
“反射”(Reflection)能够让运行于JVM中的程序检测和修改运行时的行为。
为何需要反射
反射带来的好处包括:
- 在运行时检测对象的类型。
- 动态构造某个类的对象。
- 检测类的属性和方法。
- 任意调用对象的方法。
- 修改构造函数、方法、属性的可见性。
反射方法Method
getDeclaredMethod方法
声明如下:
- 1
- 1
解释:
返回一个Method对象,该对象反映此Class对象所表示的类或接口的指定已声明方法。
1. name : 是一个String,它指定所需方法的简称。
2. parameterTypes:是一个Class对象的变长数组,它按声明顺序标识该方法的形参类型。
注意:
getDeclaredMethod获取该类声明的public方法或者protected方法,但是不包括继承的方法。
getMethod方法
声明如下:
- 1
- 1
解释:
返回一个Method对象,该对象反映此Class对象所表示的类或接口的指定公共成员方法。
1. name : 是一个String,它指定所需方法的简称。
2. parameterTypes:是一个Class对象的变长数组,它按声明顺序标识该方法的形参类型。
参数解释
name参数就不需要解释了,就是调用类的方法名称。
可能很多同学刚接触这个方法的时候,会对parameterTypes参数产生疑问,例如这个参数为什么是Class泛型变长数组,其实举个例子就很好理解了。
假设我们要反射的方法有4个参数,函数原型如下:
- 1
- 1
那我们通过返回获取这个Method对象的时候,传的parameterTypes如下所示:
- 1
- 1
所以,parameterTypes其实就是对方法形参的类型抽象。
invoke方法
声明如下:
- 1
- 1
解释:
Method类的invoke(Object obj, Object… args)方法接收的参数必须为对象。其中:
1. obj : 从中调用底层方法的对象。
2. args :用于方法调用的参数。
Android 反射应用
我们知道,Android有些类是没有在SDK中开放的,例如你需要获取系统属性,需要调用到SystemProperties类的get方法,但是这个类并没有在SDK中公开,我们可以在Android源码中查看一下这个类:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
可以看到,这个前面有一个@hide标签,所以这个类是没法直接在代码中调用的。
但是,在Android应用中,很多时候我们需要获取到手机类型属性(ro.product.model)。所以,这个时候,我们就需要在应用层反射SystemProperties类,调用get方法。具体实现源码如下:
- Java反射获取Android系统属性值
- Java反射获取Android系统属性值
- Android通过Java反射获取系统属性值
- 利用反射机制获取android系统属性值
- Android 应用利用反射机制获取/设置系统属性值
- Java反射机制获取系统@Hide属性
- Java反射机制获取系统@Hide属性
- Java反射机制获取系统@Hide属性
- java 利用反射 获取系统属性
- java反射获取属性值
- java获取反射获取私有属性值
- Java反射获取类的属性值
- android 利用反射获取当前系统sdk版本等属性
- android 利用反射获取当前系统sdk版本等属性
- android 利用反射获取当前系统sdk版本等属性
- Android : 反射机制获取或设置系统属性(SystemProperties)
- Android : 反射机制获取或设置系统属性(SystemProperties)
- Android : 反射机制获取或设置系统属性(SystemProperties)
- LeetCode 396. Rotate Function
- LeetCode Max Consecutive Ones
- java从入门到弃坑第四天
- C# 启动调试 开始执行(不调试)多线程程序执行效果不一样 Mutex(已解决)
- 软件工程从头学起(大数据方向)
- Java反射获取Android系统属性值
- fatal: unable to access 'https://github.com/taoge1024/kityminder.git/': SSL cert ificate problem: un
- 高斯日记
- 推荐一个能够自动打开子项的ListView
- 深度剖析:Java POJO Bean 对象与 Web Form 表单的自动装配
- Mat类型与IplImage之间的转换
- JAVA(4)——数字相加
- 0405-Label标签
- 《Android学习笔记》Android Studio导入org.apache.http.legacy.jar教程/导入API教程