利用Setting Provider添加保存数据项

2024-09-05 09:32

本文主要是介绍利用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. +    };  

这篇关于利用Setting Provider添加保存数据项的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1138582

相关文章

下载/保存/读取 文件,并转成流输出

最近对文件的操作又熟悉了下;现在记载下来:学习在于 坚持!!!不以细小而不为。 实现的是:文件的下载、文件的保存到SD卡、文件的读取输出String 类型、最后是文件转换成流输出;一整套够用了; 重点: 1:   操作网络要记得开线程; 2:更新网络获取的数据 切记用Handler机制; 3:注意代码的可读性(这里面只是保存到SD卡,在项目中切记要对SD卡的有无做判断,然后再获取路径!)

FFmpeg系列-视频解码后保存帧图片为ppm

在正常开发中遇到花屏时怎么处理呢?可以把解码后的数据直接保存成帧图片保存起来,然后直接看图片有没有花屏来排除是否是显示的问题,如果花屏,则代表显示无问题,如果图片中没有花屏,则可以往显示的方向去排查了。 void saveFrame(AVFrame* pFrame, int width, int height, int iFrame){FILE *pFile;char szFilename[

html记账本改写:数据重新布局,更好用了,没有localStorage保存版本

<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><title>htm记账本</title><style>table {user-select: none;/* width: 100%; */border-collapse: collapse;}table,th,td {border: 1px solid bla

在项目中,控制权限保存时,如果多次修改权限,该如何写?

在项目中,控制权限保存时,如果多次修改权限,该如何写? 错误代码: package cn.itcast.crm.service.impl;import java.util.List;import javax.annotation.Resource;import org.apache.commons.lang.xwork.StringUtils;import org.springfr

【maven】setting.xml配置国内镜像地址

1、用文本编辑器打开 setting.xml 文件 找到 <mirrors> 节点,注意不是mirror 2、加入以下配置。讲道理,只要这一个就行了。 注意不要放到注释的结构了去了。 <mirrors><mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/cont

erlang学习:用ETS和DETS存储数据3,保存元组到磁盘

学习内容 ETS表把元组保存在内存里,而DETS提供了把Erlang元组保存到磁盘上的方法。DETS的最大文件大小是2GB。DETS文件必须先打开才能使用,用完后还应该正确关闭。如果没有正确关闭,它们就会在下次打开时自动进行修复。因为修复可能会花很长一段时间,所以先正确关闭它们再结束程序是很重要的。 DETS表有着和ETS表不同的共享属性。DETS表在打开时必须赋予一个全局名称。如果两个或更多

Spark—数据读取和保存

Spark—数据读取和保存

使用Python通过字节串或字节数组加载和保存PDF文档

处理PDF文件的可以直接读取和写入文件系统中的PDF文件,然而,通过字节串(byte string)或字节数组(byte array)来加载和保存PDF文档在某些情况下更高效。这种方法不仅可以提高数据处理的灵活性,允许开发者在内存中直接操作PDF,而且还能增强安全性,同时方便跨应用传输和网络传输。 本文将介绍如何使用Python通过字节串或字节数组来加载和保存PDF文档。 文章目录 创建P

sqlserver2008增加、修改表字段不能保存,提示“阻止保存要求重新创建表的更改”的解决办法

sqlserver2008增加、修改表字段不能保存,提示“阻止保存要求重新创建表的更改”,如下图所示 解决办法:

学习-保存文件

private void button_Click(object sender, EventArgs e){if (!File.Exists(fileName)){MessageBox.Show("请重启软件!");return;}FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.R