Android SystemProperties和Settings.System介绍

本文介绍了 Android 系统中 SystemProperties 和 Settings.System 的使用方法,包括如何在应用间传递信息,以及设置和获取系统级配置的具体实现。

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

Android SystemProperties和Settings.System介绍,不同应用间传递信息

1 使用 SystemProperties.get

这中方法在framework里面 经常见到。

特别属性

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

在c++中就是对应JAVA的两个函数就是property_set, property_get,其实JAVA是通过JNI调用这两个函数的。

JAVA

import android.os.SystemProperties;

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

C

#include <cutils/properties.h>

property_set("persist.sys.language", "zh");
property_get("persist.sys.language", propLang, "en");

在adb shell可以通过以下的命名读取和修改

#getprop  persist.sys.language

#setprop   persist.sys.language  zh

2 使用 Settings.System.putInt 

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

在AndroidManifest.xml中包含权限:
<uses-permission android:name=”android.permission.WRITE_SETTINGS” />
在需要发送数据的java文件中,包含:
import android.provider.Settings;
import android.content.ContentResolver;
ContentResolver resolver = mContext.getContentResolver();
Settings.System.putInt(resolver,”inputFlag”,1);
同理,在接收数据端:
Settings.System.getInt(resolver,”inputFlag”,3);
mContext为所在应用的上下文。

<think>我们正在处理一个关于Android系统设置默认值的问题。用户想知道在刷机时如何设置Settings.System的默认值。根据提供的引用,我们可以总结出以下方法: 1. **修改系统属性文件(default.xml)**:在Android系统中,可以通过在`default.xml`文件中添加字段的默认值来设置系统设置的初始值。编译系统后刷机,新增的设置字段就会生效(引用[1])。 2. **通过代码在系统启动时设置默认值**:在特定的系统广播接收器(如`RestoreRotationReceiver`)中,可以在系统启动时(或其他时机)通过代码设置默认值。例如,在`onReceive`方法中使用`Settings.Global.putInt`来设置全局设置的默认值(引用[2])。 3. **了解系统设置的存储位置**:系统设置(包括Settings.System)的存储位置,例如WiFi蓝牙的配置信息存储在特定的XML文件中(引用[3])。但请注意,这些文件通常是在系统运行时生成的,而不是在刷机时直接设置。 对于刷机时设置Settings.System的默认值,最常用的方法是修改`default.xml`文件(通常位于`/packages/apps/Settings/res/values/`目录下)。因为Settings.System的设置属于系统设置,所以可以在该文件中添加`<integer>`, `<string>`, `<bool>`等类型的设置项。 **具体步骤**: 1. 找到`default.xml`文件(路径可能因Android版本而异,常见路径为`packages/apps/Settings/res/values/defaults.xml`或类似路径)。 2. 在文件中添加你需要的设置项。例如,要设置一个名为`screen_brightness`的整型默认值为100,可以添加: ```xml <integer name="screen_brightness">100</integer> ``` 3. 重新编译系统并刷机。 另外,如果设置项是系统属性(System Properties),也可以通过`init`进程或`system_properties`文件来设置,但Settings.System通常不直接使用系统属性,而是通过ContentProvider存储在数据库中。 **注意**:在Android高版本中,有些设置可能被迁移到Settings.Global或Settings.Secure中,需要根据设置的类型选择正确的范围。Settings.System用于用户可修改的系统设置,如亮度、音量等。 **示例代码**(在`default.xml`中添加设置): ```xml <resources> ... 其他默认设置 ... <!-- 屏幕亮度默认值 --> <integer name="screen_brightness">100</integer> <!-- 是否开启自动旋转 --> <bool name="accelerometer_rotation">true</bool> </resources> ``` **另一种方法**:在系统启动时通过代码设置。例如,在系统启动完成的广播接收器中设置: ```java public class BootReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 设置Settings.System的默认值 Settings.System.putInt(context.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, 100); } } ``` 但这种方法需要在每次启动时都执行,且可能会被用户后续修改。 **总结**:刷机时设置默认值推荐使用修改`default.xml`文件的方法,因为这是系统初始化的默认值,不会在每次启动时覆盖用户设置(除非恢复出厂设置)。 §§相关问题§§ 1. 如何为Android系统添加一个新的设置项? 2.Android高版本中,修改系统默认设置的方法有什么变化? 3. Settings.System, Settings.GlobalSettings.Secure有什么区别?</think>### 如何在刷机时设置 Android Settings.System 默认值 在 Android 系统开发中,设置 Settings.System 的默认值主要通过以下两种方法实现: #### 方法 1:修改 default.xml 配置文件(推荐) 这是最标准的设置默认值方式,修改后需重新编译系统: 1. 定位配置文件: `packages/apps/Settings/res/values/defaults.xml` 2. 添加默认值条目: ```xml <integer name="screen_brightness">80</integer> <!-- 屏幕亮度默认值 --> <bool name="haptic_feedback_enabled">true</bool> <!-- 触感反馈开关 --> ``` 3. 编译刷机: 修改后重新编译系统镜像并刷机,新设置项会自动生效[^1]。 > **原理**:系统首次启动时,`SettingsProvider` 会读取这些默认值写入系统数据库 `/data/system/users/0/settings_system.xml`[^3]。 #### 方法 2:在系统服务中动态设置 通过广播接收器在系统启动时注入默认值: ```java // 在系统服务(如 SystemUI)中添加 public class BootReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 设置屏幕旋转默认值 Settings.System.putInt( context.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 1 // 1=启用, 0=禁用 ); // 设置USB调试默认开启 Settings.Global.putInt( context.getContentResolver(), Settings.Global.ADB_ENABLED, 1 )[^2]; } } ``` > **注意**:需在 `AndroidManifest.xml` 注册 `BOOT_COMPLETED` 广播权限。 --- ### 关键注意事项 1. **作用域区分**: - `Settings.System`:用户级系统设置(亮度、铃声等) - `Settings.Global`:设备级全局设置(调试模式等) - `Settings.Secure`:安全敏感设置(位置服务等) 2. **存储位置**: ```bash /data/system/users/0/settings_system.xml # System设置 /data/misc/apexdata/com.android.settings/ # 高版本全局设置[^3] ``` 3. **版本兼容**: - Android 5.0+ 需检查 SELinux 策略 - Android 10+ 推荐使用 `DeviceConfig` API - 动态设置方法在高版本可能受限[^1] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值