CheckBoxPreference數據存儲和共享的一種方式

      前段時間做個了個簡單的菜單,在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)




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章