zoukankan      html  css  js  c++  java
  • setting.system-全局属性的设定

    SystemProperties跟Settings.System

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

    JAVA代码如下:

    import android.os.SystemProperties;
    
    //设定
    
    SystemProperties.set("persist.sys.language", "默认值");
    
    //读取
    String lang= SystemProperties.get("persist.sys.language");//string
    
    int lang = SystemProperties.getInt("persist.sys.language",10);
    
    boolean fastfoodenable = SystemProperties.getBoolean("persist.sys.fastfoodenable", false);//boolean

    创建与修改android属性用

    Systemproperties.set(name, value);

    获取android属性用

    Systemproperties.get(name);

    需要注意的是android属性的名称是有一定的格式要求的,

     前缀必须用systemcoreinitproperty_service.c中定义的前缀

    property_service.c的内容如下

    property_perms[] = { 
        { "net.rmnet0.",      AID_RADIO,    0 },
        { "net.gprs.",        AID_RADIO,    0 },
        { "net.ppp",          AID_RADIO,    0 },
        { "net.qmi",          AID_RADIO,    0 },
        { "net.lte",          AID_RADIO,    0 },
        { "net.cdma",         AID_RADIO,    0 },
        { "ril.",             AID_RADIO,    0 },
        { "persist.ril.",     AID_RADIO,    0 },
        { "persist.ril.cfu.querytype", AID_APP,   0 },
        { "mux.",             AID_RADIO,    0 },
        { "mux.",             AID_SYSTEM,   0 },
        { "mtk_telephony_mode_slot1",             AID_SYSTEM,   0 },
        { "mtk_telephony_mode_slot2",             AID_SYSTEM,   0 },
        { "gsm.",             AID_RADIO,    0 },
        { "persist.radio",    AID_RADIO,    0 },
        { "net.dns",          AID_RADIO,    0 },
        { "sys.usb.config",   AID_RADIO,    AID_SYSTEM },
        { "net.",             AID_SYSTEM,   0 },
        { "net.",             AID_DHCP,   0 },
        { "dev.",             AID_SYSTEM,   0 },
        { "runtime.",         AID_SYSTEM,   0 },
        { "hw.",              AID_SYSTEM,   0 },
        { "sys.",             AID_SYSTEM,   0 },
        { "sys.powerctl",     AID_SHELL,    0 },
        { "service.",         AID_SYSTEM,   0 },
        { "wlan.",            AID_SYSTEM,   0 },
        { "bluetooth.",       AID_BLUETOOTH,   0 },
        { "dhcp.",            AID_SYSTEM,   0 },
        { "bwc.mm.",          AID_SYSTEM,   0 },
        { "dhcp.",            AID_DHCP,     0 },
        { "debug.",           AID_SYSTEM,   0 },
        { "debug.",           AID_SHELL,    0 },
        { "log.",             AID_SHELL,    0 },
        { "service.adb.root", AID_SHELL,    0 },
        { "service.adb.tcp.port", AID_SHELL,    0 },
        { "persist.sys.",     AID_SYSTEM,   0 },
        { "persist.service.", AID_SYSTEM,   0 },
        { "persist.security.", AID_SYSTEM,   0 },
        { "persist.service.bdroid.", AID_BLUETOOTH,   0 },
        { "selinux."         , AID_SYSTEM,   0 },
        { "gps.",             AID_GPS,     AID_SYSTEM },
        { "persist.af.",      AID_MEDIA,   0 },

    进行系统属性设置的程序也必须有 system或root权限

    如果我们要添加一个property:例如:zhang

    路径:

    system/core/rootdir/init.rc

    它的内容如下

    on post-fs-data
        # We chown/chmod /data again so because mount is run as root + defaults
        chown system system /data
        chmod 0771 /data
        # We restorecon /data in case the userdata partition has been reset.
        restorecon /data
    
        # Avoid predictable entropy pool. Carry over entropy from previous boot.
        copy /data/system/entropy.dat /dev/urandom
    
        # Create dump dir and collect dumps.
        # Do this before we mount cache so eventually we can use cache for
        # storing dumps on platforms which do not have a dedicated dump partition.
        mkdir /data/dontpanic 0750 root log
    
        # Collect apanic data, free resources and re-arm trigger
        copy /proc/apanic_console /data/dontpanic/apanic_console
        chown root log /data/dontpanic/apanic_console
        chmod 0640 /data/dontpanic/apanic_console
    
        copy /proc/apanic_threads /data/dontpanic/apanic_threads
        chown root log /data/dontpanic/apanic_threads
        chmod 0640 /data/dontpanic/apanic_threads
    
        write /proc/apanic_console 1
        # If there is no fs-post-data action in the init.<device>.rc file, you
        # must uncomment this line, otherwise encrypted filesystems
        # won't work.
        # Set indication (checked by vold) that we have finished this action
        #setprop vold.post_fs_data_done 1

    在on post-fs-data 目录下

    setprop persist.sys.zhang 1//persist.sys 前缀名; 1为初始值

    PS:不同前缀名权限不同,这里就不一一说明;还有为什么要加载on post-fs-data目录下,这和int.rc的语法有关

    2 使用 Settings.System.putInt

    这种方式会保存变量到Settings 数据库中,飞行模式等的开关就是用这种方式实现的。

    首先需要定义一个系统属性值

    路径

    frameworks/base/core/java/android/provider/Settings.java

    添加一个属性标签

      public static final String QS_DYNAMIC_WIFI = "qs_dyanmic_wifi";
    
            /**  
             * Quick Settings Quick Pulldown
             *
             * @hide
             */
            public static final String QS_QUICK_PULLDOWN = "qs_quick_pulldown";
    
            /**  
             * Quick Settings Collapse Pane
             *
             * @hide
             */
            public static final String QS_COLLAPSE_PANEL = "qs_collapse_panel";
    
            /**  
             * Quick Settings Quick access ribbon
             *
             * @hide
             */
            public static final String QS_QUICK_ACCESS = "qs_quick_access";
    
    
    //别忘了在这里面提添加
     public static final String[] SETTINGS_TO_BACKUP = {
                QS_QUICK_PULLDOWN
                STAY_ON_WHILE_PLUGGED_IN,   // moved to global
                WIFI_USE_STATIC_IP,
                WIFI_STATIC_IP,
                WIFI_STATIC_GATEWAY,
                WIFI_STATIC_NETMASK,
                WIFI_STATIC_DNS1,
                WIFI_STATIC_DNS2,
                BLUETOOTH_DISCOVERABILITY,
                BLUETOOTH_DISCOVERABILITY_TIMEOUT,
                DIM_SCREEN,
                SCREEN_OFF_TIMEOUT,
                SCREEN_BRIGHTNESS,
                SCREEN_BRIGHTNESS_MODE,
                SCREEN_AUTO_BRIGHTNESS_ADJ,
                VIBRATE_INPUT_DEVICES,
                MODE_RINGER_STREAMS_AFFECTED,
                VOLUME_VOICE,
                VOLUME_SYSTEM,
                VOLUME_RING,
                VOLUME_MUSIC,
                VOLUME_ALARM,
    }

    1)获取方法如下:

    Settings.System.getInt(getContentResolver(), Settings.System.QS_QUICK_PULLDOWN,0);

    第三个参数是默认值

    2)设置

    Settings.System.putInt(getContentResolver(),Settings.System.QS_QUICK_PULLDOWN, 1);

    代码中使用的时候,需要导入包

    需要import android.provider.Settings;

  • 相关阅读:
    react路由组件&&非路由组件
    react函数式组件(非路由组件)实现路由跳转
    react使用antd组件递归实现左侧菜单导航树
    【LeetCode】65. Valid Number
    【LeetCode】66. Plus One (2 solutions)
    【LeetCode】68. Text Justification
    【LeetCode】69. Sqrt(x) (2 solutions)
    【LeetCode】72. Edit Distance
    【LeetCode】73. Set Matrix Zeroes (2 solutions)
    【LeetCode】76. Minimum Window Substring
  • 原文地址:https://www.cnblogs.com/zhangshuli-1989/p/zhangshuli_setting_150414132.html
Copyright © 2011-2022 走看看