Android源码--SystemProperties 和 Settings.system

本文探讨了Android中SystemProperties和Settings.system的使用。通过设置系统时区的例子,解释了SystemProperties如何在权限限制下修改系统属性。同时介绍了以`ro.`和`persist.`开头的属性特性。另一方面,Settings.system涉及对Settings数据库的操作,通过ContentResolver进行读写。此外,文章还提及如何添加自定义全局变量,例如调整系统亮度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,SystemProperties 

Android源码开发中大量存在SystemProperties.set()、SystemProperties.get(),这两个方法用于对系统属性的读取。这里以Android设置系统时区为例简单介绍一下SystemProperties的使用。

Settings/src/com/android/settings/ZonePicker.java 

public void onListItemClick(ListView listView, View v, int position, long id) {
        ...
        final AlarmManager alarm = (AlarmManager) activity.getSystemService(Context.ALARM_SERVICE);
        alarm.setTimeZone(tzId);
        ...
    }



点击时区列表后调用AlarmManagerService的setTimeZone进行修改时区,设置系统属性值,并且发送修改时区广播.

frameworks/base/services/java/com/android/server/AlarmManagerService.java

public void setTimeZone(String tz) {
        mContext.enforceCallingOrSelfPermission("android.permission.SET_TIME_ZONE","setTimeZone");//判断权限
        try {
            if (TextUtils.isEmpty(tz)) return;
            synchronized (this) {
                String current = <strong>SystemProperties.get("persist.sys.timezone")//获取系统之前的时区
                if (current == null || !current.equals(zone.getID())) {
                    timeZoneWasChanged = true;
                    SystemProperties.set("persist.sys.timezone", zone.getID()); //设置最新的时区
                }
            }
            if (timeZoneWasChanged) {
  
<span style="white-space:pre">		</span>//发送修改时区广播
                Intent intent = new Intent(Intent.ACTION_TIMEZONE_CHANGED);
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值