Android settings
setting数据库主要使用 SettingsProvider+DatabaseHelper 实现,类似的实现还有 通讯录、通话记录
文件位于:
frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\SettingsProvider.java
frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java
setting 数据库的名称为 settings.db ,里面包含三张表 分别为:system、secure、global
Global:所有的偏好设置对系统的所有用户公开,第三方APP有读没有写的权限;
System:包含各种各样的用户偏好系统设置,第三方APP有读没有写的权限;
Secure:安全性的用户偏好系统设置,第三方APP有读没有写的权限。
其中settings_global.xml 、settings_secure.xml 、settings_system.xml 对应/frameworks/base/core/java/android/provider/Settings.java中的三个内部类:Global、Secure、System。
settings_global.xml 、settings_secure.xml 、settings_system.xml 位于 /data/system/users/0/ 下
这里需要再关注一个文件 frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\SettingsProvider.java
在这个文件中:定义了各数据库对应的xml文件
private static final String SETTINGS_FILE_GLOBAL = "settings_global.xml"; private static final String SETTINGS_FILE_SYSTEM = "settings_system.xml"; private static final String SETTINGS_FILE_SECURE = "settings_secure.xml"; private static final String SETTINGS_FILE_SSAID = "settings_ssaid.xml"; private static final String SETTINGS_FILE_CONFIG = "settings_config.xml";
final File globalSettingsFile = mSettingsRegistry.getSettingsFile(makeKey(SETTINGS_TYPE_GLOBAL, UserHandle.USER_SYSTEM)); final File systemSettingsFile = mSettingsRegistry.getSettingsFile(makeKey(SETTINGS_TYPE_SYSTEM, UserHandle.USER_SYSTEM)); final File secureSettingsFile = mSettingsRegistry.getSettingsFile(makeKey(SETTINGS_TYPE_SECURE, UserHandle.USER_SYSTEM)); final File ssaidSettingsFile = mSettingsRegistry.getSettingsFile(makeKey(SETTINGS_TYPE_SSAID, UserHandle.USER_SYSTEM)); final File configSettingsFile = mSettingsRegistry.getSettingsFile(makeKey(SETTINGS_TYPE_CONFIG, UserHandle.USER_SYSTEM));
并在getSettingsFile方法中 读取对应的xml文件
private File getSettingsFile(int key) {if (isConfigSettingsKey(key)) {final int userId = getUserIdFromKey(key);return new File(Environment.getUserSystemDirectory(userId),SETTINGS_FILE_CONFIG);} else if (isGlobalSettingsKey(key)) {final int userId = getUserIdFromKey(key);return new File(Environment.getUserSystemDirectory(userId),SETTINGS_FILE_GLOBAL);} else if (isSystemSettingsKey(key)) {final int userId = getUserIdFromKey(key);return new File(Environment.getUserSystemDirectory(userId),SETTINGS_FILE_SYSTEM);} else if (isSecureSettingsKey(key)) {final int userId = getUserIdFromKey(key);return new File(Environment.getUserSystemDirectory(userId),SETTINGS_FILE_SECURE);} else if (isSsaidSettingsKey(key)) {final int userId = getUserIdFromKey(key);return new File(Environment.getUserSystemDirectory(userId),SETTINGS_FILE_SSAID);} else {throw new IllegalArgumentException("Invalid settings key:" + key);}}
SettingsProvider和SystemProperties有以下不同点: 1、数据保存方式不同:SystemProperties的数据保存属性文件中(/system/build.prop等),开机后会被加载到system properties store;SettingsProvider的数据保存在文件/data/system/users/0/settings_***.xml和数据库settings.db中; 2、作用范围不同:SystemProperties可以实现跨进程、跨层次调用,即底层的c/c++可以调用,java层也可以调用;SettingProvider只能能在java层(APP)使用; 3、公开程度不同:SettingProvider有部分功能上层第三方APP可以使用(对于加了@hide标记的第三方APP仅可读,不可修改),SystemProperties上层第三方APP不可以使用。
secure表中存有:
Settings.Secure.ADB_ENABLED, Settings.Secure.ANDROID_ID, Settings.Secure.BLUETOOTH_ON, Settings.Secure.DATA_ROAMING,数据漫游(手机里设置的) Settings.Secure.DEVICE_PROVISIONED, Settings.Secure.HTTP_PROXY, Settings.Secure.INSTALL_NON_MARKET_APPS, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, Settings.Secure.LOGGING_ID, Settings.Secure.NETWORK_PREFERENCE, Settings.Secure.PARENTAL_CONTROL_ENABLED, Settings.Secure.PARENTAL_CONTROL_LAST_UPDATE, Settings.Secure.PARENTAL_CONTROL_REDIRECT_URL, Settings.Secure.SETTINGS_CLASSNAME, Settings.Secure.USB_MASS_STORAGE_ENABLED, Settings.Secure.USE_GOOGLE_MAIL, Settings.Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, Settings.Secure.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY, Settings.Secure.WIFI_NUM_OPEN_NETWORKS_KEPT, Settings.Secure.WIFI_ON, Settings.Secure.WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE, Settings.Secure.WIFI_WATCHDOG_AP_COUNT, Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS, Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED, Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS, Settings.Secure.WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT, Settings.Secure.WIFI_WATCHDOG_MAX_AP_CHECKS, Settings.Secure.WIFI_WATCHDOG_ON, Settings.Secure.WIFI_WATCHDOG_PING_COUNT, Settings.Secure.WIFI_WATCHDOG_PING_DELAY_MS, Settings.Secure.WIFI_WATCHDOG_PING_TIMEOUT_MS, Settings.Secure.MOUNT_PLAY_NOTIFICATION_SND Settings.Secure.MOUNT_UMS_AUTOSTART Settings.Secure.MOUNT_UMS_PROMPT Settings.Secure.MOUNT_UMS_NOTIFY_ENABLED Settings.Secure.LOCK_PATTERN_ENABLED, Settings.Secure.LOCK_PATTERN_VISIBLE, Settings.Secure.LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED Settings.Secure.LONG_PRESS_TIMEOUT Settings.Secure.TOUCH_EXPLORATION_ENABLED Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD Settings.Secure.ACCESSIBILITY_ENABLED Settings.Secure.TOUCH_EXPLORATION_ENABLED, 0) Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, ""); Settings.Secure.TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES, ""); Settings.Secure.TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES, Settings.Secure.SCREENSAVER_ENABLED, Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK, Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, Settings.Secure.SCREENSAVER_COMPONENTS, Settings.Secure.SCREENSAVER_DEFAULT_COMPONENT, Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE, Settings.Secure.ADB_ENABLED, Settings.Secure.BLUETOOTH_ON, Settings.Secure.DATA_ROAMING, Settings.Secure.DEVICE_PROVISIONED, Settings.Secure.INSTALL_NON_MARKET_APPS, Settings.Secure.USB_MASS_STORAGE_ENABLED Settings.Secure.USER_SETUP_COMPLETE, Settings.Secure.USER_SETUP_COMPLETE, Settings.Secure.INSTALL_NON_MARKET_APPS Settings.Secure.INSTALL_NON_MARKET_APPS, Settings.Secure.WAKE_GESTURE_ENABLED, Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, -1); Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, oldShow); Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS); Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, Settings.Secure.SLEEP_TIMEOUT, Settings.Secure.LOCK_TO_APP_EXIT_LOCKED Settings.Secure.ALLOW_MOCK_LOCATION, Settings.Secure.MOUNT_PLAY_NOTIFICATION_SND, Settings.Secure.MOUNT_UMS_AUTOSTART, Settings.Secure.MOUNT_UMS_PROMPT, Settings.Secure.MOUNT_UMS_NOTIFY_ENABLED, Settings.Secure.LONG_PRESS_TIMEOUT, Settings.Secure.TOUCH_EXPLORATION_ENABLED, Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD, Settings.Secure.SCREENSAVER_ENABLED, Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK, Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, Settings.Secure.SCREENSAVER_COMPONENTS, Settings.Secure.SCREENSAVER_DEFAULT_COMPONENT, Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE, Settings.Secure.USER_SETUP_COMPLETE, Settings.Secure.IMMERSIVE_MODE_CONFIRMATIONS, Settings.Secure.INSTALL_NON_MARKET_APPS, Settings.Secure.WAKE_GESTURE_ENABLED, Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, Settings.Secure.SLEEP_TIMEOUT, Settings.Secure.BACKUP_ENABLED, Settings.Secure.BACKUP_TRANSPORT,
global表
Settings.Global.ASSISTED_GPS_ENABLED Settings.Global.SET_INSTALL_LOCATION, Settings.Global.DEFAULT_INSTALL_LOCATION Settings.Global.SET_INSTALL_LOCATION, 0); Settings.Global.DEFAULT_INSTALL_LOCATION, Settings.Global.PACKAGE_VERIFIER_TIMEOUT, Settings.Global.PACKAGE_VERIFIER_DEFAULT_RESPONSE Settings.Global.DATA_STALL_ALARM_NON_AGGRESSIVE_DELAY_IN_MS, Settings.Global.DATA_STALL_ALARM_AGGRESSIVE_DELAY_IN_MS, Settings.Global.GPRS_REGISTER_CHECK_PERIOD_MS Settings.Global.BATTERY_DISCHARGE_DURATION_THRESHOLD, Settings.Global.BATTERY_DISCHARGE_THRESHOLD, Settings.Global.SEND_ACTION_APP_ERROR, Settings.Global.DROPBOX_AGE_SECONDS, Settings.Global.DROPBOX_MAX_FILES, Settings.Global.DROPBOX_QUOTA_KB, Settings.Global.DROPBOX_QUOTA_PERCENT, Settings.Global.DROPBOX_RESERVE_PERCENT, Settings.Global.DROPBOX_TAG_PREFIX, Settings.Global.ERROR_LOGCAT_PREFIX, Settings.Global.SYS_FREE_STORAGE_LOG_INTERVAL, Settings.Global.DISK_FREE_CHANGE_REPORTING_THRESHOLD, Settings.Global.SYS_STORAGE_THRESHOLD_PERCENTAGE, Settings.Global.SYS_STORAGE_THRESHOLD_MAX_BYTES, Settings.Global.SYS_STORAGE_FULL_THRESHOLD_BYTES, Settings.Global.SYNC_MAX_RETRY_DELAY_IN_SECONDS, Settings.Global.CONNECTIVITY_CHANGE_DELAY, Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED, Settings.Global.CAPTIVE_PORTAL_SERVER, Settings.Global.NSD_ON, Settings.Global.SET_INSTALL_LOCATION, Settings.Global.DEFAULT_INSTALL_LOCATION, Settings.Global.INET_CONDITION_DEBOUNCE_UP_DELAY, Settings.Global.INET_CONDITION_DEBOUNCE_DOWN_DELAY, Settings.Global.READ_EXTERNAL_STORAGE_ENFORCED_DEFAULT, Settings.Global.HTTP_PROXY, Settings.Global.GLOBAL_HTTP_PROXY_HOST, Settings.Global.GLOBAL_HTTP_PROXY_PORT, Settings.Global.GLOBAL_HTTP_PROXY_EXCLUSION_LIST, Settings.Global.SET_GLOBAL_HTTP_PROXY, Settings.Global.DEFAULT_DNS_SERVER, Settings.Global.BLUETOOTH_HEADSET_PRIORITY_PREFIX, Settings.Global.BLUETOOTH_A2DP_SINK_PRIORITY_PREFIX, Settings.Global.BLUETOOTH_INPUT_DEVICE_PRIORITY_PREFIX, Settings.Global.WINDOW_ANIMATION_SCALE, Settings.Global.TRANSITION_ANIMATION_SCALE, Settings.Global.ANIMATOR_DURATION_SCALE, Settings.Global.FANCY_IME_ANIMATIONS, Settings.Global.COMPATIBILITY_MODE, Settings.Global.EMERGENCY_TONE, Settings.Global.CALL_AUTO_RETRY, Settings.Global.DEBUG_APP, Settings.Global.WAIT_FOR_DEBUGGER, Settings.Global.ALWAYS_FINISH_ACTIVITIES, Settings.Global.PREFERRED_NETWORK_MODE, Settings.Global.CDMA_SUBSCRIPTION_MODE, Settings.Global.MODE_RINGER Settings.Global.DEVICE_PROVISIONED Settings.Global.BUGREPORT_IN_POWER_MENU Settings.Global.LOW_BATTERY_SOUND_TIMEOUT, Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED, Settings.Global.DEVICE_NAME Settings.Global.TRUSTED_SOUND, Settings.Global.MODE_RINGER Settings.Global.DEVICE_NAME Settings.Global.THEATER_MODE_ON, Settings.Global.AIRPLANE_MODE_ON, Settings.Global.THEATER_MODE_ON, Settings.Global.AIRPLANE_MODE_RADIOS, Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS, Settings.Global.ASSISTED_GPS_ENABLED, Settings.Global.AUTO_TIME, Settings.Global.AUTO_TIME_ZONE, Settings.Global.STAY_ON_WHILE_PLUGGED_IN, Settings.Global.WIFI_SLEEP_POLICY, Settings.Global.MODE_RINGER, Settings.Global.WIFI_ON, Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, Settings.Global.BLUETOOTH_ON, Settings.Global.CDMA_CELL_BROADCAST_SMS, Settings.Global.DATA_ROAMING, Settings.Global.DEVICE_PROVISIONED, Settings.Global.DOWNLOAD_MAX_BYTES_OVER_MOBILE, Settings.Global.DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE, Settings.Global.MOBILE_DATA, Settings.Global.NETSTATS_ENABLED, Settings.Global.USB_MASS_STORAGE_ENABLED, Settings.Global.WIFI_MAX_DHCP_RETRY_COUNT, Settings.Global.WIFI_DISPLAY_ON, Settings.Global.LOCK_SOUND, Settings.Global.UNLOCK_SOUND, Settings.Global.TRUSTED_SOUND, Settings.Global.POWER_SOUNDS_ENABLED, Settings.Global.LOW_BATTERY_SOUND, Settings.Global.DOCK_SOUNDS_ENABLED, Settings.Global.DOCK_SOUNDS_ENABLED_WHEN_ACCESSIBILITY, Settings.Global.DESK_DOCK_SOUND, Settings.Global.DESK_UNDOCK_SOUND, Settings.Global.CAR_DOCK_SOUND, Settings.Global.CAR_UNDOCK_SOUND, Settings.Global.DOCK_AUDIO_MEDIA_ENABLED, Settings.Global.SET_INSTALL_LOCATION, 0); Settings.Global.DEFAULT_INSTALL_LOCATION, Settings.Global.EMERGENCY_TONE, 0); Settings.Global.CALL_AUTO_RETRY, 0); Settings.Global.PREFERRED_NETWORK_MODE, val.toString()); Settings.Global.CDMA_SUBSCRIPTION_MODE, type); Settings.Global.LOW_BATTERY_SOUND_TIMEOUT, Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE, Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED, Settings.Global.DEVICE_NAME, getDefaultDeviceName()); Settings.Global.LID_BEHAVIOR, defaultLidBehavior);
system表
Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'"); Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '" Settings.System.WINDOW_ANIMATION_SCALE + "'"); Settings.System.TRANSITION_ANIMATION_SCALE + "'"); Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'"); Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '" Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS, Settings.System.WINDOW_ANIMATION_SCALE + "'"); Settings.System.TRANSITION_ANIMATION_SCALE + "'"); Settings.System.HAPTIC_FEEDBACK_ENABLED + "'"); Settings.System.NOTIFICATION_LIGHT_PULSE, Settings.System.VOLUME_BLUETOOTH_SCO, Settings.System.VIBRATE_IN_SILENT, Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS + "'"); Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS, Settings.System.AUTO_TIME, 0); Settings.System.AUTO_TIME_ZONE, Settings.System.USER_ROTATION, Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'"); Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '" Settings.System.WINDOW_ANIMATION_SCALE + "'"); Settings.System.TRANSITION_ANIMATION_SCALE + "'"); Settings.System.MODE_RINGER_STREAMS_AFFECTED + "'"); Settings.System.MODE_RINGER_STREAMS_AFFECTED + "', '" Settings.System.NOTIFICATIONS_USE_RING_VOLUME + "'");Settings.System.AIRPLANE_MODE_RADIOS + "'"); Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS + "'"); Settings.System.VIBRATE_IN_SILENT, Settings.System.LOCKSCREEN_DISABLED, Settings.System.VIBRATE_IN_SILENT + "'"); Settings.System.STAY_ON_WHILE_PLUGGED_IN }; Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SIP_ADDRESS_ONLY); Settings.System.SIP_CALL_OPTIONS); Settings.System.SIP_ASK_ME_EACH_TIME); Settings.System.HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY, 0); Settings.System.SCREEN_OFF_TIMEOUT, "-1" }, Settings.System.SCREEN_OFF_TIMEOUT, Settings.System.VIBRATE_ON, 0); Settings.System.VIBRATE_ON, vibrateSetting); Settings.System.SCREEN_OFF_TIMEOUT, Settings.System.SCREEN_BRIGHTNESS_MODE + "','" + value + "');"); Settings.System.VOLUME_MUSIC, Settings.System.VOLUME_RING, Settings.System.VOLUME_SYSTEM, Settings.System.VOLUME_VOICE, Settings.System.VOLUME_ALARM, Settings.System.VOLUME_NOTIFICATION, Settings.System.VOLUME_BLUETOOTH_SCO, Settings.System.MODE_RINGER_STREAMS_AFFECTED, Settings.System.MUTE_STREAMS_AFFECTED, Settings.System.VIBRATE_ON + "'"); Settings.System.VIBRATE_ON, vibrate); Settings.System.DIM_SCREEN, Settings.System.SCREEN_OFF_TIMEOUT, Settings.System.DTMF_TONE_TYPE_WHEN_DIALING, 0); Settings.System.HEARING_AID, 0); Settings.System.TTY_MODE, 0); Settings.System.SCREEN_BRIGHTNESS_FOR_VR, Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.ACCELEROMETER_ROTATION, Settings.System.NOTIFICATION_LIGHT_PULSE, Settings.System.POINTER_SPEED, Settings.System.DTMF_TONE_WHEN_DIALING, Settings.System.SOUND_EFFECTS_ENABLED, Settings.System.HAPTIC_FEEDBACK_ENABLED, Settings.System.LOCKSCREEN_SOUNDS_ENABLED, Settings.System.WINDOW_ANIMATION_SCALE, Settings.System.TRANSITION_ANIMATION_SCALE, Settings.System.HAPTIC_FEEDBACK_ENABLED, Settings.System.LOCKSCREEN_DISABLED Settings.System.LOCKSCREEN_DISABLED,
默认值的加载 :
def_sleep_timeout 定义在 frameworks/base/packages/SettingsProvider/res/values/defaults.xml下
<integer name="def_sleep_timeout">-1</integer>
overlay文件位于device/google/atv/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
<integer name="def_sleep_timeout">86400000</integer>
loadIntegerSetting(stmt, Settings.Secure.SLEEP_TIMEOUT,R.integer.def_sleep_timeout); private void loadIntegerSetting(SQLiteStatement stmt, String key, int resid) {loadSetting(stmt, key,Integer.toString(mContext.getResources().getInteger(resid))); }
设置命令 :setting get/put 表名 字段名 (值)
settings list secure |grep sleep_timeout settings get secure sleep_timeout 进入 待机 settings put secure sleep_timeout settings get system screen_off_timeout 进入屏保 settings put system screen_off_timeout settings list global/system/secure 查询某个表里的所有属性
代码里设置
Settings.Global.putString(mContext.getContentResolver(), "audio_test_result", value);//修改 Settings.Global.getString(mContext.getContentResolver(), "audio_test_result");//查询
Setting 增加新字段的方法
1.在 frameworks\base\core\java\android\provider\Settings.java 中定义新字段
public static final String DIGITAL_AUDIO_FORMAT = "digital_audio_format";
2.在 frameworks\base\packages\SettingsProvider\res\values\defaults.xml中定义默认值
<integer name="def_digital_audio_format">0</integer>
3.在 frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java
中加载默认值
loadIntegerSetting(stmt, Settings.Global.DIGITAL_AUDIO_FORMAT,R.integer.def_digital_audio_format);
4.使用命令 make api-stubs-docs-update-current-api 更新frameworks/base/api/current.txt文档
5.使用make 命令再次编译镜像即可
三、Settings中值的监听
有时需要监听Settings下面的值,这个时候可以通过ContentObserver 来监听值的变化。
1.首先自定义一个类继承ContentObserver,在onChange()方法里处理相应逻辑
public class SettingListener extends ContentObserver {/*** Creates a content observer.** @param handler The handler to run {@link #onChange} on, or null if none.*/public SettingListener(Handler handler) {super(handler);} @Overridepublic void onChange(boolean selfChange) {super.onChange(selfChange);} @Overridepublic void onChange(boolean selfChange, Uri uri) {super.onChange(selfChange, uri);String string = Settings.Global.getString(HwContext.getContext().getContentResolver(),Settings.Global.ADB_ENABLED);//处理变化后的逻辑} }
2.注册监听。
mHandler = new Handler(true /*async*/); mSettingListener = new SettingListener(mHandler); mContext.getContentResolver().registerContentObserver(Settings.Global.getUriFor(Settings.Global.AUDIO_TEST_RESULT), false, mSettingListener, UserHandle.USER_ALL);
3.结束时候取消监听。
getContentResolver().unregisterContentObserver(mSettingListener);
Android settings相关推荐
- Android Settings开发之修改
版本:1.0 日期:2014.3.20 2014.3.25 版权:© 2014 kince 转载注明出处 下面是Seeings应用的截图: 可以看出这是很典型的 ...
- Android开发:关于Android Settings中的八个问题
本问将回答以下八个问题,如有错误,敬请批评指正,不胜感激!(注:本文中的Settings解析基于android4.0+) 问题一.Settings的主界面是怎么实现的? 问题二.为什么使用hierar ...
- android settings源代码分析(3)
本章主要分析google settings里面存储模块的代码. 存储模块所在的fragment为: [html] view plaincopy <!-- Storage --> <h ...
- android settings源代码分析(2)
通过前一篇文章 Android settings源代码分析(1) 分析,大概知道了Settings主页面是如何显示,今天主要分析"应用"这一块google是如何实现的. 应用对 ...
- android settings源代码分析(1)
1.Android settings源码的source code路径为: kikat_4.4_CTS\packages\apps\Settings 2.settings主界面UI布局 Settings ...
- android settings 源码,菜鸟学Android源码-Settings(2)
最近一直忙着项目上的活计,没啥心思关注博客,前两天屌丝逆袭, 看了一场你的名字,深深感叹叔叔辈的无奈啊, 青葱憧憬爱情的年华,垂老怀旧相依的岁月, 而我老未及老,幼以过幼, 哎,白瞎了一张电影票. 上 ...
- Android Settings 应用二 获取应用消耗的流量
了解这一块也是因为有需求要获取指定应用所消耗的流量.在Android中,流量消耗主要分为手机卡和WIFI,在Settings中,也有统计流量的使用情况.经了解,Settings中是通过Loader去加 ...
- Android Settings 中wifi详情页 隐私默认选中设备mac
1.概述 在10.0的系统产品开发中,在对ota升级中,由于要固定使用本机mac地址,所以不能让选择默认mac地址,这时就要修改默认设置,保证升级能够成功 2.Settings 中wifi详情页 隐私 ...
- Android Settings模块
Settings SettingsIntelligence XML:Preference.PreferenceScreen.PreferenceCategory Fragment:DashboardF ...
- qt 关联android,从QT app(com.android.settings)打开android设置
QAndroidJniObject可以从Qt C代码创建JNI对象. 例如:获取活动: QAndroidJniObject activity = QAndroidJniObject::callStat ...
最新文章
- 遇到MapStruct后,再也不手写PO,DTO,VO对象之间的转换了
- 怎么tp玩家_DNF:被误制裁玩家痛苦下跪,求TP为其复查:我只是在家搬个砖!...
- 颜宁问4对科研夫妻:男科学家怎样平衡事业家庭?
- php调用接口搜索的网页源代码,PHP用户管理中常用接口调用实例及解析(含源码)...
- thrift java长连接_利用thrift在c++、java和python之间相互调用
- 新浪微博回应热搜被暂停更新一周;即刻 APP 下架一年后恢复上线;Android 11 Beta 版发布| 极客头条...
- ORACLE修改表信息
- 设备驱动基础学习--/proc下增加节点
- Google深度学习TensorFlow最好的入门文章!
- Repeater的ItemCommand事件和ItemCreated事件,高手请跳过~
- xcode11 The app delegate must implement the window property if it wants to use a main storyboard fil
- 使用woboq_codebrowser工具以html形式浏览项目源码
- 基于安卓的备忘录文件加密_苹果备忘录、锤子便签、印象笔记哪个更好用?
- 发明专利申请流程具体步骤。
- AI 图片截取、ffmpeg使用及安装, anaconda环境,图片标注(labelme),模型训练(yolov5),CUDA+Pytorch安装及版本相关问题
- 大白天「撞鬼」?特斯拉在无人墓地感应到行人,传感器真能测鬼?
- 我做了一个100+工具的外贸营销推广工具导航,你觉得怎么样?
- 计算机组成原理之运算方法和运算器
- [ Bootstrap ] 可视化布局
- L6网络编程--IO多路复用(day6)