1,简介
在Android系统中,settings命令用于管理设备设置。这些命令可以与`Settings`提供者(`Settings provider`)交互,后者是一个用于存储和检索系统设置的系统服务。Settings provider在Android系统中可以被看作是一个特殊的数据库,它用于存储和检索系统设置。这个数据库是为系统和应用程序提供的键值对存储服务,用于保存用户的偏好设置、系统配置和其他各种参数。Settings provider 的设计允许它高效地处理大量的设置项,并且能够确保设置的一致性和安全性。此外,它还支持监听设置项的变化,这样应用程序可以在设置发生变化时接收通知并做出相应的响应。
Settings provider 维护了三个主要的命名空间,即 system、secure 和 global,每个命名空间都有其特定的用途和访问权限:
-system:存储系统级别的设置,通常包括设备状态、系统行为等,如屏幕超时时间、Wi-Fi设置等。这些设置通常是所有应用程序都可以读取的,但只有具有特定权限的应用程序才能修改它们。
-secure:存储敏感设置,如锁屏密码、PIN码等。这些设置对所有应用程序都是不可见的,只有系统应用程序和具有特定权限的应用程序才能访问和修改它们。
-global:存储全局设置,如数据漫游选项、自动时间等。这些设置对所有应用程序都是可见的,并且可以被具有特定权限的应用程序修改。
2,settings命令说明
Settings provider (settings) commands:helpPrint this help text.get [--user <USER_ID> | current] NAMESPACE KEYRetrieve the current value of KEY.put [--user <USER_ID> | current] NAMESPACE KEY VALUE [TAG] [default]Change the contents of KEY to VALUE.TAG to associate with the setting.{default} to set as the default, case-insensitive only for global/secure namespacedelete NAMESPACE KEYDelete the entry for KEY.reset [--user <USER_ID> | current] NAMESPACE {PACKAGE_NAME | RESET_MODE}Reset the global/secure table for a package with mode.RESET_MODE is one of {untrusted_defaults, untrusted_clear, trusted_defaults}, case-insensitivelist NAMESPACEPrint all defined keys.NAMESPACE is one of {system, secure, global}, case-insensitive
相关参数说明:
- `--user <USER_ID>`:这个参数用于指定操作应该针对特定的用户。在Android多用户环境中,不同的用户可以有不同的设置。如果不指定用户ID,可以使用`current`来代表当前正在操作的用户。
- `system`:这是设置命名空间之一,用于存储系统级别的设置,。这些设置对所有应用都是可见的,但只有具有特定权限的应用才能修改它们。
- `secure`:这个命名空间用于存储敏感设置,比如密码、PIN码等。这些设置对所有应用都是不可见的,只有系统应用和具有特定权限的应用才能访问和修改它们。
- `global`:这个命名空间用于存储全局设置,这些设置对所有应用都是可见的,并且可以被具有特定权限的应用修改。它们通常包括一些系统范围的设置,如日期和时间格式。
以下是一些具体的命令及其作用:
- `get`:检索特定键(KEY)的当前值。如果需要针对特定用户,可以使用`--user <USER_ID>`参数。
- `put`:更改特定键(KEY)的值为特定的值(VALUE)。可以为设置指定一个标签(TAG),或者将其设置为默认值(使用`default`参数)。
- `delete`:删除特定键(KEY)的条目。
- `reset`:重置特定命名空间(如`global`或`secure`)的设置。可以为特定应用重置设置,或者使用`RESET_MODE`参数来指定重置模式。
- `list`:列出特定命名空间(`system`、`secure`或`global`)中定义的所有键。
这些命令通常在Android开发和系统管理中使用,以编程方式修改或检索系统设置。
3,实战-修改应用崩溃弹框配置
场景: 在运行qq阅读时,启动异常了,第一次启动时,不会弹窗,而是直接退出,第二启动才会弹窗,其实这个可以修改系统配置来改变这种行为。
在Android系统中,`show_first_crash_dialog`是一个系统设置项,它通常用于控制当应用程序首次崩溃时是否显示崩溃对话框。这个设置项属于`global`命名空间,因为它影响的是整个系统的全局行为。如果你想要通过settings命令来管理这个设置项,你可以使用以下命令:
- 获取`show_first_crash_dialog`的当前值
adb shell settings get global show_first_crash_dialog
这将返回`show_first_crash_dialog`的当前值,可能是`0`(不显示)或`1`(显示)。- 设置`show_first_crash_dialog`的值
adb shell settings put global show_first_crash_dialog 1
这将设置系统在应用首次崩溃时显示崩溃对话框。将`1`替换为`0`可以关闭这个对话框。- 删除`show_first_crash_dialog`的设置(如果需要重置为默认值):
adb shell settings delete global show_first_crash_dialog
这将删除`show_first_crash_dialog`的当前值,使系统使用默认设置。
所以只要执行settings put global show_first_crash_dialog 1, 应用如果启动异常,第一次启动异常就会报错。
4,其他常见配置
settings get system screen_off_timeout 获取屏幕的休眠时间
settings put system screen_off_timeout 999999999 设置屏幕的睡眠时间,也是用来设置系统的睡眠时间(下次断电上电后还是有效的)
settings get secure default_input_method 获得系统默认输入法
settings get system screen_brightness_mode 获取屏幕亮度模式
settings get system screen_brightness 获取屏幕亮度
settings put system screen_brightness 150 设置屏幕亮度为150
settings get global auto_time 获取日期时间选项中通过网络获取时间的状态
settings put global auto_time 0
settings get global wifi_on 获取系统wifi是否打开
settings put global wifi_on 0 关闭wifi
settings get global airlpane_mode_on 获取系统是否处于飞行模式
settings get secure android_id 获取android_id