CR keys浅析

 

By Coastline@Devdiv.net
转载请注明出处!
这是小弟在“呆舞滴舞”社区的第一篇日志。
废话少讲,直接正文。
【什么是CR keys】
以我浅薄的见解,Central Repository是OS级的配置项持久化存储的一种实现。具体是怎么实现的咱不清楚,至少从直观来看,系统的配置程序中任何一个配置项,都对应于Repository种的一个或多个key/value对。显然,系统配置程序中提供的配置项,只是Repository中的冰山一角,还有许多是不能开放给用户设置的。
从开发者角度而言,只要知道这些key/value的具体数据和意义,都是可以获取和更改的(更改需要有WriteDeviceData能力)。
Nokia至今公布过为数不多的CR keys,可以从public sdk或者sdk plugin提供的头文件中找到,然而更多的是不公开的。虽然多少给开发者造成不便,但是从为用户负责的角度,有些的确不应该开放。
【如何获取CR keys】
目前比较有效又省力的,是子腾大法。该法由Symbian界godlike的超级大神Chenziteng创立,故得名子腾大法。
其具体操作过程,请用Google在discussion.forum.nokia.com搜索ziteng的回帖。
或者您可以直接看数月前我整理过的一篇小文:
http://coastline.freepgs.com/?p=43
【公布几组实用的CR keys】
这些都是本人有意无意中获知,特意公开和Devdiv的各位坛友分享。
声明:这些仅供感兴趣的开发者同仁学习交流,任何因本文引起的问题,都由使用者自己承担!
1.获取当前有多少短信(包括彩信)未读:(支持3.1+,MR机型未测试)
UID:0x101f87a8,key:0x6,int型
注:请不要试图去更改这个值。
2.如何在键盘锁状态发生改变之后得到通知:
大家都知道现有的API只能主动去获得键盘锁的状态,以及主动去加锁/解锁,没有类似于NotifyKeyLockStatusChange()这种接口。
这是很遗憾的一件事,FN有篇wiki提供了一个workaround,但是不是很优雅,或者说不可靠:
http://wiki.forum.nokia.com/index.php/Detecting_keypad_lock/unlock_status
现在告诉大家,借助于订阅以下CR key可以搞定:
UID:0x101f8765,key:0x1,int型。其value为0x1时,表示键盘被锁,为0时,表示键盘未锁。
想要自己去设置这个key的值,我没有测试过,因为没这个必要。
3.如何让收到新短信时“1条新信息”的提示框不出现
提醒:此设置关乎用户体验,请勿用于非法用途!
代码如下:
CRepository* rep = CRepository::NewLC(TUid::Uid(0x102824A0));
TInt old;
rep->Get(0x1,old);
old &= ~2; //NOTE
TInt r = rep->Set(0x1,old);
CleanupStack::PopAndDestroy(rep);
如何恢复?
//NOTE那行,换成:
old |= 2;
即可。

如何获取CRepository设置项的RepUID和Key

注:本文原创思路来自chenziteng大神,本人只是对其流程进行了详细阐述和部分改进。

以3rd MR模拟器为例。
假如我们想知道“设置”程序中的某个选项对应的RepUID和key的话,我们可以使用如下方法获取:
1.运行MR模拟器,打开“设置”程序,修改你欲获取的设置项。
2.打开/Symbian/9.1/S60_3rd_MR/Epoc32/winscw/c/private/10202be9/persists,按修改日期排序,找到最新修改的cre文件,比如0×101f8873.cre。此时我们已经知道了RepUID,就是0×101f8873。
3.打开/Symbian/9.1/S60_3rd_MR/Epoc32/release/winscw/udeb/z/private/10202be9/101f8873.txt
其内容中包含如下section:
[Main]
0×1 string “” 0 cap_rd=alwayspass cap_wr=WriteDeviceData
0×2 string “” 0 cap_rd=alwayspass cap_wr=WriteDeviceData
0×3 string “” 0 cap_rd=alwayspass cap_wr=WriteDeviceData
0×4 string “” 0 cap_rd=alwayspass cap_wr=WriteDeviceData
0×5 int 0 0 cap_rd=alwayspass cap_wr=WriteDeviceData
0×6 int 0 0 cap_rd=alwayspass cap_wr=WriteDeviceData
0×7 int 0 0 cap_rd=alwayspass cap_wr=WriteDeviceData
0×8 int 0 0 cap_rd=alwayspass cap_wr=WriteDeviceData
表示0×101f8873这个UID下拥有8个key,从0×1一直到0×8,而且也知道各自的类型、默认值、CRepository::Get权限和CRepository::Set权限分别为None和WriteDeviceData。
知道这些信息之后就好办了,我们可以很方便地知道我们要的是哪个key。
如果key的默认value比较明显的话,你完全可以一眼看出是哪个key,如果一下子看不出的话,笨办法一个一个试也不要多大工作量。当然,最科学和保险的办法就是写个循环对这些key依次进行Get,然后打log记录一下。接着改动我们需要的那个设置项,再次log。对两个log文件merge一下,就能精确定位到那个key了。感觉和以前金山游侠改游戏一样啊,呵呵。
4.RepUID和key都拿到了,类型也知道,下面怎么改value总不用说了吧,Set一下即可。不要忘了加WriteDeviceData能力。

再次感谢chenziteng大神提供这个思路!!

 

震动

http://discussion.forum.nokia.com/forum/showthread.php?t=193774

CenRep UID: 0x10200C8B
Key: 0x00000001
Value: 0 if the vibra is off, 1 if the vibra is on

 

 

情景模式类型

UID 0x101f8798

Key 0x7E000001

value 0--标准

      1--无声

      2--会议

      3--户外

      4--寻呼机

 

铃音类型

UID 0x101f8798

Key 0x7E000002

value 0--连续响铃

      1--渐强

      2--响铃一次

      3--蜂鸣

      4--无声

 

 

 

1000a82b.txt:旋转屏幕。
101f8781.txt:屏幕背光超时。
101f8770.txt:节电保护。
101f877a.txt:键盘自动锁闭前的时间。
101f877e.txt:通过短信息拒绝通话。
101f874e.txt:显示通话时间
101f8831.txt:通话报告
10204dac.txt:蓝牙名。
101f4cd5.txt:接入点。
101f8798.txt:铃声。
100058db.txt:相机设置
101ff976.txt:收音机启动铃声
101f876d.txt:默认输入法
10201afd.txt:三维铃声
10008d39.txt: 浏览器设置
101f874b.txt:日厉闹铃
101f874d.txt:时钟闹铃

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值