每周一技: ServiceBook初探
Taigoo 发表于 July 23, 2009 6:09 pm
版权信息 :严禁转载, 若想推荐或收藏,请用链接的形式.
网址:http://www.inblackberry.com/web/development/week-tech/weektech-access-servicebook.html
关于Service Book,已经不止一次在本站讨论了。在这里还是简单概括一下:服务的配置。例如,上网,需要有GPRS和WAP的配置,对WIFI,有WIFI的配置。
本文是Service Book的初探,有必要的话或需求的话,我会更深一步讲解。
首先介绍如何访问机器上的Service Book,要实现这个功能,我们可以参考一下API,API已经提供了相关的接口了。代码如下:
ServiceBook sb = ServiceBook.getSB(); ServiceRecord[] srs = sb.getRecords();
通过ServiceRecord,我们可以得到什么内容呢?
- CID,比如邮件的CID为CMIME,可以通过srs[i].getCid得到相关内容
- APN,既然访问网络,APN也必须得到,这对于一些网络编程非常有帮助
- 网络地址,和网络类型
- 其他
我建议看看ServiceRecord 该类的文档,说不定有意想不到的收获。
现在给出一个完整的例子:
public void listServiceBook()
{
ServiceBook sb = ServiceBook.getSB();
ServiceRecord[] srs = sb.getRecords();
for(int index = srs.length - 1; index >= 0; --index) {
//identify the service record associated with a mail message service via a CID of 'CMIME'
if( srs[index].getCid().equalsIgnoreCase( "CMIME" )) {
//add your code here
}
}
}
下面讲讲应用。
已经有很多人提出如何列出Blackberry机器上绑定的邮箱.其实这个问题非常简单。可以将上面的代码改为:
public void listBoundEmails()
{
ServiceBook sb = ServiceBook.getSB();
ServiceRecord[] srs = sb.getRecords();
for(int index = srs.length - 1; index >= 0; --index) {
//identify the service record associated with a mail message service via a CID of 'CMIME'
if( srs[index].getCid().equalsIgnoreCase( "CMIME" )) {
ServiceConfiguration sc = new ServiceConfiguration(srs[index]);
logger.log("The SB name configuring is:"+sc.getName()+"/"+sc.getEmailAddress());
}
}
}
代码不解释了,太简单了。知道了email地址,你就可以指定一个缺省的邮件作为发送地址。这是另外一个话题,不再这里赘述。
综合上述,所以很多问题不是不懂,而是没有仔细去看文档。
还有其他应用吗?当然有,例如:
- 如何和Blackberry邮件系统集成
- 如何和BES关联
- 如何让浏览器上网
- 如何设置网络的APN
- 如何通过WIFI访问网络
- 如何提供LBS服务
- 如何设置MMS服务
- 如何设置PUSH
以上这些应用需要Service Book,但是目前RIM从来没有公开过其格式。即使有备份的ipd文件,但是ipd文件格式往往都是网友crack的,做出来的软件也不太令人满意,希望RIM能早日发布这些格式吧,这样对Blackberry的推动是非常有好处的。
以上仅仅是我任意列出的应用,如果您对以上哪个感兴趣,可以留言,如果有很多网友想知道某个具体问题,我会另写一些文章解释之。
相关文章:
- SB应用(1) HTTP连接
- 每周一技:从BES服务器上lookup联系人
- BlackBerry 应用程序开发者指南 第二卷:高级–第10章 访问安装和配置信息
- 每周一技:HyperLinkField
- 在Blackberry编写邮件的窗体中加入控件
4 个评论 »
2. cilyce 发表于 October 17,2009 21:41:29
更正上面的一个错误,如果客户端的网络连接是通过bes通道,可以不指定deviceside=false,但是一定不能是deviceside=true
3. 高超 发表于 March 7,2010 22:15:54
说实话我没有看懂说的是什么,但是我很想像楼主那样使用SB的应用,我想楼主详细的告诉我应该怎么操作才能使用。谢谢
另:我没有使用移动的SB,那又点贵,不知道楼主的方法是不是需要移动推入,我使用的是blackberry的8520,支持WIFI
等待回复谢谢
4. 高超 发表于 March 7,2010 22:17:47
还有我按照http://www.52blackberry.com/thread-291671-1-1.html这个网站的方法实验过,还是不可以,不知道哪里做的不对

1. cilyce 发表于 October 17,2009 21:30:09
这里有一点需要注意,特别是使用http和socket连接,如果你的终端已经激活,必须指定deviceside=true这个参数,因为调用Connector.open()这个方法时默认使用deviceside=false,也就是说你所打开的连接默认使用ippp记录进行连接,有可能导致你的客户端不能连接到指定的url,比如如飞信、qq。