Android通過Java反射獲取系統屬性值
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的反射機制, 請參考相關文件. 本文只表怎樣獲得系統屬性值.