给android添加系统属性:Settings.system和SystemProperties

本文介绍了如何在Android系统中自定义全局标志或变量。通过Settings.system和SystemProperties两种方式,可以轻松实现系统属性的添加与修改。

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

android源码开发中,常常要用到一些全局标志或者说变量,这时候我们可以给android系统添加自己想要的属性。

1.Settings.system

这种系统属性我们经常用到,例如飞行模式的开启和关闭,我们就是去改变Settings.system.AIRPLANE_MODE_ON 的值。

下面就介绍下我们怎样去定义一个系统属性。例如要添加一个属性名为“SILVAN_LIU”

路径:frameworks/base/core/java/android/provider/Settings.java

  1. public static final String SILVAN_LIU = "silvan_liu";  
  2.  public static final String[] SETTINGS_TO_BACKUP ={  
  3.             ~  
  4.        +SILVAN_LIU  
  5.               ~     
  6. }  
	 public static final String SILVAN_LIU = "silvan_liu";
 	 public static final String[] SETTINGS_TO_BACKUP ={
   	    	~
	        +SILVAN_LIU
                ~   
		}
这样添加后,你就是可以通过Settings.System.getInt(getContentResolver(), Settings.System.SILVAN_LIU,0) 和 Settings.System.getInt(getContentResolver(), Settings.System.SILVAN_LIU,0 )去得到和设定SILVAN_LIU的属性值。

2.SystemProperties

创建与修改android属性用Systemproperties.set(name, value),获取android属性用Systemproperties.get(name),需要注意的是android属性的名称是有一定的格式要求的,如下: 前缀必须用system\core\init\property_service.c中定义的前缀 ,进行系统属性设置的程序也必须有system或root权限

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

路径:system/core/rootdir/int.rc

在on post-fs-data 目录下

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

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


以上是我实际项目中运用到的地方,可能认识的不够深刻,还需继续摸索。

<think>嗯,用户想了解android.os.SystemProperties.getBoolean的使用方法示例。首先,我需要回忆一下这个方法的参数返回值。记得这个方法有两个参数,第一个是键(key),第二个是默认值(def)。当系统属性不存在或无法解析时,会返回这个默认值。 接下来,我需要确认权限问题。因为系统属性通常受保护,普通应用可能没有权限读取或写入某些属性。特别是像ro.debuggable这样的属性,可能需要系统签名或系统权限才能访问。这一点在引用[1][3]中都有提到,所以必须提醒用户注意权限限制。 然后,用户可能需要一个实际的示例代码。我应该提供一个简单的Java示例,展示如何调用getBoolean方法。例如,检查系统是否处于调试模式,使用默认值false。同时,要指出需要导入android.os.SystemProperties类,但根据引用[2],有些情况下这个类可能不可见,特别是在非系统应用中。这时候可能需要反射或者其他方法,但用户的问题主要是关于直接使用,所以先给出标准用法,再提到可能的兼容性问题。 另外,常见问题部分需要涵盖类找不到的情况,权限不足的解决方法,以及如何处理默认值。比如,如果遇到类缺失,可以考虑反射或系统级SDK;权限问题可能需要系统签名或提升应用权限。这些信息在引用[2][3]中都有涉及,需要整合到回答中。 还要注意用户可能是在开发系统应用或需要特定系统权限的应用,所以示例解决方案需要针对这些场景。比如,系统应用可以直接使用,而普通应用可能需要其他变通方法。同时,确保示例代码语法正确,避免错误。 最后,生成相关问题时要围绕SystemProperties的其他方法、权限问题、替代方案等,帮助用户扩展了解相关内容。确保引用标记正确,比如权限问题引用[1][3],类找不到引用[2]。</think>### android.os.SystemProperties.getBoolean 方法解析 #### 1. 方法定义 `SystemProperties.getBoolean` 用于读取Android系统属性中的布尔值,语法为: $$boolean\ getBoolean(String\ key,\ boolean\ def)$$ - **参数说明**: - `key`:系统属性名称(如`persist.sys.debug`) - `def`:当属性不存在或无法解析时的默认返回值 #### 2. 使用条件 - **系统级权限**:需`android.uid.system`权限或系统签名[^1][^3] - **可见性限制**:部分属性仅对系统进程可见(如`ro.`开头的属性) #### 3. 示例代码 ```java // 检查系统调试模式状态 boolean isDebuggable = SystemProperties.getBoolean("ro.debuggable", false); Log.d("SystemProp", "Debug mode: " + isDebuggable); ``` #### 4. 常见问题解决 | 问题场景 | 解决方案 | |---------|----------| | 类找不到错误 | 添加`frameworks-base-core.jar`依赖[^2] | | 权限不足 | 配置`AndroidManifest.xml`添加系统权限[^3] | | 返回值异常 | 检查属性命名规范及作用域限制 | #### 5. 兼容性建议 对于非系统应用,建议改用`Settings.Global`或反射机制获取属性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值