前段時間做個了個簡單的菜單,在setting 裏面做一個功能開關,這個開關的值需要在framework和其他應用中用到。。這裏主要涉及到數據的共享,
考慮到這個問題,查了些資料,最後決定用Settings.System.getInt直接存儲。關於Settings.System.putInt,是存在android系統設置的數據庫裏,這個方
法是android進行封裝了一層的。數據庫的路徑就是:/data/data/com.android.providers.settings.
相關測試代碼:
package com.example.setpreference;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.PreferenceActivity;
import android.provider.Settings;
import android.util.Log;
public class MainActivity extends PreferenceActivity implements OnPreferenceChangeListener{
private CheckBoxPreference mGesture;
private CheckBoxPreference mCall;
private CheckBoxPreference mBrowse;
private static final String KEY_GESTURE = "key_gesture";
private static final String KEY_CALL = "key_call_gesture";
private static final String KEY_BROWSE = "key_browse_gesture";
private static final String GESTURE_ON = "gesture.setting.on";
private static final String GESTURE_CALL_ON = "gesture.call_setting.on";
private static final String GESTURE_BROWSE_ON = "gesture.browse.setting.on";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.layout.gesture_setting);
mGesture = (CheckBoxPreference)findPreference(KEY_GESTURE);
mCall = (CheckBoxPreference)findPreference(KEY_CALL);
mBrowse = (CheckBoxPreference)findPreference(KEY_BROWSE);
mGesture.setOnPreferenceChangeListener(this);
mCall.setOnPreferenceChangeListener(this);
mBrowse.setOnPreferenceChangeListener(this);
initCheckeState();
}
private void initCheckeState(){
mGesture.setChecked(Settings.System.getInt(getContentResolver(), GESTURE_ON, 0) == 1);
mCall.setChecked(Settings.System.getInt(getContentResolver(), GESTURE_CALL_ON, 0) == 1);
mBrowse.setChecked(Settings.System.getInt(getContentResolver(), GESTURE_BROWSE_ON, 0) == 1);
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
// TODO Auto-generated method stub
int value = 0;
if((Boolean)newValue){
value = 1;
}
String preferenceKey = preference.getKey();
if(preferenceKey.equals(KEY_GESTURE)){
Settings.System.putInt(getContentResolver(), GESTURE_ON, value);
}else if(preferenceKey.equals(KEY_CALL)){
Settings.System.putInt(getContentResolver(), GESTURE_CALL_ON, value);
}else if(preferenceKey.equals(KEY_BROWSE)){
Settings.System.putInt(getContentResolver(), GESTURE_BROWSE_ON, value);
}
return true;
}
}
************************************
xml 文件
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/air_gestures">
<CheckBoxPreference
android:key="key_gesture"
android:title="@string/air_gestures"
android:summary="@string/air_gestures"
android:summaryOn="@string/air_gestures_on"
android:summaryOff="@string/air_gestures_off"
android:persistent="false"
/>
<CheckBoxPreference
android:key="key_browse_gesture"
android:title="@string/air_gestures_browse_title"
android:summary="@string/air_gestures_browse_summary"
android:dependency="key_gesture"
android:persistent="false"
/>
<CheckBoxPreference
android:key="key_call_gesture"
android:title="@string/air_gestures_call_title"
android:summary="@string/air_gestures_call_summary"
android:dependency="key_gesture"
android:persistent="false"
/>
</PreferenceScreen>
**************
需加權限
<uses-permission android:name="android.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
最後 補充 ,如果需要監聽數據變化可用
registerContentObserver( Settings.System.getUriFor(String ), true,ContentObserver)