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); } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); } @Override public 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);