专注于Blackberry

剖析Blackberry开发的问题

在中国做Blackberry要比在国外,例如美国难得多。这可苦了我们中国人呀。下面一一列出。 签名问题          不能不说这是RIM给社区的一个绊脚石。你用Blackberry Controlled API来开发,最后什么都开发好了。自己开开心心安装在Blackberry真机上并运行,系统冷不丁告诉你不能运行。唉。你还非得花上20美元去买(原来可是100美元哟).更气愤的是,你把信用卡什么信息都提交了,过了几天,人家回信说,哥们,你在中国,根据美国进出口法律什么,我们不能卖给你。郁闷。 关于签名,参看我的文章另外一篇文章关于BlackBerry的Code signing 问题 模拟器与真机      真的blackberry机器,呵呵,目前只有移动签约用户才是明媒正娶,否则就是水货啦。而且这些水货机器质量参差不齐。所以,拥有一台质量好的不简单。那么测试怎么办?没办法,就在模拟器上将就着用吧。你也说是模拟器啦,肯定很多功能在模拟器上不能使用的。很多功能只能在真机器上测试,而不能在模拟器上测试的。 BES/MDS 如果开发个企业级的应用,一般都会涉及到BES/MDS ,这是最令中国开发者头痛的事情。因为BES是没法去模拟器的。如果你开发了一个企业级的应用程序,我想一定要到真实的环境下去测试,这样无疑给测试带来极大挑战。我曾经就遇见这样的问题,因为一定要在BES下测试,请求了美国同事帮忙。令人痛苦的是,测试出现了一些问题,因为自己不在现场,以及沟通的难度,导致最后测试的时间变长了许多。幸好JDE提供MDS服务器,这样在一定程度上省了不少事情。 BES是Blackberry整个框架里的一个极其重要的部分,遗憾的是没法去模拟。 测试 测试问题,上面已经提到了,但是还是愿意单独拿出来说说。一般情况下,大家都会认为以下几点: 为什么和Windows Mobile不一样,不能在连接电脑的情况下上网 为什么有些功能在模拟器上没法测试 为什么有些功能在模拟器上运行正常,而在真机上不正常 为什么测试BES等变得这么麻烦 上面的问题都是由于Blackberry的特殊而导致的。 开发文档以及社区支持    明显,目前国内外的开发文档不多。国内恐怕也是以我的翻译的开发文档为主吧。我们也知道,要想使一种东西变得很好,没有社区的支持是不行的。遗憾的是同样没有好的社区支持,目前的社区都是讨论的都是Blackberry功能性问题,接触到开发以及BES的不多。 可以看看我写的这篇文章,关于Blackberry阻碍因素   可以继续参看我的文章: BlackBerry 应用程序开发者指南 RIM,未来之路 RIM终于想通了-RIM开放新的API BlackBerry的费用 BlackBerry的国际化与本地化 BlackBerry,你也真难为我们 从股价看RIM

继续阅读本文 →

Taigoo发表于 September 12, 2008 6:47 am | 留言(3) |开发 

BlackBerry 应用程序开发者指南 第一卷:基础–第2章 编写BlackBerry Java应用程序

2 第2章 编写BlackBerry Java应用程序 应用程序管理 编写一个例程 重用一般代码 使用BlackBerry IDE 使用命令行 使用蓝牙开发环境 使用Eclipse开发环境 编程指南 应用程序管理 当BlackBerry设备启动时,VM加载应用程序管理器,它管理在BlackBerry设备上所有运行的程序。对于其他Java程序,应用程序管理器的功能类似操作系统事件的中心调度员一样。 提供用户界面的应用程序扩展了net.rim.device.api.ui.UiApplication类。这个类为应用程序提供方法来注册事件监听者,管理线程以及UI组件。 没有提供用户界面的应用程序扩展了net.rim.device.api.system.Application类。 BlackBerry应用程序开始于main()函数。当一个程序开始时,它的main()线程调用enterEventDispatcher()来开始处理事件。这个线程运行所有绘图以及事件处理的代码,以及登等待应用程序队列里地事件。 当应用程序管理器接收到一个事件时,它将这个事件拷贝到合适的队列里,这个队列可以允许应用程序管理器指挥消息到特定的程序中。例如,前台的应用程序仅接收用户输入的消息。 编写一个例程 扩展UiApplication基类 每个提供用户接口的应用程序扩展了UiApplication基类,UiApplication类为应用程序定义了方法来建立一个事件线程,并且显示和维护Screen对象。 定义 main() 在main()中,为应用程序创建一个新的对象。调用enterEventDispatcher()使应用程序进入事件线程并且开始处理消息。 public static void main(String[] args) {   HelloWorld theApp = new HelloWorld();   theApp.enterEventDispatcher(); } 定义一个构造子 为你的应用程序定义缺省的构造子。缺省的构造子调用UiApplication.pushScreen()以显示当应用程序启动时出现的屏幕。在本例中,屏幕使一个新的HelloWorldScreen实例,它在下节的代码中定义: public HelloWorld() {   pushScreen(new HelloWorldScreen()); } 定义main屏幕 为了定义应用程序UI的主屏幕,扩展MainScreen类。MainScreen类是Screen的子类,它实现了TrackwheelListener和KeyboardListener接口,这些接口接收和响应用户交互。如果你扩展Screen类或者其子类中的一个,你并不是必须实现TrackwheelListener 和KeyboardListener接口。 你的类至少应该重写2个MainScreen的方法:缺省的构造子和onClose(). 在这个例子中,构造子调用了MainScreen的构造子。缺省地,MainScreen提供下列特性: 由一个Close菜单项的缺省菜单。 [...]

继续阅读本文 →

Taigoo发表于 April 22, 2008 5:32 pm | 留言(1) |文档