1. 程式人生 > >Android通過Java反射獲取系統屬性值

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