今天在setting里添加了一個新的變量,想要實現對這個變量的監聽。現在記錄下方法
首先就是明白一點,我們在system.setting里添加的變量,都會被保存在data/data/com.android.providers.settings/databases/settings/system 里面
INSERT INTO "system" VALUES(120,'voice_unlock_screen',NULL); INSERT INTO "system" VALUES(121,'voice_unlock_and_launch1',NULL); INSERT INTO "system" VALUES(122,'voice_unlock_and_launch2',NULL); INSERT INTO "system" VALUES(123,'voice_unlock_and_launch3',NULL); INSERT INTO "system" VALUES(124,'volume_voice_earpiece','4'); INSERT INTO "system" VALUES(125,'volume_ring_speaker','8'); INSERT INTO "system" VALUES(126,'com_android_contacts_mtk_unread','0'); INSERT INTO "system" VALUES(127,'hide_rotation_lock_toggle_for_accessibility','0'); INSERT INTO "system" VALUES(133,'pointer_location','1'); INSERT INTO "system" VALUES(138,'nanlog_clock_style','0');
所以,如果我們要監聽,我們只需要監聽它所在的數據庫就行了
1.寫數據庫監聽動作
private ContentObserver mAnalogClockObserver = new ContentObserver(new Handler()) { @Override public void onChange(boolean selfChange) { int value = Settings.System.getInt( mContext.getContentResolver(), Settings.System.NANLOG_CLOCK_STYLE, DEFAULT_ANALOG_CLOCK); android.util.Log.e("zhangshuli", "value==="+value); updateClockView(value); } };
2.注冊監聽的數據庫
mContext.getContentResolver().registerContentObserver(Settings.System.getUriFor(Settings.System.NANLOG_CLOCK_STYLE), false, mAnalogClockObserver);
這里最主要的就是獲得監聽數據庫的uri,如果我們打log就可以發現,uri如下
uri===content://settings/system/nanlog_clock_style
從system.setting獲得變量數據庫的方法就是getUriFor方法,具體實現如下
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/global"); getUriFor(CONTENT_URI, name); public static Uri getUriFor(Uri uri, String name) { return Uri.withAppendedPath(uri, name); }
這樣我們就可以實現數據庫的監聽了