在寻找解决办法的过程中,在Nokia论坛里找到了一段代码,该用户说具体使用的时候,发现没有反应,经过修改,我得到下面的代码,经测试是可以使用的,各部分的具体意思可以在SDK中查找。
RWsSession sess=CEikonEnv::Static()->WsSession();
TWsEvent event;
event.SetType(EEventKey);
event.SetTimeNow();
event.Key()->iCode = EKeyCBA2;
event.Key()->iModifiers = 0;
event.Key()->iRepeats = 0;
event.Key()->iScanCode = 0;
sess.SendEventToWindowGroup(sess.GetFocusWindowGroup(),event);
需要注意的是,在S60中,Symbian的键被重新定义了,因此上面的EKeyCBA2实际上是EKeyDevice1。对于UIQ,我想,也会有这样的问题,因此在发送所需的键消息的时候应该注意这一点。如果使用了错误的键值,程序看起来将可能没有什么反应。下面是从S60头文件中复制的代码,从中可以看到这种对应关系。
#define EKeyOK EKeyDevice3
#define EKeyCBA1 EKeyDevice0
#define EKeyCBA2 EKeyDevice1
#define EKeyPhoneSend EKeyYes
#define EKeyPhoneEnd EKeyNo
#define EKeyApplication EKeyApplication0
#define EKeyPowerOff EKeyDevice2
#define EKeyGripOpen EKeyDevice4
#define EKeyGripClose EKeyDevice5
#define EKeySide EKeyDevice6
在调试使用Socket进行数据通讯的Symbian S60程序过程中,需要编写客户端与服务器的数据交互代码,如果S60的模拟器可以直接访问网络中的服务器程序,调试就会非常方便。S60的模拟器提供了这些功能,不过需要对网络参数进行一些设置,下面将讨论这一问题。
首先是网络参数的设置,在Symbian安装目录的..\Epoc32\tools目录下有一个网络参数设置程序network_config.bat,对于不同的开发包,这个名字可能会有一些不同。执行该程序,将显示参数设置界面。其实参数的设置和对局域网中的PC设置一样,你就把它当成是在设置PC的网络配置就可以了。分配一个没有使用的IP,填写好子网掩码,设置好局域网的网关。唯一的不同是要选择所使用的网卡。当你点OK关闭该设置对话框的时候(或着点那个Adapters按钮),会显示一个命令行界面,列出了当前机器上可以使用的网卡的信息,你需要输入一个数字选择一个网卡,注意,应该选择你的PC所使用的那个真实的网卡,也就是标识你机器在局域网内IP地址的那个网卡。
按照官方文档来说,这样就可以,但实际上不是所有的机器都可以,我没有测试过,不知道别人的机器如何,反正我使用的机器不可以。后来我在一本书里看到,还需要运行另外一个程序,才可以达到我们的目的。这个程序与上面的设置程序在同一个目录下,叫做npacketadmin.exe。执行它,会显示一个程序,并跳出一个设置对话框,首先在下拉列表框里选择你刚才选定的那个网卡,然后点击下面的Start按钮,这样就可以了。这时你就可以使用模拟器调试你的Symbian S60通讯程序了。
测试是否连通的方法是,执行模拟器中的“网络”应用程序,然后输入一个网址,比如www.sina.com.cn,如果设置正确,将显示该页面,注意也许是乱码,不过不要紧,因为我们只想知道网络是否已经可用了。
需要注意的几个问题:
1.在调试期间可以关闭npacketadmin.exe的那个设置对话框,但是不能关闭该程序。如果关闭了,网络将不通。
2.如果不小心关闭了该程序,需要重新启动,并重新做上面的第二步的操作。
3.应该在启动模拟器之前就启动该程序,不然模拟器可能会异常退出。
最后应该感谢那本书的作者,是他让我们了解这个知识,那本书的名字我没有记住,是国内人编写的,不是太厚,但是我觉得很实用,适合有一定S60基础的开发人员来使用,推荐大家去书店购买。
一个典型的S60 Symbian程序主要由以下几个类组成:
CAknApplication的派生类
代表着程序,有两个成员函数很重要,是AppDllUid和CreateDocumentL。
CAknDocument的派生类
代表着程序的数据部分,有一个比较重要的成员函数是CreateAppUiL。
CAknViewAppUi的派生类
代表着程序的界面框架。
CAknView的派生类
代表着程序的视图。
这些类组成了程序的基本框架。
在运行的时候,执行的顺序是这样的:
因为Symbian程序实际上是一个DLL(当然,与Windows的DLL是不同的),因此首先调用入口函数E32Dll,这个函数实际上什么都不做,只是立即返回一个值。然后将调用DLL的另外一个函数NewApplication,这个函数创建并返回CAknApplication的派生类指针。下一步会调用CAknApplication的派生类的CreateDocumentL函数,获得CAknDocument的指针。该类中有一个函数叫做CreateAppUiL,它创建CAknViewAppUi类。而视图类则是由该UI类在构造函数中创建的。这基本上是一个S60 Symbian程序的启动过程。
概述
mmp项目定义文件使用与平台和编译器无关的方法规定了项目的属性。makmake工具把项目定义文件转换成专门平台的makefiles。abld工具封装了对makmake的调用,比makmake使用的更广泛。实际上,在一般的使用过程中,你基本上只使用abld,不会用到makmake。
项目定义文件的扩展名是.mmp。
注意:
l 每个语句都占用一行。
l 使用C++风格的注释语法
l 最后的反斜杠被解释成延续标志,表示下一行与本行是一条语句。因此,指定目录的时候,不要写后面的反斜杠。例如,应该写 SYSTEMINCLUDE \epoc32\include而不是SYSTEMCLUDE \epoc32\include\。
例子
一个例子文件,文件的名字是hello.mmp。
|
TARGET HelloWorld.app
TARGETTYPE app
UID 0×100039CE 0×10004299
TARGETPATH \system\apps\HelloWorld
SOURCEPATH .
SOURCE HelloWorld_Main.cpp
SOURCE HelloWorld_Application.cpp
SOURCE HelloWorld_Document.cpp
SOURCE HelloWorld_AppUi.cpp
SOURCE HelloWorld_AppView.cpp
USERINCLUDE .
SYSTEMINCLUDE \epoc32\include
RESOURCE HelloWorld.rss
LIBRARY euser.lib apparc.lib cone.lib eikcore.lib
|
常用语句摘要
|
aif
|
程序信息文件
|
|
document
|
文档文件(非代码文件)
|
|
library
|
导入库
|
|
resource
|
程序项目的资源文件
|
|
source
|
源文件
|
|
sourcepath
|
源文件和项目的位置
|
|
systeminclude
|
系统头文件目录
|
|
target
|
项目生成的文件名字
|
|
targettype
|
项目的类型
|
|
targetpath
|
生成的文件放置的位置
|
|
uid
|
项目的UID
|
|
userinclude
|
项目头文件目录
|
下面是一个Symbian S60程序的典型开发过程
1.使用模拟器和开发工具在PC上编写程序的代码,并调试。
2.调试完成以后,使用SDK提供的编译器将源代码编译成目标机器文件。
3.使用打包工具,将目标机器文件制作成安装文件(SIS文件)。
4.将安装文件传送到目标机器中,并进行安装。
5.在手机上测试最终的程序,并根据测试结果,检查源代码。
6.需要修改时,重复以上的步骤。
文章所属分类:Symbian
选择目标机型,相应的平台以及开发工具
首先必须选择应用所需的机型,不同的机型支持的Symbian平台会不一样,所以确定机型是最先要做的事情。
机型确定以后,所使用的Symbian系统版本,以及界面平台就确定了。界面现在主要有UIQ和S60等平台。在这里选用的是S60。
我的建议是,选择S60 SDK2.1中文版,这个版本所对应的Symbian系统是7.0s,差不多后期的智能手机都比这个高,根据兼容性,在这个平台上开发的程序,只要没有使用一些特殊的功能,在后继平台上都应该可以使用。而中文版,则可以省去处理中文的麻烦,同时模拟器也是中文的界面。
可以选择不同的开发工具,包括VC6,.Net,CodeWarrior等等。开发工具不同,在选择SDK开发包的时候,也要选择不同的版本,因为SDK并不支持所有的工具。这里选择的是VC6,所以要选择S60 SDK中文版支持VC6的版本,这样才可以使用指定的工具开发。
下载相应的软件
S60的SDK,可以到www.series60.com和http://forum.nokia.com 去下载。具体到S60 SDK2.1 FOR VC中文版,是在这个地址http://www.forum.nokia.com/main/0,,034-4,00.html 。在右侧有一个Download now按钮,在按钮上方的下拉框中选择“SDK for 2nd Edition, FP 1 – Chinese”,这就是SDK2.1中文版。
SDK的运行需要java和ActivePerl的运行环境。所以必须要去下载这两个安装程序。
JRE(Java Runtime Environment)可以去这里下载www.java.com。具体的地址是http://www.java.com/zh_CN/download/manual.jsp ,然后选择那个Windows(脱机安装)版本。
ActivePerl的官方站点是http://www.activeperl.com/。具体下载的地址是http://www.activeperl.com/Products/Download/Download.plex?id=ActivePerl 。我下载的是ActivePerl 5.6.1.638,使用的时候没有发现什么问题。
有了SDK,也有了JRE和ActivePerl, Symbian S60的开发环境就可以建立起来了。安装完成后,不再需要做什么特殊的设置。
为VC6安装向导
使用VC6开发的话,一定要使用SDK中的向导模板。
对于SDK2.1中文版来说,它的位置应该在Symbian\7.0s\Series60_v21_C\Series60Tools\appwizard中。向导模板就是EpocAppWizard.awx文件,而Readme.txt则说明了如何安装该向导,按照说明安装就可以使用了。这个向导将帮助你生成Symbian程序所需要的基本框架,虽然还不是太灵活和全面,但是能节省很多写重复代码的时间,因此强烈建议使用。
文章所属分类:Symbian
首先当然是Symbian的官方网站www.symbian.com,可惜只有英文的。像我这样英语等于是基本不会的人来说,就是非常痛苦。在这个站点中,有一点中文的东西,地址是这里www.symbian.com/technology/chinese/index.html,但是跟没有差不多:)。各位最好在这里下载操作系统相应版本的SDK文档,这个文档会比S60的SDK中所带的更全一些。
接下来,就是S60的官方站点www.series60.com,幸运的是它有相应的中文站点www.series60.com.cn,虽然内容好些还是英文的,但起码相当一部分都已经翻译过了,也算是我们这些英语旱鸭子的福音。不过建议还是要经常看英文的站点,因为感觉中文的页面更新的没有英文的快。
最后一个比较重要的,当然是Nokia的站点了,是这个forum.nokia.com.cn,这个也有中文,S60的大部分资料其实都来自这里。
除了这几个官方站点,还有几个有关Symbian的站点,目前我还没有详细看过,所以也不好评论,这里先不介绍。其实,有了这几个官方站点,大多数问题,都已经可以解决了。
本文摘自www.series60.com.cn,介绍了S60平台的几个小问题。
| 什么是Series 60 Platform? |
| Series 60 Platform是运行Series 60手机的软件。这些手机有时被称为智能手机。Series 60 Platform包括一个用户界面(Series 60 UI),用于让用户导航并与该手机中的数据和软件进行交互,它还包括一些程序(Series 60应用),它们向手机提供许多先进的功能,如消息和日历等。Series 60 Platform运行于一个开放式操作系统(Symbian OS)之上。除了现有的应用之外,用户还能安装其他一些有趣的应用。 |
| 什么是Series 60 Platfrom Editions? |
Series 60 Platform的各个发布版本被称为Editions,其中包括了该版本的全部特性。最新版本的Series 60发布版是Series 60 Platform 3rd Edition。Series 60 Platform 3rd Edition中包括了Series 60 Platform 2nd Edition的全部主要特性,同时增加了一些新特性。
|
 |
| 什么是Feature Packs? |
Feature Packs包括一些针对该Edition的附加特性。Feature Packs中还可以包括终端规范特性。如,Series 60 2nd Edition, Feature Pack 2就向Series 60终端引入了WCDMA技术。
|
以下列出扩展名所对应文件的用途:
rss 资源文件
rls 定义本地字符串,在资源文件中包含这种文件
h 头文件,包含在C++文件中
rh 资源头文件,包含在资源源文件中
hrh 通用头文件,可以包含在C++或资源源文件中。
rsg 资源编译器输出的资源头文件
rsc 资源编译器编译过的资源文件
aif 程序信息文件,程序体系结构定义的,是Aiftool程序的输出。
可以通过两种方法达到这个目的,一种是使用aif文件,这需要熟悉它的使用方法,在这里不专门叙述。另外一种是使用资源文件来达到同样的目的,这里会描述这个方法。
首先创建一个新的rss文件,该文件的名字必须是程序名字加_caption.rss。比如,程序的名字是HelloWorld,则它的名字应该是HelloWord_caption.rss。文件建立以后需要设置文件的内容,下面是一个例子:
NAME APPC
#include <apcaptionfile.rh>
RESOURCE CAPTION_DATA
{
caption=”caption text”;
shortcaption=”short caption text”;
}
NAME APPC,为资源文件起了一个名字,这是每个资源文件都必须有的,具体使用方法可以查看相应的SDK文档。
#include将CAPTION_DATA的结构包含到资源文件中,这样才可以在后面使用,熟悉C++的,对此应很容易理解。CAPTION_DATA是为了实现程序名称的设置而专门定义的资源结构。
RESOURCE CAPTION_DATA是资源文件的语法,具体的意义可以在SDK中查到。在这里只需要知道caption的值将显示在进入程序后的标题上,也就是程序的标题。而shortcaption的值将显示在启动界面中,作为启动程序的程序名。
写好这个文件之后,还不要忘记将该资源文件的名字加到mmp项目文件中,只有这样才能够在编译的时候起到作用。如果在IDE中编译没有效果,可以使用命令行的方式,这种方式虽然不够直观,但是是最有效的方式。