android.os.SystemProperties类可以用于获取系统的属性值, 然而这个类是内部使用的, 在应用程序中我们无法导入此类.
本文通过Java反射机制, 实现了调用这个类的方法, 从而获取系统属性值.
闲话休提, 书归正传.程序员最想看到的还是代码.下面就贴出了我写的一个方法.
public String get(String key) {
Class<?> clazz;
try {
clazz = Class.forName("android.os.SystemProperties");
Method method = clazz.getDeclaredMethod("get", String.class);
return (String) method.invoke(clazz.newInstance(), key);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
return "";
}
代码中, 首先获取android.os.SystemProperties这个类, 因为这个类的class文件已经被dalvik加载了, 所以可以找到这个类.
然后获取这个类中的get方法的实例method, 最后在clazz这个对象上调用method方法.
Method.invoke方法第一个参数是一个android.os.SystemProperties类的对象, 后面是变参,代表了get方法的参数.返回值是
Object类的对象, 需要根据实际情况进行恰当的转型.关于Java的反射机制, 请参考相关文档. 本文只表怎样获得系统属性值.