jQuery鼠标指针特效

Android系统属性-Settings.system和SystemProperties

Android圣经

Java代码--应用层

方法:SystemProperties.get 或者 SystemProperties.set
如果属性名称以“ro.”开头,那么这个属性被视为只读属性。一旦设置,属性值不能改变。
如果属性名称以“persist.”开头,当设置这个属性时,其值也将写入/data/property。

这个系统属性全局都能用,包括jni和底层的C。
在c++中就是对应JAVA的两个函数就是property_set, property_get,其实JAVA是通过JNI调用这两个函数的。

java:

import android.os.SystemProperties;

SystemProperties.set("persist.sys.language", "en");
String lang= SystemProperties.get("persist.sys.language");

//获取方法:
String wwt = SystemProperties.getString("persist.sys.wwt", "1");
//设置方法:
SystemProperties.set("persist.sys.wwt", "0");


C:
#include <cutils/properties.h>

property_set("persist.sys.language.no", "1");
char wwt[PROPERTY_VALUE_MAX];
property_get("persist.sys.language.no", wwt, "0");
int i = atoi(wwt);

在adb shell可以通过以下的命名读取和修改
#getprop  persist.sys.language.no
#setprop   persist.sys.language.no 0


//ro.telephony.default_network 是ro属性的值,可以被修改,是因为它被过滤了.
// 其它想修改的 ,可以参考它

/system/core/init/property_service.cpp

static uint32_t PropertySet(const std::string& name, const std::string& value, std::string* error) {
    size_t valuelen = value.size();

    if (!IsLegalPropertyName(name)) {
        *error = "Illegal property name";
        return PROP_ERROR_INVALID_NAME;
    }

    if (auto result = IsLegalPropertyValue(name, value); !result.ok()) {
        *error = result.error().message();
        return PROP_ERROR_INVALID_VALUE;
    }

    prop_info* pi = (prop_info*) __system_property_find(name.c_str());
    if (pi != nullptr) {
        // ro.* properties are actually "write-once".
        if (StartsWith(name, "ro.")) {
            //例如这里排除了ro.telephony.default_network
            if(!StartsWith(name, "ro.telephony.default_network")){
                *error = "Read-only property was already set";
                return PROP_ERROR_READ_ONLY_PROPERTY;
            }
        }

        __system_property_update(pi, value.c_str(), valuelen);
    } else {
        int rc = __system_property_add(name.c_str(), name.size(), value.c_str(), valuelen);
        if (rc < 0) {
            *error = "__system_property_add failed";
            return PROP_ERROR_SET_FAILED;
        }
    }

    // Don't write properties to disk until after we have read all default
    // properties to prevent them from being overwritten by default values.
    if ((persistent_properties_loaded && StartsWith(name, "persist.")) || (StartsWith(name, "ro.telephony.default_network"))) {
        WritePersistentProperty(name, value);
    }
    // If init hasn't started its main loop, then it won't be handling property changed messages
    // anyway, so there's no need to try to send them.
    auto lock = std::lock_guard{accept_messages_lock};
    if (accept_messages) {
        PropertyChanged(name, value);
    }
    return PROP_SUCCESS;
}

Setting.system

posted @   僵小七  阅读(308)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!
点击右上角即可分享
微信分享提示