Settings provider system和global表格数据访问
来源:互联网 发布:歌曲串烧软件 编辑:程序博客网 时间:2024/06/05 11:33
我们都知道Settings有system/ global和secure 三个表格,但是有没有发现,其实在读取3个表格数据时,并非仅仅从固定表格中读取,读取其中一个时,还会去读取另外2个,如果发现被挪到别的表格,这可能是为了兼容。
126|A3A:/ # cd data/system/users/0/ A3A:/data/system/users/0 # ls -ltotal 144-rw------- 1 system system 20294 2017-01-01 10:55 app_idle_stats.xml-rw------- 1 system system 554 2017-01-01 08:14 appwidgets.xml-rw-rw---- 1 system system 45024 2017-01-01 08:18 package-restrictions.xmldrwxrwx--x 2 system system 4096 2017-01-01 08:13 registered_services-rw------- 1 system system 18755 2017-01-01 08:01 runtime-permissions.xml-rw------- 1 system system 13552 2017-01-01 10:00 settings_global.xml-rw------- 1 system system 9182 2017-01-01 08:20 settings_secure.xml-rw------- 1 system system 2231 2017-01-01 08:18 settings_ssaid.xml-rw------- 1 system system 12784 2017-01-01 08:30 settings_system.xml-rw------- 1 system system 180 2017-01-01 08:01 wallpaper_info.xmlA3A:/data/system/users/0 #
以上是/data/system/users/0目录下对应的3个表存储。
发现问题:
发现我们程序中System和Global中存在同名key(name),即:
Settings.Global.BATTERY_PERCENTAGE和Settings.System.BATTERY_PERCENTAGE所标识的字串内容相同
我们真正Settings操纵更新的是Settings.Global, 结果我们程序读取Settings.System,可以同步读取到Settings.Global中储存的状态值。
既然隶属与不同的表,不应该发生这种情况。
关键点就在于Settings.System.getInt()的操作和MOVED_TO_GLOBAL。
/frameworks/base/core/java/android/provider/Settings.java /** @hide */ public static String getStringForUser(ContentResolver resolver, String name, int userHandle) { if (MOVED_TO_SECURE.contains(name)) { Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System" + " to android.provider.Settings.Secure, returning read-only value."); return Secure.getStringForUser(resolver, name, userHandle); } if (MOVED_TO_GLOBAL.contains(name) || MOVED_TO_SECURE_THEN_GLOBAL.contains(name)) { Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.System" + " to android.provider.Settings.Global, returning read-only value."); return Global.getStringForUser(resolver, name, userHandle); } return sNameValueCache.getStringForUser(resolver, name, userHandle); }
MOVED_TO_GLOBAL有声明
private static final HashSet<String> MOVED_TO_GLOBAL; private static final HashSet<String> MOVED_TO_SECURE_THEN_GLOBAL; static { MOVED_TO_GLOBAL = new HashSet<String>(); MOVED_TO_SECURE_THEN_GLOBAL = new HashSet<String>(); // these were originally in system but migrated to secure in the past, // so are duplicated in the Secure.* namespace MOVED_TO_SECURE_THEN_GLOBAL.add(Global.ADB_ENABLED); ...... MOVED_TO_GLOBAL.add(Settings.Global.BATTERY_PERCENTAGE); // 关键点 MOVED_TO_GLOBAL.add(Settings.Global.CAR_UNDOCK_SOUND);
完
阅读全文
0 0
- Settings provider system和global表格数据访问
- 关于Settings.Global /Secure/System
- Proguard error: android.provider.Settings$Global
- 取得电信网络和手机的相关信息之TelephonyManager与android.provider.settings.System
- 取得电信网络和手机的相关信息之TelephonyManager与android.provider.settings.System
- Settings.Global
- Android中的android.provider.Settings.System系统属性设定
- Android SystemProperties和Settings.System
- Settings.System.putXXX数据变化,ContentObserver监听
- Application global settings
- R Global Option Settings
- Settings.System
- Android SystemProperties和Settings.System介绍
- Android SystemProperties和Settings.System介绍
- Android SystemProperties和Settings.System介绍
- Android SystemProperties和Settings.System介
- Android源码--SystemProperties 和 Settings.system
- 添加系统属性:Settings.system和SystemProperties
- Debian 7.8 下配置网络的方法
- 安装MySQL+修改密码+允许远程
- HDOJ 1170 Balloon Comes!
- 南阳oj 街道最短路径问题
- Viewpager轮播 网络获取图片
- Settings provider system和global表格数据访问
- Ubuntu16.04 下如何安装搜狗拼音输入法【亲测有效】
- JSON格式化工具
- 购物车心得
- Linux下新增、删除用户名失败的解决
- C语言操作符
- Nginx之hander模块
- 数据结构实验之排序七:选课名单
- C#一个解决方案下多个项目如何跨项目页面跳转