通过反射来读写build.prop参数

通过反射来读写build.prop参数

build.prop里面有很多关于手机参数的相关配置信息,其对应的参数读写是在android.os.SystemProperties.java这个类中完成。除非我们的应用有系统签名,不然的话不能直接调用里面的方法。但是通过java的反射我们就可以很容易的去调用。
我们先来看一下SystemProperties.java这个类的两个关键的方法get和set:

/**
     * Get the value for the given key.
     * @return an empty string if the key isn't found
     * @throws IllegalArgumentException if the key exceeds 32 characters
     */
    public static String get(String key) {
        if (key.length() > PROP_NAME_MAX) {
            throw new IllegalArgumentException("key.length > " + PROP_NAME_MAX);
        }
        return native_get(key);
    }
/**
     * Set the value for the given key.
     * @throws IllegalArgumentException if the key exceeds 32 characters
     * @throws IllegalArgumentException if the value exceeds 92 characters
     */
    public static void set(String key, String val) {
        if (key.length() > PROP_NAME_MAX) {
            throw new IllegalArgumentException("key.length > " + PROP_NAME_MAX);
        }
        if (val != null && val.length() > PROP_VALUE_MAX) {
            throw new IllegalArgumentException("val.length > " +
                PROP_VALUE_MAX);
        }
        native_set(key, val);
    }

get方法传入一个键,然后就可以获取这个键对应的值(在adb shell里面我们可以通过getprop命令来查看所有的键以及对应的值)。
set方法参数是对应的键和值。
根据这些信息,我们可以很容易来通过反射来读写:

// 读
 private String getValueFromProp() {
        String value = "";
        Class<?> classType = null;
        try {
            classType = Class.forName("android.os.SystemProperties");
            //拿到get方法,此方法传入一个String类型参数。
            Method getMethod = classType.getDeclaredMethod("get", new Class<?>[]{String.class});
            // 键值persist.sys.sb.hide,其他的也可以。
            value = (String) getMethod.invoke(classType, new Object[]{"persist.sys.sb.hide"});
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return value;
    }
// 写
 private void setValueToProp() {
        Class<?> classType = null;
        try {
            classType = Class.forName("android.os.SystemProperties");
            //拿到set方法,此方法传入两个String类型参数,一个是键,一个是设定的值。
            Method getMethod = classType.getDeclaredMethod("set", new Class[]{String.class, String.class});
            // 对persist.sys.sb.hide这一项设定值为1。
            getMethod.invoke(classType, new String[]{"persist.sys.sb.hide", "1"});
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }

    }
阅读更多
个人分类: Java android
想对作者说点什么? 我来说一句

利用反射来打印或导出excel

2018年03月07日 49.31MB 下载

jdbc映射jia包

2013年08月06日 8KB 下载

通过反射获取Context实例的Demo

2015年10月14日 656KB 下载

没有更多推荐了,返回首页

不良信息举报

通过反射来读写build.prop参数

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭