利用Setting Provider添加保存数据项

Framework需要定制的时候,可能会增加新的数据项,setting的数据实际是从SettingProvider里面读出来的,里面有一个settings.db的文件,在第一次启动android手机的时候会在默认的文件中读取设定的值,下面就以添加一项来说明这个过程:

1)第一次启动默认值在frameworks/base/packages/SettingsProvider/res/values/defaults.xml 中,需要添加相应的项

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. +    <string name="def_dongle_name" translatable="false">00:00:00:00:00</string>  

2)frameworks/base/core/java/android/provider/Settings.java中,添加第一次启动加载的流程

a) 申明

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. +    public static final String DONGLE_NAME = "dongle_name";  

 b)加载序列控制: 

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. +++ b/frameworks/base/core/java/android/provider/Settings.java  
  2. @@ -1724,13 +1724,6 @@ public final class Settings {  
  3.           */  
  4.          public static final int SCREEN_BRIGHTNESS_MODE_AUTOMATIC = 1;  
  5.    
  6. -        /// frank: add for default dongle name @{  
  7. -        public static final String DONGLE_NAME = "dongle_name";  
  8. -        /// frank: add for default dongle name end @}  
  9. -  
  10.          /**  
  11.           * Control whether the process CPU usage meter should be shown.  
  12.           *  
  13. @@ -2372,9 +2365,6 @@ public final class Settings {  
  14.              SCREEN_BRIGHTNESS,  
  15.              SCREEN_BRIGHTNESS_MODE,  
  16.              SCREEN_AUTO_BRIGHTNESS_ADJ,  
  17. -            /// frank: add for default dongle name @{  
  18. -            DONGLE_NAME,  
  19. -            /// frank: add for default dongle name end @}  
  20.              VIBRATE_INPUT_DEVICES,  
  21.              MODE_RINGER,                // moved to global  
  22.              MODE_RINGER_STREAMS_AFFECTED,  

c) 读取默认值


[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. +++ b/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java  
  2. @@ -1991,11 +1991,6 @@ public class DatabaseHelper extends SQLiteOpenHelper {  
  3.              loadBooleanSetting(stmt, Settings.System.SCREEN_BRIGHTNESS_MODE,  
  4.                      R.bool.def_screen_brightness_automatic_mode);  
  5.    
  6. +            /// frank: add for default dongle name @{  
  7. +            loadStringSetting(stmt, Settings.System.DONGLE_NAME,  
  8. +                              R.string.def_dongle_name);  
  9. +            /// frank: add for default dongle name end @}  
  10. +  
  11.              loadDefaultAnimationSettings(stmt);  
  12.    
  13.              loadBooleanSetting(stmt, Settings.System.ACCELEROMETER_ROTATION,  

以上的步骤在OOBE中被调用,以后的开关机流程就不会进去了


3 )

找一个入口更新值:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. packages/apps/Settings/src/com/android/settings/wfd/WifiDisplaySettings.java  
  2. +        /// frank: add for dongle pair @{  
  3. +        DialogInterface.OnClickListener match = new DialogInterface.OnClickListener() {  
  4. +            @Override  
  5. +            public void onClick(DialogInterface dialog, int which) {  
  6. +                Xlog.d(TAG, "click match button, save WifiDisplay and auto connect enabled "   
  7. +                      + " deviceAddress: " + display.getDeviceAddress());  
  8. +                Settings.System.putString(getActivity().getContentResolver(),  
  9. +                                          Settings.System.DONGLE_NAME, display.getDeviceAddress());  
  10.                   
  11.             }  
  12.         };  
  13.         AlertDialog dialog = new AlertDialog.Builder(getActivity())  
  14.                 .setCancelable(true)  
  15.                 .setTitle(R.string.wifi_display_options_title)  
  16.                 .setView(view)  
  17. +               .setNeutralButton("match", match)  
  18.                 .setPositiveButton(R.string.wifi_display_options_done, done)  
  19.                 .setNegativeButton(R.string.wifi_display_options_forget, forget)  
  20.                 .create();  
  21.         /// frank: add for dongle pair end @}  



4) 引用,当数据发生变化的时候更新,可以在不同的线程中:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. +    void init() {  
  2. +        mMatchedDeviceMac = Settings.System.getString(mContext.getContentResolver(),  
  3. +                            Settings.System.DONGLE_NAME);  
  4. +        Log.d(TAG, " DONGLE_NAME onInit mMatchedDeviceMac = " + mMatchedDeviceMac);  
  5. +        //resolver.unregisterContentObserver(mBrightnessObserver);  
  6. +    }  
  7.    
  8. +    private void onMatchedDongleChanged() {  
  9. +        Log.d(TAG, "DONGLE_NAME onMatchedDongleChanged " +  "");  
  10. +        mMatchedDeviceMacOld = mMatchedDeviceMac;  
  11. +        mMatchedDeviceMac = Settings.System.getString(mContext.getContentResolver(),  
  12. +                             Settings.System.DONGLE_NAME);  
  13. +        Log.d(TAG, " DONGLE_NAME onMatchedDongleChanged dongle_name = " + mMatchedDeviceMac);  
  14. +    }  
  15. +    private ContentObserver mMatchedDongleObserver = new ContentObserver(new Handler()) {  
  16. +        @Override  
  17. +        public void onChange(boolean selfChange) {  
  18. +            onMatchedDongleChanged();  
  19. +        }  
  20. +    };  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值