当前位置:首页 > Symbian
  • Android、Symbian和OSX,谁将称王智能手机?

    国际电子商情讯 很多人都可能见过Verizon最新智能手机Droid的广告,极力把它描绘成不同于的产品。广告在大力宣传物理键盘、个性化、开放式开发、同步应用程序和可更换等特点,以吸引那些可能因苹果与AT&T签署独家协议、一机通吃甚至于受热捧而感到不爽的客户。 自从问世以来,许多Verizon客户就一直期待能有与之匹敌的对手出现。对于这些客户来说,基于Android的智能手机的推出是个好消息。驱动Droid和其它智能手机的Android操作系统,覆盖了所有的基础功能:Web浏览、电子邮件、日历、社交媒体、游戏、存储和流媒体,高级呼叫功能和短信。Droid或任何基于Android的手机将吸引更多的Verizon用户连接到移动网络和新服务,这点并不困难。 同时,不乏营销者、记者和博客写手暗示Android手机优于iPhone。尽管对于一部分人而言,更青睐基于Android的手持设备,实际上,每个平台都具有显而易见的优势——iPhone以先进的娱乐性能体验见长,而Android则以提供优秀的通信服务受到追捧,因此二者拥有不同的消费群,并且必将长期共存。 展望未来,In-Stat公司预计2014年智能手机出货量将从2009年的1.61亿部增长至4.12亿部,届时前三大智能手机操作系统是苹果OSX(17.4%)、Android(17.9%)和Symbian(26%)。更具体地说,In-Stat预计相当大的市场份额将从Symbian转移到Android,而iPhone的市场份额将保持稳定,尽管智能手机用户数量将显著增长。

    时间:2018-10-25 关键词: Symbian 智能手机 Android osx

  • 基于Symbian OS的本地化技术研究

    基于Symbian OS的本地化技术研究

    一、引言Symbian OS是一种开放、非常健壮的嵌入式操作系统,它由Symbian公司开发。Symbian OS是针对未来无线互联手持设备的新一代移动系统平台,其目标是把Symbian OS开发成为未来手机的产业标准。所以它对应用程序的本地化提供了便利的条件和强有力的支持。Symbian OS内置了Unicode编码,应用程序的开发架构也将源文件与资源文件相分离。因此对于拉丁字符集,使用不同的语言文本改编应用程序应该只需改变资源文件,因为用户可视文本不会嵌入到源文件当中。但对于非拉丁语言,比如生产使用汉语、日语、朝鲜语等的应用程序,文本的本地化要复杂一些,需要做一些额外的工作。下面以Symbian OS的应用开发平台Series 60为例,在重点讲述Symbian OS对本地化支持的基础上,对应用程序的汉化加以解决。二、 Symbian OS应用开发平台Series 60介绍由于各厂商之间在用户接口、硬件设计及互通性上存在的差别及其自身的革新,Symbian OS给移动设备制造商提供很大的灵活性。这种灵活性可以使用同一个内核的操作系统设计出不同的产品,而且给设备制造商提供了更新空间,从而使得其在移动市场上支持更多的设备。Series 60平台正是基于Symbian OS的这种灵活性,在其之上进行构建。如图1所示。Series60平台的内核是Symbian OS GT(Generic Technology,通用技术)层。提供了扩展的Avkon UI层、基于Avkon和Uikon库的完整应用程序套件以及第三方GUI应用程序所使用的用户接口和框架API。三、 Series 60开发平台下应用程序架构对本地化的支持3.1 应用程序的文件架构在开发应用程序之前必须了解Series60平台的应用程序文件架构。Carbide C++是当前诺基亚公司为自己的S60系列智能手机应用程序开发提供的新一款IDE工具。在利用Carbide C++创建一项工程后(例如工程名为HelloWorld,程序架构为单视图),我们能看到如下的应用程序文件架构:(1)data文件夹中的.rss文件与src中的.cpp源文件相分离,为实现应用程序本地化提供了便利的条件。后面的内容将详细剖析它的具体实现机制。(2)Aif文件夹中包含可选的应用程序信息文件(.aif文件),用于指定应用程序的本地化图标、标题及系统特性(如可嵌入性)。(3)inc文件夹中包含的是定义程序骨架类的.h头文件,和实现本地化所定义的.loc和.lXX文件。(4)src文件夹中包含的是.cpp源文件,实现.h中定义的类。联编时各文件之间具体的关系如图2所示3.2 应用程序框架类的关系与编写普通的VC MFC程序一样,必须熟悉程序中各个类之间的关系。每一个应用程序必须定义4个对象: l Application类定义了应用程序的属性如UID、标题并创建一个新的文档。是应用程序的主入口,它也将应用程序相关信息传递回框架。应用程序类并不涉及应用程序的数据和算法。l Document类描述应用程序的数据模型。对一个基于文件的应用程序,它存储和刷新应用程序的数据,响应AppUI类产生对一个文档编辑的请求。l AppUI是主要的用户接口类,它是大量框架所发出通知的接受者,例如用户的按键或者重要的系统事件。AppUI将处理事件本身,或者在适当地情况下,将这些事件传递给它所拥有的视图,达到处理的目的。l View类用于在屏幕上显示应用程序数据并允许用户与之交互。对一个复杂的程序可能有多种方法显示其数据,因此包含多个视图类。它们之间的关系如图3所示。可以简单地归纳为:Application类创建一个文档,文档类创建AppUI,AppUI类创建视图。从图3我们可以看到应用程序还包括一个model类,model类用于封装应用程序数据和它的算法,给程序的其他部分提供良好的API。3.3 实现应用程序的本地化机制为详细说明实现应用程序本地化的内部机制,我们以上面的HelloWorldLoc工程为例,只针对为实现这种机制的.rss文件,.rsg文件,.loc文件,.lXX文件进行分析。在图2当中,我们看到.l01、.l02、.l03和.loc这类文件。.lXX文件中定义了不同的语言,比如HelloWorldLoc.l01中把要显示的文本定义成英文,HelloWorldLoc.l02中定义成了法语,而HelloWorldLoc.l03中定义成了德语。通过编译发布,可以很方便实现应用程序和资源的本地化,在真机显示相对应的语言。例如在HelloWorldLoc.l01文件中可以定义英文文本:#define ELanguage ELangEnglish // Caption language#define qtn_app_caption_string "HelloWorldLoc"#define qtn_app_short_caption_string "HelloWL"#define LABEL_TEXT "Hello World!"而在HelloWorldLoc.l02中定义法语文本:#define ELanguage ELangFrench // Caption language#define qtn_app_caption_string "BonjourLoc"#define qtn_app_short_caption_string "BonjourL"#define LABEL_TEXT "Bonjour Monde!"同样道理,在HelloWorldLoc.l03中可以定义德语文本。在HelloWorldLoc.loc文件中根据本地化需求包含相应的.lXX文件,例如包含定义英文字符串的HelloWorldLoc.l01文件。#include "HelloWorldLoc.l01"在.rss文件中包含HelloWorldLoc.loc文件,可以引用.lXX中的本地化资源。#include “HelloWorldLoc.loc”RESOURCE TBUF r_label_text{ buf = LABEL_TEXT;}假如这里引用的LABEL_TEXT是HelloWorldLoc.l01中定义的英文文本:#define LABEL_TEXT "Hello World!"那么在Carbide C++集成开发环境下,资源编译器rcomp.exe对包含本地化资源的HelloWorldLoc.rss文件编译后,输出一个二进制资源文件HelloWorldLoc.rsc和一个HelloWorldLoc.rsg头文件。HelloWorldLoc.rsg头文件中利用#define定义符号名R_LABEL_TEXT来引用本地化资源。如下定义:#define R_LABEL_TEXT 0x2aa81006在显示数据的View类的.cpp源文件中,包含HelloWorldLoc.rsg头文件,通过引用R_LABEL_TEXT就可以显示它所标识的"Hello World!"字符串。3.4 实现应用程序的汉化技术对于英语、法语、德语这些拉丁字符集均是通过Unicode标准进行编码,Symbian OS内置了Unicode编码,所以通过改变.loc文件中所包含的.lXX文件,可以很方便的生成不同语言文本的应用程序。在Symbian OS的epoc32Includee32std.h头文件中我们可以看到定义了这些语言标识码,每种支持的语言都具有两位数字的标识码。例如英语是01,法语是02,德语是03:enum TLanguage {ELangEnglish = 1, /** UK English. */ ELangFrench = 2, /** French. */ ……ELangHongKongChinese = 30, /** Hong Kong Chinese. */ ELangPrcChinese = 31, /** Peoples Republic of Chinas Chinese. */ …… }在上面定义的标识代码中,我们可以看到对汉语的标识代码也有所定义,分别是30和31。但我们并不能简单地在.lXX文件中定义中文文本。中文文本属于非拉丁语系,对于非拉丁语言,文本的本地化要复杂一些。对于生产使用汉语、日语、朝鲜语等的应用程序,Symbian OS和Series60 SDK确实提供了一些支持,但我们需要做一些额外的工作。要解决汉字问题,必须转换我们的汉字编码。下面是实现中文本地化的具体实现方法,称之为静态方法。首先,在.lXX文件中定义: #define LABEL_TEXT “字符串_中文”然后将这个.lXX文件用WORD或记事本转换成UTF8编码。这里要注意,有时在转换时,会在转换生成后的文件头部添加上一个文本编辑器无法看到的标志字符,需要用edit编辑器将其打开,删除标志字符,否则编译将会出错。在.loc文件中包含.lXX文件:#include ".lXX"。在.RSS文件中定义字符串:RESOURCE TBUF r_label_text{buf=LABEL_TEXT;}同时在.RSS文件头添加一行代码:CHARACTER_SET UTF8。在.cpp文件中,包含.rsg头文件,通过引用R_LABEL_TEXT就可以显示它所标识的"字符串_中文"字符串。四、 Symbian OS在我国的发展前景随着Symbian OS对本地化的进一步支持,基于Symbain OS的我国国产智能手机软件必将有所大力普及。作为一种面向未来无线通信的操作系统,一方面由于它所具有的强大功能,另一方面有世界各大移动设备商(包括其股东)的支持,还有像Intel、TI、IBM等各大公司都陆续宣布和Symbian公司合作开发无线通信设备软件应用程序,Symbian OS在我国国内将具有良好的发展前景。

    时间:2018-07-03 关键词: Symbian os 框架 汉化 series60开发平台

  • 手机操作系统Symbian系介绍

    手机操作系统Symbian系介绍

    Symbian操作系统是现今手机领域中应用范围最广的操作系统,并且拥有相当多针对不同用户的界面,也就是常说的Series。关于Symbian操作系统的界面,我们先来明确一个概念:不管是Series60、Series80、Series90还是UIQ,它们都是基于Symbian平台而开发的界面,然后各自根据一些硬件特性来进行区分。Series的全名是SeriesDeveloperPlatform。目前有三种不同series,分别为 series 60、series 80、series90。Series 60采用Series60界面的智能手机是目前Symbian智能机中出货量最高的。它具有以下特征:176208或更高分辨率的彩色屏幕、两个功能键、五方向键、数字键盘及特殊功能键,九宫格菜单。采用Series60界面的手机体积相对较小,用户完全可以用单手完成全部操作。此外,Series60界面手机还具有诸如数码相机、SMS、MMS、个人信息管理(PIM)、音频及视频录制、XHTML/WML浏览、JAVA支持等功能。Series 80Series80具有强大的商务办公性能和高速数据能力,被应用于高端产品。采用Series80界面的移动设备特征很明显:可折叠,内屏为640200 的高分辨率屏幕。类似于PC键盘的完整键盘,存储空间大,可以存储较多数据、文件。采用Series80界面的产品支持各类文档、电子表格(SpreadSheet)以及演示文件的编辑操作,以及PDF浏览,并且随着技术的发展,采用series80界面的移动设备开始支持WLAN无线网络,可以高速浏览HTML和XHTML页面,收发电邮,因此,被作为高端,顶级的商务PDA。Series 90Series 90的开发与Series80的开发密切相关。两者间既有联系又有区别,如果说Series80偏重于商务功能,Series90则偏重于多媒体娱乐。它具有一个320640的高分辨率彩色屏幕,采用触摸屏设计,屏幕虚拟键盘,通过手写识别进行操作。Series90为用户提供了强大的多媒体应用和网络等方面的功能,用户可用其进行多媒体播放和互联网浏览。UIQ Series:UIQSeries操作平台的特性是它的多媒体性,功能全面。UIQ界面上可支持手写操作,不过切换和关闭任务比较麻烦。UIQSeries是 SymbianOS 的系统架构上,专门为高阶的多媒体手机而设计,使用起来非常类似PDA操作。它的主要特征为:一个208320的触碰式彩色屏幕,可以通过手写笔进行输入和操作。大部分机型没有键盘。介绍Symbian,就不得不提到Series60,正是这个UI界面,让我们接触、了解了Symbian。所以有必要对Series60进行稍微详细点的介绍。作为目前Symbian智能机中出货量最大的用户界面,Series60受到了厂商和广大用户的追捧和喜爱。厂商更是投入了大量的资金对 Series60进行研发。Series60从诞生至今已经有了三个版本,并且有多个PARK。Series 60的三个版本分别支持以下功能:Series 60第一版基本功能:个人信息管理;日历、电话本、照像册、目录、与PC同步的文件管理应用程序;连接:支持USB、蓝牙、IrDA协议。短信服务:基于GSM传输的450个字节以下的短信服务。E-mail:支持IMAP4, POP3, SMTP, MIME2。支持GRPS。其它:中文支持、PC连接软件、插件、RealOne Player, XHTML 移动协议。Series 60第二版基本功能:多媒体:照相机、图像浏览、RealOne Player、多媒体应用程序个人帐户管理:通过因特网支付信用卡的支持文件管理:充许使用者创建、删除、移动文件或是目录。应用软件管理:个人主题:包括UI themes,如更换背景、图标。其它:HTTP 支持,高级MMS 服务,支持SMIL协议,录音功能。Series 60第三版基本功能:Macromedia Flash 、音乐播放、OMA DRM 2.0、单机应用程序、桌面主题、新内容格式,支持MSActiveSync、Windows Media Player mpeg、MSDRM编码;synch 1.2,IMAP/POP、OMA email notification, OMA data synch,email 检测。目前,支持SymbianOS的厂商很多,SymbianOS的发展前途被大多数人所看好。其良好的开放性和第三方软件易开发性,可以更好更快地进行市场占领。但是,如果没有足够的第三方应用软件的跟进,SymbianOS就无法发挥其强大的支持扩展能力,让我们共同祝愿SymbianOS在智能移动设备的道路上越走越远!Symbian作为一款已经相当成熟的操作系统,具有以下的特征:第一,提供无线通信服务,将计算技术与电话技术相结合。第二,操作系统固化。第三,相对固定的硬件组成。第四,较低的研发成本。第五,强大的开放性。第六,低功耗,高处理性能。第七,系统运行的安全、稳定性。第八,多线程运行模式。第九,多种UI,灵活,简单易操作。以上总结的九点,并不代表说为SymbianOS所独有,只是SymbianOS将其这些特点突出,并且充分的这些特点发挥了优势,让其更好的为用户服务。Symbian OS的不足Symbian机型所采用的硬件配置较低,且各类机型采用的的处理器主频较低,虽然系统可以使其获得较高的处理效能,但是在多媒体等方面的表现依然不尽如人意。在多媒体方面,SymbianOS对主流的媒体格式的支持性较差。SymbianOS虽然采用多种平台,来适应不同人群和各类需要,但是这也给 SymbianOS带来了一种限制性的发展障碍。各个平台之间第三方软件不兼容,且软件开发商多专注于某一个平台,大大减少了各个平台上可用的第三方软件,给用户带来了一定的不便。版本之间兼容性差也是SymbianOS需要改进的一个地方,每当新版本的SymbianOS发布并有产品面世时,系统的兼容性便成了其发展的一个大敌。相当多的一部分软件需要软件开发商跟进,开发新的版本才能得以解决。细节注意不够,由于symbian只提供给厂商一个内核及UI,很多细节功能需要厂商去添加,但是很多厂商将着眼点放在了产品的多功能及综合性能等方面,往往忽略了一些基本的功能。一些机型甚至连工作日闹钟这类功能都需要第三方软件才能实现,这无疑给不熟悉symbian的用户的带来了极大的不便。Symbian的硬件构成一般来说,Symbian系统的主要以下几个硬件部分组成,中央处理器、ROM、RAM、IO设备和电源。各个硬件构成各司其职,保证系统的运行。 Symbian系统一般采用32位处理器,系统运行及数据运算都依靠处理器来完成。ROM内固化Symbian系统和设备自带的各项功能。RAM则是用以存放当前活动的程序和系统运行必需的数据,以及各类临时性交换文件,或者作为WAP缓存等,此外还负责存放用户的一些数据。IO设备包括一般的控制设备,如键盘,触摸屏、扩展存储卡、蓝牙接口等。电源则为电池或者外接电源。以Series60手机为例,一般会采用德州仪器的AMR处理器,在插入存储卡之后,系统一般存在4个逻辑存储驱动器:C盘手机自带的用户存储盘,即FlashMemory,这种芯片的优点是不需要电力来维持资料,并且可以随时修改,D盘则是一个以空闲运行内存虚拟的缓存盘,E盘是用户插入的MMC卡,Z盘则固化了系统,即我们之前说到的ROM.开发须知:在Symbian的架构上有多种不同的平台,他们提供不同的软件开发套件(SDK)给程式开发人员,最主要的分别是UIQ和S60平台。个别的手机制造商,或是同家族系列,通常也在网络上提供可下载的SDK和软件开发延伸套件(SymbianDeveloperNetwork)。SDK内含说明文件、表头档案、数据库和在Windows运作的模拟器(WINS),到了Symbianv8,SDK加入了该版本的GCC编译器(跨平台编译器),才能够正常在装置内使用。由于Symbianv9使用新的ABI,所以需要一个新的编译器。在SDK方面来说,UIQ提供简化的framework使得单一的UIQSDK提供所有使用UIQ3的装置的开发基础,使用UIQ3的装置像SonyEricsson P990、M600和P1i。SymbianC++程式设计在市售的整合式开发环境(IDE)之下完成。之前较常见的是VisualStudio,但是以现在的Symbian版本,比较偏爱于Symbian版的CodeWarrior。不过在2006年Nokia的Carbide.c++将会取代CodeWarrior。预期 Carbide.c++会释出不同版本:其一个免费版(Carbide.c++Express)允许使用者在模拟器上去设计软件原型。还有为Symbian设计的Borland IDE。Symbian操作系统也可借由社群的技术开发而在Linux和MacOSX的环境下开发,有些部份Symbian允许公开key tool源代码。有一个插件允许在的Xcode IDE for MacOSX的环境下开发Symbian应用程式。开发完成后,Symbian的应用程式需要找一个管道传输到消费者的移动电话。它们通常包装成SIS档案,透过电脑连线、蓝牙或是记忆卡。一个替代方案是去找手机制造商来合作使手机内建该程式。但是在SymbianOS9的SIS档案会稍稍不易推广,原因是每个程式都至少要拥有Symbian的签署才能安装在该操作系统的手机。Java MEforSymbian的应用程式是使用正式的技术开发工具像是J2ME无线套件。它们包装成JAR或JAD档案。其他像是名为SuperWaba的工具是提供建立SymbianOS7.0或7.0s的Java应用程式。

    时间:2018-06-28 关键词: Symbian 手机操作系统 商务办公

  • 诺基亚梦幻旗舰机曝光:6摄像头设计,OZO神附体

    HMD首席产品官Juho Sarvikas已经确认,HMD将在MWC 2018期间有“大动作”,而一个名为诺基亚9的新消息在今天被曝光。 消息称,HMD Global正研发一款诺基亚Android旗舰产品,该产品的摄像头系统由6个摄像头组成,其中一个在边框上,主摄像头由五个传感器组成,目前该镜头系统的作用未知,不过从数量上来看作用可能会与诺基亚此前推出的OZO相机类似,能够捕捉360度全方位捕捉音频和视频。   有来自富士康内部研发人士的消息显示,HMD正在准备一款“五个主摄像头”的智能手机,由富士康代工。如果进度顺利,搭载该成像解决方案的产品最快将在2018年年底前量产。而主摄像头设计上,五个摄像头呈五边形排列,中间将是双LED补光灯。 从设计上来看,除了“奥利奥”外形外,还可能更像是一个“喷头”。  

    时间:2018-01-22 关键词: 诺基亚 Symbian 摄像头 旗舰机

  • 诺基亚新机现身FCC:7或6(2018)即将登陆美国

    诺基亚新机现身FCC:7或6(2018)即将登陆美国

    诺基亚7以及诺基亚6(2018)这两款中端智能手机几个月前便在中国上市了,在那时,这两款手机还仅仅为中国特供手机。 不过,现在事情已经发生了变化。近期,HMD旗下的两款手机现身到了FCC,这两款手机的型号分别是TA-1045、TA-1016。   诺基亚新机现身FCC:7或6(2018)即将登陆美国 通过FCC的申请文件,HMD证实这两款手机为版本不同的同一款设备,据推测,这款手机应该是诺基亚7或是诺基亚6(2018)。文件还指出在所有的运行模式中,这两款智能手机不支持任何任何非美国渠道,也就是说该机其实是美国的特定机型。 遗憾的是,我们并不能敲定这款手机到底是诺基亚7还是诺基亚6(2018),仅仅清楚这款手机的电池容量为3000 mAh。

    时间:2018-01-22 关键词: 美国 诺基亚 Symbian fcc:7

  • Symbian领衔 盘点曾经辉煌如今没落的手机系统

    智能手机虽然没有很长的历史,但是在这仅仅十多年的岁月中却是竞争非常激烈,堪比科技界的“世界大战”,最开始的时候大家拼硬件、拼谁的跑分高,之后拼的是外观设计工艺。而除了这些之外,手机的系统也是一个最关键的核心点。   手机系统就像一个人的内在,如果外观完美无瑕,内在没有修养的话,也只会成为一个花瓶,慢慢被抛弃。现在手机市场上的主流系统经过几年的淘汰也只剩下了Android和iOS两位选手,其他的很多参赛选手慢慢的淘汰掉了,那么今天我们就来看看那些选手究竟是因为什么才被淘汰掉的吧。 Symbian 说起塞班系统相信很多95后根本不知道那是个什么东西,事实上在iOS系统成熟之前,塞班一直是智能手机市场的统治者。Symbian由诺基亚、索尼爱立信、松下和三星等手机巨头共同拥护,占据了智能手机操作系统市场41.2%。   但是在2008年的时候,塞班公司被诺基亚收购,所以我们之后看到的搭载塞班系统的手机基本都是诺基亚的,比如鼎鼎大名的5230、N81、E62等。之后随着iOS和Android的快速发展,塞班系统的缺乏创新性就慢慢展现出来,市场份额逐渐萎缩,截止至2012年2月,塞班系统的全球市场占有量仅为3%。   在2012年的时候,塞班系统就像没落的诺基亚一样,在止步不前中堕落下去,2012年5月27日,诺基亚彻底放弃开发塞班系统。在这之后不到半年时间,也就是2013年1月24日的晚间,诺基亚宣布今后将不再发布塞班系统的手机,也意味着塞班的时代彻底的终结了。而那个时候诺基亚已经转投微软,专心做起了搭载Windows Phone系统的驱壳,这个我们在后边会说到。 总之塞班系统的没落一方面是因为在扩展性上确实没有iOS和Android更好,但是在那个时候相比于可用性极低的Java系统来说,塞班就是高级的。只不过后来因为更新迭代的问题没落下去,导致最终的失败。 Windows Phone Windows Phone系统(以下简称WP系统)的其实还没有真正的死亡,但却以及晚年光景。在2016年第四季度的手机出货报告中,曾经贵为第三大手机系统的Windows已经彻底沦落,季度仅出货109.22万部,还不到一年前的四分之一,市场份额也从1.1%跌落至0.3%,仅排在黑莓的Blackberry系统之前,与Android和iOS完全没有对抗的能力。   WP系统可以说在前两年的手机市场中是一个非常抢手的手机系统,曾经也与Android和iOS合并成为手机界三大系统,但是仍旧是由于生态空间的限制和一些固执的将PC系统转移到手机之上的逻辑思维,导致WP系统的可操作难度非常的大。曾经也有人说:“如果谁玩的溜WP系统,那么这个人一定很可怕。”   然而这么说也并不是没有道理的,WP系统过渡的将PC系统的逻辑移植到手机上,很多功能需要很多步操作才可以完成,给用户的操作体验提供了非常大的阻碍;而生态空间也是WP消失的一大主要因素,在应用商店内的软件基本没有更新的时候,即使更新了也和其他两个系统的功能差很多,所以慢慢的大家就都离开了WP系统,导致最后的没落。而这一切虽然不是诺基亚主导的,但其也是直接的受害者,最后被微软所抛弃,一代经典厂商最后只得次悲惨结局。 Ubuntu 乌班图系统应该是我们接触的最熟悉的陌生系统了,一方面在于目前的手机市场里,只有魅族正经的搭载过Ubuntu系统,而且还没有发扬光大。另一方面是因为Ubuntu系统所面对的群体并不是一般的手机用户,而是更加专业一点的开发人员,所以从这一点上来说,Ubuntu系统就注定不会做大。   所以尽管Ubuntu系统现在还在更新,普罗大众还是没有一个人想的起来他。 Android和iOS的优势就在于有非常好的功能性,而Android至今市场份额仍旧很大的原因就是简单易操作,扩展性和开放性吸引了很多的用户。而iOS则是以功能性的极致为优,这些还是都要归功于乔布斯当年的英明神武啊。 总结来看,一款成功的系统首先要在可操作性方面做到简单易用容易上手,因为所面对的用户操作能力不一样,越简单越容易捕获更多的用户。其实除了专业人员之外,很少有用户会一直在手机上折腾,更多的还是倾向于日常使用时候的功能性,所以在功能性和未来的可扩展性上也是一个非常重要的地方。

    时间:2018-01-18 关键词: Symbian 手机系统 辉煌 没落

  • SYMBIAN 字符串操作

    在symbian系统中并没有使用我们熟知的类型和函数来处理字符串和二进制缓冲区,这对于初学者来说可能有点陌生。大概很多编程者都在摸索TBuf, TBufC, HBufC的过程中花费了不少时间……:) symbian中的描述符(descriptors)主要有以下特性: 1、以同样的方式对待字符串和二进制数据。 2、数据可以存放在内存的任何区域上——ROM或RAM,在堆或栈上都可以。 3、描述符使用指针和长度信息来描述它包含的数据,有些描述符还包括最大长度的信息。 下面这个图示意了描述符相关类的继承关系: 所有的描述符都是从抽象类TDesC中派生的,他们可以分为三个大类: 1、缓冲区描述符——数据做为描述符对象的组成部分而存在,描述符对象存放在程序的堆栈中:TBuf和TBufC, 2、堆描述符——数据做为描述符对象的组成部分而存在,描述符对象存放在堆中:HBufC, 3、指针描述符——描述符对象和它所表示的实际数据是分开存放的:TPtr和TPtrC. 如果对照C/C++语法来看: 1、TPtrC可以被看作是const char*的使用 2、TBufC可以被看作是char[]的使用 其他类没有相应对照语句。 下面显示了各个类中数据是如何组织的: TDes和TDesC是抽象类,因此你不可能实例化它们。它们的主要用途是做为函数的参数来描述字符串和二进制数据。在这样的函数中,你应该按如下规则使用: 1、const TDesC& 表示只读的数据和字符串。 2、TDes& 表示可以被修改的数据和字符串。 所有这些描述符都可以指定数据尺度:TDes8、TDes16、TDesC8、TDesC16、TBuf8、TBuf16等 这里8表示描述符处理的数据是8bit的,而16表示是16bit数据。一般来说,你只要使用通用形式(TDes, TDesC,...)来表示文本数据而使用8bit版本(TDesC8等)来表示二进制的内容。 Litterals --------------- 字符串常量可以使用_L()或_LIT()宏来定义。 _L()可以生成一个指向字符值的地址(TPtrC),它经常被用来传递字符串到函数中: NEikonEnvironment::MessageBox(_L("Error: init file not found!")); _LIT()可以生成个常量名,以便以后重复使用: _LIT(KMyFile, "c:\System\Apps\MyApp\MyFile.jpg"); _LIT()宏的结果(就是上面的KMyFile)实际上是个文字描述符(literal descriptor)TLitC,它可以在任何使用TDesC&的地方使用。 用法 --------- TDesC中最常用的函数如下: 1、Ptr(),用来获得描述符数据中的指针。 2、Length(),用来获得描述符数据中的字符数。 3、Size(),用来获得描述符数据中的字节数目。 4、Cpmpare()或操作符==、!=、>=和<=等专为比较描述符数据用的。 5、操作符[],可以被当作c/c++中一样,用来获得描述符字符串中的单个字符。 下面几个函数有其特殊性: 1、Append()和Num()有很多重载形式,具体可以看SDK 2、Compare()有2个变体:CompareC()和CompareF(),以及Copy(),Find(),Locate()和Match(),这些函数都有C/F的后缀形式,C代表Collated而F代表Folded. Collating和Folding ------------------------ Folding是个比较格式化文本的简单方法,主要用在对比较不是太要求精确的场合。 Collation是个更好的也更有效的比较字符串的方法,可以生成类似字典的顺序。

    时间:2016-05-10 关键词: Symbian

  • symbian操作系统 入门篇

    一、symbian简介 Symbian是一个实时性、多任务的纯32位操作系统,具有功耗低、内存占用少等特点,非常适合手机等移动设备使用,经过不断完善,可以支持GPRS、蓝芽、SyncML、以及3G技术。Symbian主要用于高端的智能手机,其开发语言为C++。Symbian 是真正的微核操作系统,所谓“微核”,就是说操作系统只有很小的一部分是运行在最高优先级的,其他的功能都是以Client-Server的方式提供。 二、symbian开发环境的布置 I. 起点-SDK和IDE的选择 这里主要针对S60的开发环境的建立,因此首先为大家列出S60系统的各种版本。因为开发者应该根据需要,选择自己适合的SDK版本。 1、Series60 第一版 - Symbian OS 6.1 2、Series60 第二版 - Symbian OS 7.0s 3、Series60 第二版 Pack 1 - Symbian OS 7.0s 4、Series60 第二版 Pack 2 - Symbian OS 8.0a 5、Series60 第二版 Pack 3 - Symbian OS 8.1a 6、Series60 第三版 - Symbian OS 9.0 需要要说明的是,Nokia的Symbian/Series60开发包支持的集成开发环境[IDE]工具有很多种,下面列出主要使用的一些IDE: 1、Microsoft Visual Studio 6 / Visual C++ 6 2、Microsoft Visual Studio .NET [2003] / Visual C++ 7 3、Borland C++ Builder 6 4、Borland C++ Builder X 1.0 5、Metrowerks CodeWarrior Studio for Symbian Personal/Professional 2.0/2.5 II.在安装SDK以前保证下列1-3项先被正确安装。SDK和IDE要安装在电脑上的同一个分区。SDK的安装路径不能含有空格。 下面详细说明需要安装的软件及其步骤: 1、在安装SDk之前必须安装ActivePerl(官方文档要求安装Perl 5.6.1 build 531,并说明安装其他版本可能会有问题 2、安装JAVA Run-Time1.4.1_02 或者新版本说明:在使用命令行编译程序的时候事实上是不需要用到JAVA Run-Time1的。但是若要使用SDK的一个强大的工具ApplicationWizard,就必须安装该组件,同时若要使用Sisar等工具的话,JRE也必不可少。 3、安装IDE,安装Microsoft Visual Studio .NET 2003 4、安装SDK,注意前面所说的SDK的安装路径不能含有空格。并且要和IDE装在同一个分区,这样可以避免一些麻烦 5、安装Nokia Developer Suite - Carbide.vs 。这相当于VS2003的一个插件,用于帮助导入或者建立S60工程 相应软件可在诺基亚主页下载 III.安装完毕后在系统环境变量path中加入: {VS2003的安装路径}\Microsoft Visual Studio .NET 2003\Vc7\bin 三、下面可以通过一个例子,进一步了解symbian的开发环境 I. 通过Microsoft Visual Studio.NET 2003 1.进入Microsoft Visual Studio.NET 2003 2.单击:文件/import symbian project选择并打开Symbian\8.0a\S60_2nd _FP2\S60Ex\helloworldbasic\group\helloworldbasic.mmp Project type 为classic 3.然后单击next. 在下一对话框中选中ARMI然后确认Finish ,此时就可以打开basic文件了。 下面运行helloworldbasic这个程序 4.在菜单栏选中生成/生成解决方案(F7),在运行对话框中单击生成,此时会显示: Helloworldbasic - 最新。 ---------------------- 完成 --------------------- 1成功 0 失败 0跳过 5.接下来点击调试/开始执行。 此时会自动打开series 6.0的调试模拟器,同时还可发现在调试模拟器的应用程序中多了一个HelloWorldBasic程序 这是一种用Microsoft Visual Studio.NET 2003直接调试的方法,除此之外还可以用windows命令行进行调试 II. 用windows命令行进行调试: 1.找到helloworldbasic文件夹的地址, Symbian\8.0a\S60_2nd _FP2\S60Ex\helloworldbasic\group\ 2、构建我们的例子,输入: bldmake bldfiles 这一步会生成一个文件ABLD.BAT。 3、编译和链接,输入: abld build wins udeb 这一步会生成供Series 60 调试模拟器使用的文件。 4、运行,在命令行进入: Symbian\8.0a\S60_2nd_FP2\epoc32\release\wins\udeb 这个目录含有刚生成的helloworld.exe文件。然后输入: Helloworld 此时会自动打开series 6.0的调试模拟器,同时还可发现在应用程序中多了一个HelloWorldBasic程序 下面简单介绍一下以上各步的含义: 当我们运行 bldmake bldfiles 这个命令时,会处理当前目录下的bld.inf文件,具体来说会执行以下处理过程: 1、生成目录 Symbian\8.0a\S60_2nd_FP2\epoc32\BUILD\SYMBIAN\8.0A\S60_2ND_FP2\EXAMPLES\BASICS\HELLOWORLD 2、在这个目录下,生成一系列的Make文件,针对各种目标环境。比如VC7.MAKE,CW_IDE.MAKE等等。 3、在当前目录下生成abld.bat文件,这个文件会在随后用到。可以查看该文件的内容。但是建议不要手工的更改它的内容。Bldmake命令也支持其他的命令行选项,可以直接输入bldmake来查看简要的介绍,还可以查看SDK文档了解详细信息。由bldmake处理bld.inf文件得到的 abld.bat文件,使得abld命令可用。Abld.bat控制着构建一个项目的方方面面。Abld命令的语法非常地灵活,它拥有许多命令行选项,它们的组合涵盖了各种构建需求。最常用的组合,莫过于abld build 和 abld clean 相关了。 当我们运行 abld build wins udeb 这个命令时,将为wins平台(即通常的VC++环境)生成一个debug版本的程序。具体来说,在 D:\Symbian\8.0a\S60_2nd_FP2\epoc32\BUILD\SYMBIAN\8.0A\S60_2ND_FP2\EXAMPLES\BASICS\HELLOWORLD\HELLOWORLD\WINS\UDEB 和D:\Symbian\8.0a\S60_2nd_FP2\epoc32\release\wins\udeb下面各生成了一些文件比如Helloworld.exe文件。 在运行此文件就可以得到最终的效果了 还要说明一点的是,示例所用的SDK,IDK分别是 SDK:SERIES 60 2ND EDITION SDK FOR SYMBIAN OS SUPPORTING FEATURE PACK 2 SUPPORTING MICROSOFT VISUAL C++ CHINESE SIMPLIFIED EDITION IDE:Microsoft Visual Studio .NET 2003 如果严格按照以上步骤仍得不到正确的效果可能是版本不同造成的 版本不同可能会有相应的改动 四、 推荐几个有关symbian的网站 1.Symbian OS官方网站 不用多说,这是Symbian相关信息的最权威来源。 2.诺基亚论坛 这是最为活跃的移动开发技术社区。尤其是关于Nokia Series系列的资源非常的丰富。 而且,现在还有 诺基亚论坛简体中文版 这极大的方便了国内的开发者学习相关技术。 3.UIQ的官方网站 UIQ Technology AB成立于1999年,是完全归Symbian公司所有的一家子公司。他们面向开发移动设备的UI Platform——UIQ,并授权给那些全球领先的移动设备制造商。 五、常见单词缩写及其含义: VCL是Visual Component Library的缩写,即可视组件库 MFC,微软基础类(Microsoft Foundation Classes), GUI是图形用户界面(Graphic User Interface) IDE是Integrated Device Electronics(电子集成驱动器)的简称,是一种硬盘的传输接口,它有另一个名称叫做ATA(AT Attachment),这两个名词都有厂商在用,指的是相同的东西。 这里的IDE指 集成开发环境Integrated Development Environment DLL即 Dynamic Link Library(动态链接库)。 API就是 Application Programming Interface,就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API 而使操作系统去执行应用程序的命令(动作) SDK (Software Development Kit),就是“软件开发工具包”。

    时间:2016-05-10 关键词: Symbian

  • Symbian 入门

    这学期专业实践要做一个关于Symbian S60的手机软件,所以我选择了CarbideV1.2 OEM和S60 SDK 3rd FP1来作为自己的开发环境,具体的环境搭配如下: 1.首先安装Carbide,选择OEM版本,至于License的话在网上可以查的出来,大家自己去找,然后会出现release_notes提示安装Perl和SDK等. 2.安装Perl,选择activeperl 5.6.1的版本安装,否则会出现下面的网络上面常见的问题: 使用Carbide用向导新建了Symbian OSC++ Project,选择3rd Ed. GUI Application模版,根据步 骤建立了工程,选择Emulator Debug,编译时出现下如问题: make[1]: *** No rule to make target `\Symbian\9.2\S60_3rd_FP1_2\EPOC32\BUILD\Symbian\carbide\workspace\test\group\TEST\WINSCW\TEST.WINSCW'. Stop. test line 0这样的问题,如果选择5.6.1 的话就不会出现上面的问题。(所以软件不是最新版本就是最好的阿!). 3.安装SDK最好在他的默认目录,而且这几个都是最好在一起,我选择的是C盘安装软件和操作系统,给了35G的大小。D盘存取数据。所以这些我都是安装在他的默认目录下面。Carbide和Perl 安装在C 盘program files.SDK 就直接安装在了C盘上面了。这样的话基本上就差不多了。 4.打开Carbide,要将工作的空间选取在和自己安装carbide的盘符相同的盘下面。否则的话会出现下面的错误: WARNING: EPOCROOT does not specify an existing directory BLDMAKE ERROR: Directory "\Symbian\9.2\S60_3rd_FP1\EPOC32\" does not exist 上面的是我在配置Symbian开发环境时候的一点经验之谈,希望能够对大家有一些帮助,也欢迎大家给与指教,给我这个菜鸟一些帮助,在此先感谢大家了。 PS:我是一个菜鸟,也是刚开始学习Symbian开发相关,所以对Symbian开发不太了解,之所以在这里写博客是我发现里面有很多Symbian开发的高手,所以希望大家能够给与我一些帮助,在此再次感谢了!!~-~ ---------------------------------------------------------------------------------------------------- 开发软件来编译程序,编写程序。即Integrated Development Environment (IDE) ,它包括编辑器,编译器和连接器。 推荐用Nokia’s Carbide.c++ Express Edition (based on the Eclipse IDE)或者Visual Studio .NET 2003。 需要软件开发工具包,即Software Development Kit (SDK),它允许你写,创建程序为你的手机。 对N73,需要S60 2nd Edition FP2version 9.1 introduced a complete break from older versions. To work on Symbian OS version 9.1 or later, applications must be slightly modified andrecompiled. 不同的Symbian os用户界面user interface (UI)是不一样的。因此要选择正确的SDK。 • S60 3rd Edition Feature Pack 1 - Symbian OS v9.2 • S60 3rd Edition - Symbian OS v9.1 • S60 2nd Edition Feature Pack 3 - Symbian OS v8.1 • S60 2nd Edition Feature Pack 2 - Symbian OS v8.0a • S60 2nd Edition Feature Pack 1 - Symbian OS v7.0s enhanced • S60 2nd Edition - Symbian OS v7.0s • S60 1st Edition - Symbian OS v6.1 由于我们的os是v9.1的,所以需要S60 3rd Edition。 可以在http://developer.symbian.com/main/tools/sdks/s60/index.jsp上下载 下载IDE CodeWarrior Development Studio for Symbian os 3.1(OEM,Professional and Personal) 下载地址为:http://www.forum.nokia.com/info/sw.nokia.com/id/4d2d8611-c490-4f6e-a931- ea37ba4f040d/CodeWarrior_Development_Studio_for_Symbian_OS_Personal_Edition_Version_3_1.html 安装其个人版,可试用90天。 安装SDK 验证SDK的安装 1、用devices命令设置S60 3rd Edition SDK for Symbian OS for C++ 作为默认的设备 例如:devices -setdefault @S60_3rd:com.nokia.S60 2、到包含helloworldbasic的目录下 默认安装下为cd C:\Symbian\9.1\S60_3rd\S60Ex\helloworldbasic 3、再进到group目录下,该目录下包含bld.inf和helloworldbasic.mmp文件 4、验证编程环境 运行—〉输入cmd—〉输入epoc—〉出现模拟器则表示安装成功。 注:参看Getting_Started_final.pdf ------------------------------------------------------------------------------------------------------------------------- Nokia根据手机的屏幕大小和价格高低把手机分成了多个系列,现在使用的系列有:Series 40、Series 60、Series 80 和Series 90。60系列 采用Symbian os 6.1,然后又根据手机屏幕的特点对UI做了一些修改,这个被修改了的Symbian就被称为Nokia的60系列平台。使用60系列的手 机型号包括:Nokia 6670、 Nokia 6630、 Nokia 6260 、Nokia N-Gage QD™ 、Nokia 7610 、Nokia 6620 、Nokia 3620 、Nokia 3660 、 Nokia 6600 、Nokia 3600、Nokia 3650、Nokia 7650、Nokia N-Gage™等。 下面我们就以60系列为例,介绍SDK的安装过程。 2.1.1 安装SDK 第一步,到Nokia论坛注册,下载最新的SDK。Nokia 网站提供的Series 60 SDK for Symbian OS Nokia Edition SDK最新版本是v1.2,Series 60 SDK for Symbian OS的最新版本是v2.1。下载网址:http://www.forum.nokia.com/main/0,6566,034-4,00.html 第二步,到http://www.activestate.com 网站下载最新的Active Perl Script 安装程序。到http://www.java.com/en/download/manual.jsp 下载最新的J2RE。 第三步:安装SDK,推荐为Symbian开发单独建一个目录,例如d:\Symbian而不是使用C:\program files等这样的目录。 第四步:安装Active Perl和J2RE,安装到默认目录即可。 第五步:检查环境变量设定。打开系统环境变量tab,然后看看有没有EPOCROOT,如果有的话,把它手动改成“\” 。改完之后应该是这个样子 的: EPOCROOT = \ 然后,在系统PATH中加入 \epoc32\tools目录以及\epoc32\gcc\bin目录就可以了。 实际上,Symbian SDK根本不用安装,直接把epoc32目录拷贝到一个机器上,然后照上述方法设定目录和环境变量就可以了。 2.1.2 配置VC 如果我们使用的是VC 6.0,我们要保证系统至少打了SP3补丁,否则系统会有警告提示。如果我们使用的是VS.NET2003, 我们就只能安装Series 60 SDK for Symbian OS v2.1,因为Series 60 SDK for Symbian OS Nokia Edition SDK v1.2在VS.NET2003无法正确建立工程。 如果要直接在vc6里创建新项目,要把\Symbian\6.1\Series60\Series60Tools\ Application Wizard目录下的 AvkonAppWiz.awx和 AVKONAPPWIZ.HLP文件拷贝到vc6的模板目录C:\Program Files\ Microsoft Visual Studio\ Common\ MSDev98\ Template下。这样我们就可以 在VC的新建工程中看到Series 60 AppWizard v 1.9这个选项. 填入Project Name 以后,确认。 一路“Next”,一个最简单的Symbian应用程序就建立好了。 如果要将已经建立好的工程导入到VC6.0中,比如我们将SDK中的例子HelloWorld转换成一个VC6的项目,我们首先进入\Symbian\6.1\Series60 \Series60Ex\HelloWorld目录。在这里我们可以看到,在Symbian中,一个Project通常是按inc, src, group等目录组织,group目录里通常放 的是项目文件,所以编译时要先到这里。用命令提示符模式进入刚才说的那个目录下,然后执行: bldmake bldfiles 这个命令会在group目录下生成一个abld.bat的批处理文件,并且会在\Symbian \6.1\Series60\Epoc32\BUILD下生成\Symbian\6.1\Series60 \Epoc32\BUILD\SYMBIAN\6.1\ SERIES60\SERIES60EX\HELLOWORLD\GROUP这个目录,并在最底层目录下生成一堆 .make文件。 然后,我们在同一个目录运行刚才生成的abld.bat: abld makefile vc6 这样就会自动生成vc6的dsw文件,位置在\Symbian\6.1\Series60\Epoc32\BUILD\ SYMBIAN\6.1\ SERIES60 \SERIES60EX\HELLOWORLD\GROUP\HELLOWORLD\WINS。然后我们就可以在VC6种打开这个Symbian工程了。 2.2 编译 我们可以直接使用SDK提供的工具编译Symbian 工程,也可以使用VC6提供的集成环境来编译转化过的Symbian 工程。编译的结果存放在 \Symbian\6.1\Series60\Epoc32\ Release\wins\UDEB\Z\SYSTEM\apps目录中。 2.2.1使用SDK提供的工具编译Symbian 工程 我们在上一节的那个位置继续输入: abld build wins udeb 这个命令会编译我们的程序,最后在\Symbian\6.1\Series60\Epoc32\Release\wins\UDEB目录下生成我们的helloworld,然后我们可以从开始 菜单里运行模拟器的debug版,在模拟其中就可以运行helloworld了。 2.2.2 使用VC6编译Symbian 工程 我们直接打开运行abld makefile vc6后生成的dsw文件,VC自动装载转化过的工程。按F7便可以直接编译工程,编译结果同样放在 \Symbian\6.1\Series60\Epoc32\Release\ wins\UDEB目录中。然后我们打开模拟器debug 版,就可以看到我们编译好的工程了。 2.3 打包 我们以SDK 1.2提供的HelloWorld为例,制作可以在手机中安装的.SIS文件: 2.3.1.检查程序 首先,在命令行格式下,进入HelloWorld工程mmp文件所在目录,输入bldmake bldfiles和abld build wins udeb,然后打开模拟器,检测程序 有无错误。 2.3.2.编译工程 在程序无错误后,在命令行输入abld build armi urel 。执行这个命令之后会在目录d:\symbian\6.1\series60\epoc32\release\armi\urel生 成HELLOWORLD.APP和HELLOWORLD.RSC两个文件。 2.3.3.建立.pkg文件 在d:\Symbian\6.1\Series60\Series60Ex\helloworld\sis 用记事本建立或者修改工程的pkg文件,内容如下: ; HelloWorld.pkg ; ;Language - standard language definitions &EN ; standard SIS file header #{"HelloWorld"},(0x10005B91),1,0,0 ;Supports Series 60 v 1.2 (0x101F8202), 0, 0, 0, {"Series60ProductID"} ; "d:\symbian\6.1\series60\epoc32\release\armi\urel\HelloWorld.APP"-"!:\system\apps\HelloWorld\HelloWorld.app" "d:\symbian\6.1\series60\epoc32\release\armi\urel\HELLOWORLD.rSC"-"!:\system\apps\HelloWorld\HELLOWORLD.rSC" 其中,前面"d:\symbian\6.1\series60\epoc32\release\armi\urel\HELLOWORLD.rSC"是要打包安装的文 件,"!:\system\apps\HelloWorld\HELLOWORLD.rSC"是安装的目标位置。在其中要注意的是,我们在目标位置中用“!”代替了实际的盘符。 这样做得好处是在用户安装的时候,手机系统会提示用户选择要安装的位置,这就给了用户更大的灵活度。另外,在Symbian 系统中,安装的 应用程序默认位置是“!:\system\apps ”。 编辑好pkg文件后,保存至相应目录。 2.3.4.打包程序 在命令行中,转至pkg文件所在目录,运行命令makesis HelloWorld.pkg。之后我们就在同一目录下得到了打包好的.sis文件。 2.4 手机测试 将打包好地.sis文件上传至手机中,然后在手机的应用程序管理器中就可以看到我们打包好的文件。选择“安装”命令,系统会提示用户要安 装的位置,选择安装位置后,我们制作的应用程序就安装到手机中了。 我们回到手机的主菜单,就会发现新安装的HelloWorld 应用程序。打开运行,结果和在模拟器中看到的基本是一样的。 --------------------------------------------------------------------------------------------------------------------- 第一篇:Symbian UI 程序框架 Symbian UI 程序的框架基本上是统一的。大家只要学习一种简单的框架就可以进行大部分的Symbian开发了。我这里先介绍一个概念。 1.1 MVC 架构 Symbian 基本上使用MVC架构来搭建控件。Symbian UI程序设计主要讲究的也是如何使用控件。而No kia没有做好的一个方面就是有关UI Control的帮助太少了。SDK提供的帮助里面根本就没有资源文件的写法。这一张里面我会介绍一些控件例如Dialog,Text Listbox等等资源文 件的写法。同时也会告诉大家应该到SDK的哪里才能找到这些资源的描述。 但是首先,我先介绍一下MVC架构。MVC并不是个新东西。他是Model - View - Control的缩写。在以前smalltalk中就已经开始用了。其主要的 想法是在构造类的时候把显示,控制以及模型分开。Symbian对其作了小的改动。在Nokia提供的Series 90控件组(就是CKON,以后我再提CKON 的时候大家要知道指得是S90的控件)中Model主要用来存储数据,以及封装对数据的操作。也就是对于对象实体的操作。View当然是负责显示 。Control被抽象成一个或多个纯虚类(Mixin)其它对象通过重写虚函数来得到对象内部的状态以及控制对象。Series 90的Text Listbox类 CEikTextListBox很好的说明了这个构架。比如你可以调用CEikTestListBox中的Model()函数得到一个Model的指针,然后你就可以访问其中的 CDesArrayFlat数组了。 1.2 Symbian的工程文件 1.2.1工程引导文件bld.inf 这个东东其实就是一个脚本,它告诉Build环境在做Build之前需要准备或知道一些什么东西。最普通的 一种写法是: PRJ_MMPFILES project.mmp 这是告诉Build环境:你马上要处理的工程文件名字叫project.mmp。大家如果做比较复杂的程序可能需要同时Build所有的库,那么就在这里把 你所有需要Build的工程都列出来: PRJ_MMPFILES project.mmp project_lib1.mmp project_lib2.mmp 另外的一个常用的标记是PRJ_PLATFORMS这个东东告诉编译环境,以下的这些平台(Targets)是需要编译的。你可以在这个标记的下一行列出 需要的平台例如: PRJ_PLATFORMS WINS ARMI WINSCW 或者直接用 PRJ_PLATFORMS DEFAULT 注意,如果你不作PRJ_PLATFORMS这个标记其效果等于PRJ_PLATFORMS DEFAULT,所以这个不是必须 的。 第三个常用标记是PRJ_EXPORTS这个东西告诉编译环境在编译之前需要把哪些文件先拷贝到指定位置。我举个简单的例子大家就知道什么意思了 。比如你的工程中需要include一个第三方的*.inl的文件,那么如果编译之 前这个文件不存在就会编译不过。你可以这么写: PRJ_EXPORTS .\nk_set.inl \epoc32\include 那么在你编译的时候,一个Perl脚本会先把你工程目录下的nk_set.inl文件拷贝到\epoc32\include目录下,然后再 编译工程。 大多数工程只要用这三个标记就可以了。还有一点小技巧这个bld.inf文件中是可以写#if #else 等等东西的。 比如: #if defined(WINS) ..... 注意没有{} #else ..... #endif --------------------------------------------------------------------------------------------------------------------- Avkon Series60 extensions and modifications to Symbian's Uikon and other parts of the Symbian OS Application Framework Symbian中的应用程序通常分为两个部分,engine和UI,如此的划分增加了可维护性和灵活性,engine就好象是程序的核心,它主要处理运算和 数据,而UI(应该是User Interface)主要处理数据的显示和所有行为(操作行为应该是)。 engine不谈,它是程序起作用的灵魂,这个是因程序而异的,我们来看应用程序外观,它可以分为三种体系结构: 一、传统的symbianOS控制体系结构 二、基于对话框的体系结构 三、视图体系结构 看看好象跟MFC搞的似的,也有个View和Dialog,不过也是Symbian就是用C++写的,面向对象特性非常好。 运用什么样的界面取决于程序和界面布局的需要,就不多说了。只是不管你使用哪种,都是从一个基类继承而来的,就好象是CView一样。 [传统SymbianOS应用程序的体系结构] 传 统意义上,SymbianOS应用程序是在CCoeControl类的基础上派生出我们自己的view controls,这些都存放在应用程序的 control stack中 ,也就是我们应用程序的视图。这些controls会根据应用程序的需要来创建释放或显示隐藏,以产生相应的操作。 [Dialog体系结构] 如果主体应用是对话框,那我们更应该使用这样的体系结构,使用dialogs的好处是我们光可以靠改变resource文件来修改内容和布局,而不需 要重新编译那c++代码。 注意,如果不小心规划,那嵌套的对话框将耗去大量的堆栈空间。 另外,如果dialog体系结构被用于主要视图,那建议讲其设计为非模态对话框。(它不垄断用户的输入,用户打开非模态对话框后,仍然可以与 其它界面进行交互。)如果你要生成一个主界面对话框,要求是满屏,并提供多页设计,那应该包括如下features: RESOURCE DIALOG r_dlgapp_main_dialog { flags = EEikDialogFlagNoDrag | EEikDialogFlagNoTitleBar | EEikDialogFlagFillAppClientRect | EEikDialogFlagCbaButtons | EEikDialogFlagModelss; buttons = r_dlgapp_softkeys_options_home; pages = r_dlgapp_main_pages; } 如果要创建一个对话框应该如下: void CDlgappAppUi::ConstructL() { BaseConstructL(); iAppView = new(ELeave) CDlgAppMainView; iAppView->ExecuteLD(R_DLGAPP_MAIN_DIALOG); AddToStackL(iAppView); } ExecuteLD()在调用后立即返回,并且对话框必须要加到control stack中——使用AddToStack函数,因为非模态对话框不会自己处理这些。 [View体系结构] 使用view的应用程序每次只能有一个活动的view,当另一个view要激活时,当前的view就要被释放。当一个view被释放后,所以的菜单,对话 框以及包含的应用都将被关闭。 每 个view都被当作一个应用UI对待,它必须提供一个Id()函数以便为系统所标识,它也要重载DoActivateL(),DoDeactivate (),HandleForegroundEventL(),HandlCommandL()和HandleStatusPaneSizeChange() 函数以处理各种事件。 下面一个个的看 DoActivateL() 当客户端要求你的view激活时,它就要被调用。 client可能发送消息参数给你的view,如果你的view已经是激活了,那只有当client明确要求 再次激活时才被调用,所以你的 DoActivateL()实现得应付这种情况,ie已经激活了view。如果你不打算显示view或者你的view不想处理任何 消息,那一个简单的检查 和return即可。 DoDeactive() 这个函数当你的view被注销时调用,view被注销时通常有两种情况:一是你的应用程序要退出了,二是相同程序里另一个view要被激活。这个 函数很重要,咱们可不能忘记了:) HandleForegroundEventL() 这 个函数主要是在你的view被激活时调用(即在DoActivateL()和DoDeactivate()之间被调用)。当你的view在前台时,它将是 HanleForegroundEvent(ETrue),当你的view移出前台时,它将为HandleForegroundEvent (EFalse),只有当前台状态确实改变时这个函数才会 被调用。 HandleCommandL() 当view菜单产生一个命令后本函数将被调用。 HandleStatusPaneSizeChange() 当client的尺寸由于status pane而改变时,本函数被调用了就。 下面是一个view在接受事件的典型调用顺序 1.DoActivateL() 2.HandleForegroundEventL(ETrue) 3.HandleForegroundEventL(EFalse) 4.DoDeactivate() 其中一对HandleForegrounEventL在view被激活的过程中会发生多次调用。 而DoActivateL()在DoDeactivate()被调用前可能会被多次调用。 View Resources 如果你要使用view来显示pages,那唯一的途径是创建出自己的AVKON_VIEW资源,里面有自己的CBA和菜单,把这个资源的id传递给view的 BaseContructL()函数即可。 RESOURCE AVKON_VIEW r_viewapp_view1 { hotkeys = r_viewapp_hotkeys; menubar = r_viewapp_view1_menubar; cba = R_AVKON_SOFTKEYS_OPTIONS_BACK; } 注意如果没有给定的menubar资源,那就会使用确省的系统menubar Construction 下面这个例程是用的AppUI object's ConstructL来构造出view的,使用了AddView来登记,最后把第一个创建的view做为缺省的view了: void CMyViewArchAppUi::ConstructL() { BaseConstructL(); CMyViewArchAppView1* view1 = new(ELeave) CMyViewArchAppView1; CleanupStack::PushL(view1); view1->ConstructL(); AddViewL(view1); //Add view1 to CAknAppUi; transfers ownership CleanupStack::Pop(); CMyViewArchAppView2* view2 = new(ELeave) CMyViewArchAppView2; AddViewL(View2); // transfer ownership to CAknAppUi CleanupStack::Pop(); CMyViewArchAppView3* view3 = new(ELeave) CMyViewArchAppView3; AddViewL(View2); // transfer ownership to CAknAppUi CleanupStack::Pop(); SetDefaultViewL(*view1); .......(more code) 要让view发挥作用(注意,一个view自身是没有绘图能力的),它必须拥有得到一个从CCoeControl派生的containers,譬如 class CMyViewArchAppView1Container: public CCoeControl, MCoeControlObserver 下面这个例程将展现编程者自己的CAknView派生类 class CMyViewArchAppView1: public CAknVIew { ..... private: CMyViewArchAppView1Container* iVIew; } 大家可以看出App里产生了View,View类中有我们必须的Container. 当前激活的view在HandleCommandL()处理命令,这些是自定义功能键和菜单所生成的命令。 void CMyAppView1::HandleCommandL(TInt aCommand) { switch (aCommand) { case EMyAppCmdSwitchView: AppUi()->ActivateLocalViewL(KView2Id); break; case EAknSoftKeyOk: { ...... break; } case EAknSoftKeyBack: { ((MEikCommandObserver*)AppUi())->ProcessCommandL(EEikCmdExit); break; } default: AppUi()->HandleCommandL(aCommand); break; } } Local View Switching 如果你要切换view,你得提供view的UID //Now switch the view to view2 iAvkonViewAppUi->ActivateLocalViewL(TUid::Uid(2)); 事实上,每个view都有自己的菜单系统,如果你要使用它,应当在AVKON_VIEW资源结构中设置,前面已经讲过了。 而且不管怎么说,如果要使用系统菜单,它的内容在切换之前是一定要更新一次的。 //Switch to a new menu system for the new view iEikonEnv->AppUiFactory()->MenuBar()->SetMenuTitleResourceId(R_MY_VIEW_ARCH_APP_VIEW2_MENU); //Now swtich the view to view2 如果要进行远程的视图切换,那就要调用CCoeAppUi::ActivateViewL()函数,并传递了一个包含目标应用程序UID和目标视图UID的TVwsViewId Leave recovery Avkon 视图体系结构在DoActivateL()退出时会有个自动的回复机制。系统会调用DoDeactivate()在当前view离去时,回复前一个 view,并把 用户带到之前他们所在的地方。如果程序并没有前一个view的存在,那它就会退出,如果程序前个view就是当前的view(也就是说他们 是重激 活的),则应用程序会试图恢复缺省的view. 说了这么多,那我们在什么情况下采用合适的体系结构那?下面的内容将会有所帮助。 使用传统的SymbianOS体系结构,你要花费大量的时间研究代码是怎么工作的,但大部分交互和错误处理的引擎代码都是现成,可以降低你的开 发难度。 Do you have an acyclic graph shaped navigation structure? 如果你视图程序中的navigation能够as an acyclic gragh,那最好使用dialog体系结构。 Are all the application screens dialog like? 如果你的应用程序想使用对话框,那建议你使用dialog体系结构,注意如果要有一个选择列表,那最好写成包含在dialog中的选择列表。 Does the application have multiple views or modes, which deal with different sorts of data at the top level? 如果是这样,那最好使用传统或view体系结构。 Do external applications need to switch to different views of your application? 如果是采用view体系结构写的程序,那它一定支持多个不同的view,而且是外部程序能访问的。如果你从头开始写一个应用程序,那建议你使 用view体系结构, 否则给我看看有没有现成的代码可利用,不要一味的傻写呵呵。注意,如果一个外部程序使用的显示页面是你的程序所提供的,那你应该在DLL 中处理这个显示页,这个DLL应该是外部程序所能访问的。 Can all of the applications views be exited without loosing user data? 使用view体系的程序必须有能力处理因外部程序而引起的views的释放。如果程序不能自动的释放这些view,那就要考虑其他两种体系了,要么 使用view体系as a message passing system,要么让app UI在传统体系中管理view。 Do external applications need complex interactions with the data in your app? 如果外部程序和你的程序有大量的数据交互,那你最好选择client/server系统。它将减小view的使用量。大量现有的复杂应用,如短信,web 以及通讯录都使用这样的机制,这是个很好的构想,总比要重写他们要好:) Is there only a single complex main view in the app? 如果是这种情况,那还是使用传统的体系。 <一些例子> 这里给出一些假象例子的解决方案。 App launcher 这种程序可以单独运行并且能切换到其他程序,它只有一个view ,并且不接受外部程序的访问,如果这样会中断它。这样的程序不需要消息的 传递或外部程序需要的views. Fast swap window 一个在运行时刻的弹出窗口,这是一个睡眠的弹出对话框其实,它没有状态。 Email app 电 子邮件程序可以读或写电子邮件。这个程序有外部使用views,内部可切换的views,并能做中断操作。Notifier信息能告知程序显示一个新 的信 息给用户,所以该程序要有处理此请求的机制,即使在做其他事情时。编辑框可以做为其他程序的view显示,使用DLL形式,我们就可以 做到外部程序的调用 自如。SymbianOS的messaging程序就是一个client/server机制可以在其他程序中被调用。当然要实现内嵌在外部程序中 有许多工 作要做的。当你在写邮件时,很可能又收到新邮件的同志,这个时候新邮件是做为一个嵌套的对话框似的组件显示在里面的,注意, 做这个工作时要特别依赖 inter-application interaction model。 Contacts app 通讯录程序允许进行通讯录的显示、编辑和选择。选择后的结果可以做为其他程序所用。注意它不能因外部view的切换而中断。 通过一个外部程序可访问的dll,通讯录就可以被外部程序所访问。程序本身并不需要views,所以最好使用传统的体系结构编写,而用dialog 应付所有的编辑窗口。 web browser web浏览器可以做为单一的web上网工具,也可以内嵌在其他的文档中。web浏览器可以通过外部程序可以访问的dll来提供一个UI control,但 并不给外部提供可用的全屏应用。它必须能够应付外界的访问,譬如说应付在点击mail连接后撰写电子邮件的过程。 主体程序主要是用传统的体系结构,也可以采用view体系来应付访问页面的需求。 Settings 我们要关心的是全局设置和特定应用程序的设置。他们不是一回事情。经管他们可能共享一个库,实际上他们互不相干。 设置程序并不需要为外部的访问做什么处理提供什么界面,因此他的编写很简单,用传统的或者基于dialog的体系都可以。而局部设置要注意 必须小心对待外部可能出现的中断,并且他有可能做为一个模态dialog而处理。 Telephony app 电话号码簿程序并不提供外部view,但他必须要处理外部资源的请求。有时候直接用传统的体系去写即可,大部分的外部交互可以通过ETEL Server. [应用程序的启动] 从CEikApplication派生的类CAknApplication,他有几个必须重载的函数: PreDocContructL() OpenIniFileLC(RFs& aFs) PreDocConstructL,主要是处理已经构造好的应用程序实体是否正确准备好了。如果已经准备好了,那应用程序可以切换到实体上。注意,这 个函数只检查非内嵌程序。 通常,ini文件并不被series60所支持,如果要处理,那就要强制性的调用CEikApplication::OpenIniFileC [BASE CLASSES] CAknDocument 这个类是做为应用程序文档的基类准备的。用这个函数访问文档可以不用初始化。这个是访问Avkon应用程序的比较好的途径。 CAknAppUi 所有的Avkon应用程序必须从这个类派生。 这个类支持下面几个特定应用函数: KeySound support Accessories for CBA and StatusPane TextResolver-Avkon-specific error reporting from CAknAppUI::HandleError() Avkon view architectrue integration Control dumping - Debug feature CAknViewAppUi 所有的视图结构必须由此派生。 《S60_Platform_Application_Framework_Handbook_V20_en.pdf》,其中有些翻译不甚恰当,不过基本上表达了原版的意思。 ------------------------------------------------------------------------------------------------------------------ 1、开发文档不是很齐全,虽然每个api都能找到说明,但基本上只是很简单的介绍。 实现某个功能根据sdk中的文档,基本上不可能完成。必须寻找相应的demo和其他的源代码来参考。 2、中文资料很少,基本都是英文,对于国内的开发人员来说,这又是一道坎。 3、必须注意内存的操作。比如PushL 和 Pop等等,一些Symbian中特有的机制需要熟练掌握。 4、多线程支持不是很好,多线程中启动的函数必须为静态的或者全局的, 就这点就给一些需要多线城支持的solution带来了很多不便或者根本不能实现。 5、掌握了整个Symbian的framework的基本原理之后,整个机制还是比较明了清晰的。重要的地方是AppUI和View和Container这三个类。 6、www.newlc.com是一个不错的技术网站。强力推荐。 7、一般www.forum.nokia.com上都会有相关的例子demo可以下载,只是比较浅显。 8、注意rss文件中资源的定义和程序中ui控件的结合,很容易出错无法发现。 9、mmp文件的修改之后,必须要重新生成项目文件,不然会导致link 2001之类的错误。 ----------------------------------------------------------------------------------------------------------------- 在symbian中,用RThread来操作线程,一个RThread对象代表一个线程的句柄。常用RThead对象来创建或操作其他线程。 RThread的基类是 RHandleBase类,该类封装了句柄的行为。RThread,RProcess,RMutex和RSession-Base都继承自RHandleBase。 创建一个线程 /* Name of the new thread */ _LIT(KThreadName, "MyFirstThread"); /* 下面的函数是线程将要执行的。 参数parm是要传递给线程的数据,它的类型为TAny*,相当标准C中的void* 指针 */ TInt CThreadExampleAppUi::ThreadEntryPoint(TAny* param){ TInt* para = static_cast(param); *para = 1; return 1;} /* 创建一个属于当前进程的线程,并打开句柄. */ TInt res = iThread.Create(KThreadName, ThreadEntryPoint, KDefaultStackSize, NULL, &iVariable); /* 线程被创建以后进入等待状态,并不能立即执行. 如果要线程执行,需要调用它的Resume方法*/ iThread.Resume(); 停止、删除一个运行的线程。可以调用 Suspend() 来停止一个线程. 但它仍然存在,可以调用 Resume()来继续.如果要彻底删除一个线程, 可调用Kill或Terminate。如果进程的主线程被删除,那么程序也会被终止。 --------------------------------------------------------------------------------------------------------------------- 在symbian os上运行的四种软件 应用程序 服务 引擎 内核 symbian系统使用活动对象与客户-服务器对事件处理系统进行了优化 硬件资源: 一个cpu,32位arm 一个rom(只读存储器),里面有操作系统与内建的中间件和应用程序 ROM盘被映射到z:盘,所有的文件都可以通过Z:盘访问。 系统RAM.系统RAM用于两个方面,一是被当前活动的程序和系统核心使用,另一个是当成”C”盘的磁盘空间。这两个部分的大小是变化的,不可 以保留某个的大小。由于RAM通常只有8MB到16MB,所以内存可能用完,因此经常出现内存越界错误或是(写文件时)磁盘已满错误 IO设备,包括带数字笔输入的触摸屏,键盘,记忆卡(被当成D盘),rs232串口,红外口,蓝牙。 电源,包括电池与外接电源 symbian os与pc系统的区别如下: 资源限制:cpu太慢与太少内存 没有硬盘,不能使用写到硬盘的虚拟内存,不能保证有足够的空间保存程序或是数据文件 电源条件严格. symbian软件环境如下: server | server| Application| Application | Application Dll | | +————–+————- boundary | | | | | | | Enghine | Engine ——–+———+————+————–+————– Privilege boundary Kernel kernel工作在高级别,管理机器所有硬件资源。对其它软件模块提供访问这些硬件资源的接口 其它应用程序工作在用户模式 上面如果理解普通操作系统如linux的话,那跟普通操作系统没有区别 应用程序是一个有用户界面的程序,在独立的进程中运行 这与普通操作系统也没有区别 服务是没有用户界面的程序.服务管理一个或多个资源,并提供api,让客户可以访问它的服务.服务的客户可以是一个程序或是其它服务.每个服 务也运行在独立的进程空间中。 在symbian中,使用服务的形式提供类似其它操作系统上用驱动程序或是内核程序提供的功能。如文件系统的访问也是客户/服务类型的。(微内 核 ) 引擎是一个应用程序中操作数据而不是与用户交互的部分.通常你可以把一个程序分成引擎部分和一个GUI部分,多部symbian内带的程序都是这 样做的。 一个应用程序引擎可以是一个独立的代码模块或是一个独立的dll,或是几个dll. 引擎和应用程序间的边界是模块或dll的边界。 所以在symbian中有四个组件类型与三个边界类型。dll或是模块组件对交叉引用来说很方便。它们使系统模块化与保持封装。 权限边界对交叉引用比较费资源,但是保证系统对用户太程序隐藏内核与设备 进程边界是所有的交叉中最昂贵的,它们保证在ram中分开每个程序 可执行文件的格式 在symbian中有两种类型的可执行文件: exe,每个程序都有一个主入口E32main()(看上面的例子),它在独立的进程中运行 dll,提供多个入口,由系统或是已存在的线程(进程)调用 有两种类型的dll, 共享库dll,为一个或多个程序提供固定的api,这些dll多数后缀是.dll,当程序启动时就被读到内存中。 多态dll,这些dll实现抽象的api,如一个打印机驱动,socket协议或是一个应用程序。它们的扩展名多不是.dll,而是.prn或.prt或.app等。它 们从与dll相关的类继承,并通常只有在程序需要它们时才读入。 从技术上看起来与普通系统上动态库的静态载入与动态载入没有区别 但是从功能上看就不一样了,一种是实现某种特殊功能的,从某个相关类继承的dll,另一个是普通dll 代码执行 如果程序代码在rom上,则直接执行,不然需要读到ram中(与普通操作系统不同,普通操作系统都需要读到ram中 不能直接在硬盘上执行) 可执行代码包括三种类型的二进制数据: 程序代码 只读静态数据 可写静态数据 在symbian中对待.exe与.dll是不同的 由于.exe是不可共享的,如果它在ram中执行,那与普通pc系统没有区别,如果在ram中执行,那它在ram中为可写静态数据分配内存 而.dll是共享的,当dll首次读入内存中时,它被分配到一个特殊的地址,第二个线程需要这个dll时它只要访问已经存在的这份copy就可以。 在所有使用它的进程中dll的地址都是相同的。symbian系统维护一个引用计数,当没有其它线程引用时才将它unload. 在rom上的dll像rom上的exe一样直接在rom上执行 为了对dll的大小进行优化,symbbian进行如下操作; 多数系统支持通过名字与通过数字访问dll提供的入口,由于名字太长,浪费空间,所以symbian只提供通过数字访问,当然在link时可以通过 名字link.也就是说在.dll中没有名字访问办法,在.lib(引导库,引导linker正确的link这个dll,这个是在windows中使用的概念,在win下每 创建一个dll都会创建一个用户引导链接的同名.lib)中有,你的程序link时link的是.lib,link完成后编译器会自动把引用dll的代码变成数字引 用 如果dll被读到ram,那重定位信息(把dll load到什么地址)也必须包含在可执行文件格式中,这个的影响就是你不能把一个在rom中执行的程序放到ram中执行的程序.(rom中执行的多是 oem厂家,所以普通开发者多不用关心) 多数应用程序有自己有exe来创建进程,其它的程序使用动态库(DL)L的形式,在主服务线程中调用自己的线程 多数gui程序都是多态(polymorphic)dll,有一个主入口点NewApplication(),这个入口点创建并返回一个继承自CEikAppication的对象.这样的 程序被apprun.exe调用,app文件名为参数传入。 电源管理 电源必须高效使用 在系统已经关机时,确定程序仍然可以运行。如闹钤,关机后,到时时仍然可以开机 电源突然关掉时,关键数据应该可以保存 设备驱动 虽然一般不会了解它,但是理解一下还是很有用的 设备驱动工作在两个级别 第一个是中断服务程序(ISR),ISR必须很短,并且不能做很多事情,因为它可能在任何时间出现,甚至在内核服务中。通常它只是通知设备产 生了中断并设置一个标志,要求内核为第二阶段的处理运行一个延迟的函数调用(delayed function call DFC) 在方便的时候内核调度DFC.DFC可以使用多数的核心api,通常只是工作了后向用户线程通知io操作已经完成 定时器 ` 内核支持真机上64hz的时钟与模拟器上10hz的时钟 时钟中断是最高优先级中断,它可以通过User::After或是RTime::After访问。时钟中断在关机时停止,所以如果你请求5s后的定时操作,然后 跑2s,关机,再开机时它也要等3s 内核同时支持日期/时间时钟,你可以使用User::At或是RTime::At。这个定时器很准确。在关机时,如果时间到了,那它会开机,这对闹钟很 合适。 内存 symbian使用内存管理单元(memory management unit MMU)管理内存 ROM被映射到z:盘,被映射到一个固定的地址。 物理RAM被MMU分在4k的页,每个物理页可以用于: 用户进程的虚地址空间。 内核服务的虚地址空间 ram盘,盘符是c:,ram盘只可通过文件服务进程访问 如果dll不在rom中,那它被读到ram,dll被读到ram里面后页面标记为只读只读的。 MMU的页面转换表.如果想理解的话学习一下操作系统原理 自由页表 每个进程的地址空间可以分成下面三类: 系统范围的内存,如系统的rom或是读到ram中的dll 进程范围的内存,如进程的.exe映象和它的可写的静态数据 每个线程的内存,包括线程的栈与线程默认的堆(使用线程默认堆的原因只是为了提高内存分配与释放的速度,从开发角度来看,它与系统里面 的内存没有区别)。 注意没有交换文件,所以所有的内存都是直接使用。同时,也可能会发生内存不够或是磁盘(c 已满错误 每个线程的默认栈很小,只有12k,所以在symbian开发中,不要放太多东西到栈中,一般对象都是在堆中分配的。 线程创建后,它的栈大小就不可再改变。 线程可以使用new或是User::Alloc从线程默认堆中分配内存.如果希望从其它堆中分配内存,只能使用new 动态库(DLL) symbian中dll不支持可写的静态数据,所以你在里面不可能使用可写的全局变量或是静态变量. 为什么不支持呢?如果支持,那每个进程调用这个dll时,都需要为这个进程分配一个独立的堆,而堆最小单位是4k,系统中有很多堆,并且有很 多程序,所以内存消费基金是很大的。所以就不支持了 这样开发时不是很不方便?因为在dll中有时需要保存自己的状态,进行交互 为了解决这个问题,symbian中引入了线程本地数据(thread-local storage TLS)概念(查看Dll::Tls Dll;;SetTls)。但是调用TLS性能比较慢.tls的最大大小是1.8k 通常这够用了。 文件: c: flash ram盘 z: rom盘 d: 记忆棒之类的外挂盘 事件处理 事件处理模型如下图: keyborad |————————— |interrupt | kernel/driver–+-isr/dfc | key event | | window serv—–handle key event———–+update window | | |key event draw |request application +—————– handle ———-+ key event 在symbian中使用活动对象(active object)来处理事件 在symbian os中,所有的symbian os线程都是事件处理器,每个线程有一个活动调度对象,加上一个或多个活动对象来处理从设备或其它程序发过来的事件。 每个活动对象都有一个虚拟的成员函数RunL(),在这个函数里面处理事件。 多任务与抢占式 symbian os实现抢占式多线程。 活动对象用于在单个线程内实现非抢占式多任务 -------------------------------------------------------------------------------------------------------------------- SymbianOS6.X Series60界面的智能手机基本手机构造.. SymbianOS6.X Series60界面的智能手机,在插入MMC之后,系统一般存在4个逻辑存储驱动器:C(手机本身的用户存储,SX1有4M),D(虚拟 盘,使用空闲运行内存虚拟的缓冲盘),E(MMC),Z(手机的系统ROM只读)。 4个盘之中,C E Z盘的文件结构大同小异。而D驱动器是高速的虚拟驱动器,主要用来保存剪贴板、wap缓存、和一些临时交换文件,一般情 况下,由系统自动调用,与用户联系不多,不作详细介绍。下面我具体的将C E Z三个驱动器的目录结构和功能讲解一下。 随着安装软件的增 多,C和E盘的目录文件会变得纷繁复杂,我们抛开一些软件自动生成的次要的文件和目录抓住系统的结构谈一些主要的东西: E盘根目录下:IMAGES SOUNDS VIDEOS目录,顾名思义就是保存了图片铃声视频剪辑,这3个目录等效的出现在C和Z的Nokia目录下,也就是 说把相应类型的文件拷贝到对应的目录都可以被系统识别(Z盘只读除外),举例说明:midi文件或者wav文件拷贝在E:\sounds\digital\或者 C:\nokia\sounds\digital\就可以像Z:\Nokia\Sounds\digital\中固化的音乐文件一样,出现在情景模式铃声的选择项目中。 C:\Nokia是个无关紧要的目录,你完全可以删掉它而没有影响,但是这个目录会经常自动生成。原因是,C盘的Nokia目录中有特别的目录: INSTALL,很显然这个是为了安装软件而设置的。众所周知,Symbian系统的软件是打成SIS压缩包传入手机的某个存储器中(C、E)然后解包安 装的,系统往往在C:\NOKIA\INSTALL目录下保存一个安装副本,以备安装时遇到不可预见的错误(如突然没电)或者用户中断时能够恢复系统 安全,这也就是很多情况下,在空余很大空间的E盘安装软件时,仍然出现“存储空间已满”的原因,保持C盘有1M以上的空余空间是个很好的 习惯。另外不使用系统的manager转而使用SeleQ进行SIS安装也可以避免产生这个副本。 下面以分析一下结构最为复杂的系统核心C:\system目录。System目录由十几个目录和若干文件组成: ※APPS目录:该目录下的子目录保存了软件的主体即:用户交互可执行文件.app、 资源文件.rsc、 图标文件.aif 、无界面可执行程 序.exe以及运行所需的其他文件。安装在E盘的软件除了在E:\System\Apps\目录下保存软件主体之外,往往会在C:\System\Apps\同名目录下创 建一些配置文件。值得注意的是C:\System\apps\phone\oplogo保存了营运商的标志,如果该目录保存了97*25的bmp图像,则在待机状态下将以 该图片代替“中国移动”之类的营运商标志(需要重新启动手机); ※BootData目录:系统的启动参数和日志; ※Data目录:极其繁杂的目录,保存了各种各样的数据,简单介绍几个,backgroundimage.mbm壁纸,btstate.dat蓝牙配对信息, Calender日历,clockapp.dat时间参数,Contacts.cdb联系人,以及很多软件的配置文件和wap信息; ※favourites目录:收藏夹; ※install目录:保存了全部的软件安装信息,每安装一个软件,就在该目录下保存一个同名sis文件索引,大小在几百b到几K不等,假如 删除这个sis文件,在程序管理中就不会出现这个软件的安装信息,也就无法通过程序管理删除,但是仍然可以在apps目录中直接删除软件主体 和配置文件,有必要的话在libs目录中删除相应运行库,在programs目录中删除相应辅助运行文件,从而彻底卸载软件; ※libs目录:保存某些软件运行时需要的连接库文件,一般由软件安装; ※mail目录:信息目录,结构复杂费解,除了一些短信、彩信、EMail设置文件之外,收件箱、发件箱、草稿箱、发送报告、附件等等分布 在丛深复杂的目录之中。值得一提的是,S60的信息概念比较广,短信彩信Email甚至红外蓝牙传输的文件都属于“信息”,因此接受到的红外 蓝牙的文件,保存在mail目录下,而且可以由查看该信息触发相应的“安装”、“观看”、“编辑”等动作; ※MIDIets目录:java配置文件; ※midp目录:java程序主体安装在这里,如果全部java安装在E盘,C:\system\将不会出现这个目录; ※Programs目录:保存辅助运行文件,和一些无界面程序exe、动态连接库dll; ※Recogs目录:关联目录,里面的mdl文件标识了文件关联。如QuickWord.mdl标识了系统中的doc文件默认由quickword打开,另外有些mdl 文件会驱动程序运行,如eLoader.mdl驱动了miniGPS、ExtendProfile等ePsint公司开发的软件,没有这个mdl文件,以上两个软件不能自动加 载; ※Schedules目录:顾名思义,保存了日程安排; ※SharedData目录:全部是软件的配置文件.ini,对用户作用不大,但是可以通过修改其中的某些数值和路径从而使必须安装在C盘的软件 (多半是7650的软件,它没有mmc)安装到mmc; ※Temp目录:临时文件。 E:\system目录结构与C:\system基本一致,不同的是,少了intsall目录。 Z:\system比之C:\system更加庞大复杂,它保存了系统的全部自带程序、资源文件、硬件驱动、字体字库、国际化设置和初始参数设置。 在待机状态下输入*#7370#,将初始化手机,基本过程就是清空C盘,复制Z盘某些内容至C。某种程度上说Z是系统的初始备份。(新手机的第 一幅待机图就保存在Z:\system\data\apac.mbm) 关于路径问题。由于三个盘的system目录结构是相似的,所以同名路径所起到的作用相同,比如E:\system\recogs目录下的关联文件同样 可以起到关联作用,libs等目录类同(有些情况下将C的内容移动到E相应路径中,需要在C:\system\SharedData\对相应的ini文件进行修改) ,而在E(C):\system\下建立Fonts目录则可以加入新的系统字体。只有install目录仅仅在C:\system\下才有效。 了解S60系统的文件结构,对于我们使用手机有着很大帮助,可以最大限度的获取运行空间、了解错误产生的原因,有意识的避免可能会带 来伤害的操作。本文仅仅对文件结构做了初步的探讨和应用层面上的解释,进一步的研究可以在西门子和诺基亚论坛的官方文档得到全面解答 。希望有所帮助。 --------------------------------------------------------------------------------------------------------- 数据类型 描述 TInt8, TUint8 8位 整数 TInt16, TUint16 16位 整数 TInt32, TUint32 32位 整数 TInt, TUint (32位)整数 TReal32,TReal64 实数 TText8, TText16 字符, 相当于 unsigned char, unsigned short int TBool 布尔 TAny 相当于void 代码规范 Symbian OS 使用很多代码规范, 使用他们可以增强Symbain 代码的可读性, 有些规范甚至是需要严格遵守的, 比如类的命名: Symbian OS的类一共有6种: 种类 例子 描述 T classes TDesC, TPoint 这个类可以向基本类型一样使用,因为他们通常很小,而且不使用heap所以也没有析构函数 C classes CConsoleBase, CActive 这个类是Symbian使用最多的类,C代表他们从CBase类继承而来, 他们必须有析构函数因为他们的对象创 建在heap中 R classes RFile, RTimer R代表资源(Resource),它们只是一个系统资源的句柄,他们本身被创建在Stack上, 但是他们所使用的资源被创 建在heap上,使用完毕需要Close() M classes MEikMenuObserver 这个类是一个空的接口,使用的时候需要从它继承 static classes User, Math 这个类只有静态函数, 一般都是库函数 Structs SEikControlInfo c - struct 变量命名: 种类 例子 描述 枚举 EMonday,ETuesday E代表枚举 定量 KMaxFileName K代表定量 成员变量 iDevice, iX i代表成员变量 参数 aDevice, aX a代表参数 局部变量 device, x 局部变量没有固定的规范 ------------------------------------------------------------------------------------------------------- 对Symbian一无所知,当然只能从基础学起了,也许看一个例子再来看看基础更简单些。而我这人比较守旧,就是学不会这种方法,还只能从基 础开始。 Symbian的字符串和描述符: TPtrC、TBufC、HBufC 是从TDesC派生而来的具体的描述符类型。TPtr和TBuf这两个都是从TDes派生来,而TDes又是从TDesC派生而来。因此 TDes在TDesC上加了一些常量便利函数。 TDesC / | \ / TBufCBase TDes TPtrC | | \ TBufC、HBufC Tptr TBuf TDesC和TDes是抽象类。 _LIT它把一个符号和一个文字值联合起来,并且产生TlitC,TlitC的二进制形式与TBuf的二进制形式是一样的,因此可以把TLitC作为TDesC类 来代替。_LIT(he,"he"); const TDesc& hehe = he; _L产生一个TPtrC,并且不用制定名称也可以用。 const TDesC& he = _L("he"); _L与_LIT的区别就在于,_L需要开辟临时的栈区。

    时间:2016-05-10 关键词: Symbian

  • 学习Symbian的基本概念

    一、基本数据类型 这个比较简单,都在e32def.h中写着呢。也就是以下这几个类型要注意一下,以后照着写罢了,含义也很明了,不用多说。 typedef void TAny; typedef signed char TInt8; typedef unsigned char TUint8; typedef short int TInt16; typedef unsigned short int TUint16; typedef long int TInt32; typedef unsigned long int TUint32; typedef signed int TInt; typedef unsigned int TUint; typedef float TReal32; typedef double TReal64; typedef double TReal; typedef unsigned char TText8; typedef unsigned short int TText16; typedef int TBool; typedef TUint32 TLinAddr; //Defines a linear (virtual) address type. 二、描述符 这个东西比较有趣,其实说白了,也就是两个我们以前常用的玩意儿:String和malloc。不过在symbian中把描述符分为三类:缓冲描述符、指针描述符和堆描述符。 A.缓冲描述符:TBuf、TBufC 类似于char[],也就是说它是一个字符串的表示方法,比如:TBuf<20> str;与我们以前写的char str[20];意思基本一样。 不过,描述符可以包含一些方法,就象我们用String主要就是冲着它的方便的字串处理方法去的。 B.指针描述符:TPtr、TPtrC 类似于char *,也就是说这是一个字符(字节)指针的另类表示罢了。 C.堆描述符:HBufC 类似于我们用malloc开辟的一块空间,比如:HBufC * buf = HBufC::NewL(128);与 byte * buf = (byte*)malloc(128);的意思也是基本一样的。 还有一种抽象的描述符TDes和TDesC,是其它描述符的基类。 所有描述符名称后面的C表示它是一个不可修改的描述符。换句话说就是,所有不带C的描述符是在带C描述符的基础上增加了一些进行修改操作的函数。 要记住的是描述符带给我们的便利。 比如这几个函数: Length() 得到字串的真实长度(元素个数),而Size()则是得到它所占的字节数。 Left()/Right()/Mid() 是用来获取子字符串的函数。 Compare() 比较函数。 Locate()/LocateReverse()/Find()/Match() 则可以查找子串或字符。 Copy()/Delte()/Insert()/Replace()/Trim()/Append()/Zero() 则可以对描述符的内容进行修改操作。 Num() 可以将数值转成字符串。 Format() 类似于sprintf,比较常用,格式化输出。不过还有同系的其它函数也许更方便,如AppendFormat()/AppendNum()等等。 对于堆描述符,需要注意的地方有三点: 一是Des(),因为HBufC带C是不可修改的描述符,所以如果我们要修改它,则需要用buf.Des()得到一个指向它的指针描述符。如下句: _LIT(KHello,"hello china"); HBufC * buf = HBufC::NewL(64); *buf=KHello; TPtr p = buf->Des(); p[0]='H'; 二是在TDesC中有一个AllocLC()可以分配内存得到HBufC描述符,与HBufC::NewL()是一样的。而且HBufC中也有ReAllocL可以重新分配内存,就象realloc一样。 三是区分一下两句话的含义: TPtr p=buf->Des(); TPtr p(buf->Des()); 第一句只是根据buf当前的真实长度得到一个指针(p的最大长度与当前的实际长度一样,就是buf此时的真实长度11),而第二句则完全用buf的信息来构造了p,所以它的最大长度应该是64,虽然当前的真实长度也是11。 还有一个与描述符相关的宏很常用,需要注意一下:_LIT(常量名称,字串值)。比如: _LIT(KSayHelloSTR,"Hello world."); 而那个_L宏不提倡用了,因为效率太低的原因。 这里的KSayHelloSTR是另一种描述符TLitC。而TLitC提供两个运算符要注意: &操作符能得到它的const TDesC*,而()操作符则得到它的const TDesC&。 KSayHelloSTR().Length(); //得到这个字串的长度 TBuf<256> str; str.Format(KFormatSTR,&KSayHelloSTR); //得到这个字串的引用地址 具体关于描述符的信息可以参考H文件:e32des16.h 三、错误处理 有三个概念,一是Leave。最常见的地方是对new操作符的重载new(ELeave),表示此时的构造会产生内存不足的现象。 有了new(ELeave),我们就可以放心地在new一个对象之后直接使用它而不需要去判断是否构造成功,因为如果不成功会抛出错误并返回上层。 第二个概念配合Leave,有一个宏TRAPD(error,Func)类似于try...catch...。 也就是说如果Func函数中发生了Leave,则error能得到错误码。一般在程序中可以用User::Leave()来抛出错误,类似于throw new Exception的操作。 第三个概念也是最常用的,就是清理栈CleanupStack的使用。 取代TRAPD宏的使用,我们可以在可能发生Leave之前将指针push到cleanupstack中,在正确完成之后再将它pop出来,如果万一不成功,系统会帮我们将cleanupstack中的东西销掉。这样就方便了很多。 一般的代码类似于: CMyCls * mc=new (ELeave) CMyCls; CleanupStack::PushL(mc); me->doSth1L(); me->doSth2L(); CleanupStack::PopAndDestroy(); 一般我们是将局部变量用cleanupstack来保护一下,但是对于类的成员变量则不能这样做(否则会二次销毁,产生严重错误)。 此外,在pop时超出范围了,压几个就弹几个,如果不小心把其它的内容给弹出来,也可能会引起严重错误的。所以,Pop有一个重载Pop(3,pA)这里表示弹出三个对象并且比较一下最后出栈的是不是pA。 四、两阶段构造 一般Symbian的类不会提供public的构造函数(不建议这么做),因为它提倡所谓的“两阶段构造”方法。定义为: A)构造函数是protected或者privted的,并且不能包含引起Leave的操作。 B)实现两个静态函数NewL和NewLC,来代替构造函数提供给用户使用。 C)实现一个ContructL函数实现第二阶段的构造,其实大多数初始化的工作可以放在这里进行。 两阶段构造的代码相当地格式化了,比如两个静态函数NewL和NewLC的代码一般是这样的: CMyClass * CMyClass::NewL() { CMyClass * self=NewLC(); CleanupStack::Pop(); return self; } CMyClass * CMyClass:NewLC() { CMyClass * self = new(ELeave) CMyClass; CleanupStack::PushL(self); self->ContructL(); return self; } 而在ContructL中一般可以做一些真正的构造函数里的操作,例如分配内存、创建窗体之类的活儿。 五、命名规则 这也是一个需要注意的地方,按教材上所言列举如下: 类的名称前缀有T、C、M和R四个,分述如下: T表示基本类,它位于栈里,就当作是一个结构吧。 C表示常规的类,继承于CBase的,这是C++标准的类的概念,所以有构造要析构。 M表示是一个接口,很好理解,它肯定含有纯虚函数。 R表示是一个系统资源,比如文件、网络等等,所以它肯定有Open有Close。 还有,K开头表示常量、E开头表示枚举也要记得。 形参用a开头,类成员变量用i开头,这此规则我们在自动生成的代码中也能看到。 还有函数的命名上也有讲究,不过不是开头而是结尾:象L表示可能会有Leave,LC表示不但可能有Leave而且它会被自动放在CleanupStack中。 还有两个二阶段构造又有三个函数名称固定了:NewL、NewLC和ContructL。

    时间:2016-05-10 关键词: Symbian

  • 什么是Symbian

    Symbian 概述 Symbian OS(中文译音“塞班系统”)由诺基亚、索尼爱立信、摩托罗拉、西门子等几家大型移动通讯设备商共同出资组建的一个合资公司,专门研发手机操作系统。而 Symbian操作系统的前身是EPOC,而EPOC是 Electronic Piece of Cheese取第一个字母而来的,其原意为"使用电子产品时可以像吃乳酪一样简单",这就是它在设计时所坚持的理念。 Symbian操作系统在智能移动终端上拥有强大的应用程序以及通信能力,这都要归功于它有一个非常健全的核心-强大的对象导向系统、企业用标准通信传输协议以及完美的sun java语言。Symbian认为无线通讯装置除了要提供声音沟通的功能外,同时也应具有其它种沟通方式,如触笔、键盘等。在硬件设计上,它可以提供许多不同风格的外型,像使用真实或虚拟的键盘,在软件功能上可以容纳许多功能,包括和他人互相分享信息、浏览网页、传输、接收电子信件、传真以及个人生活行程管理等。此外,Symbian操作系统在扩展性方面为制造商预留了多种接口,而且EPOC 操作系统还可以细分成三种类型:Pearl/Quartz/Crystal,分别对应普通手机、智能手机、Hand Held PC场合的应用。 基于Symbian的UI 目前根据人机界面的不同,Symbian体系的UI(User Interface 用户界面)平台分为Series60、Series80、Series90、UIQ等。 为了更强力地支持Symbian平台,Nokia在2001年成立NokiaMobileSoftware新部门,全力发展移动通信相关的软件。为了让手机厂商有更多的选择以投入Symbian手机的开发,Nokia发展出三种不同的用户界面:Series 60/80/90。Series60主要是给数字键盘手机用,Series80是为完整键盘所设计,Series90则是为触控笔方式而设计。另外一个重要的平台是由Symbian百分之百转投资的UIQTechnology所开发出来的UIQ。 Nokia开发的UI平台 Series 20/30多为低端手机所采用,Series 40多为中端商务手机所使用支持Java的扩展,Series 60/80/90是为采用Symbian系统的中高端智能手机和高端商务手机而设计。 Series 20 : 84x48 Pixel s/w Display, Nokia OS Series 30 : 96x65 Pixel s/w Display, Nokia OS Series 40 : 128x128 Pixel , Nokia OS 手机型号如:6230,7210 Series 60 : 基本定位于单手操纵设备,176X208, 240x320、352x416分辨率,五方向键,两个功能键。使用Symbian OS Preal平台。里面的菜单呈九宫格方式排列。支持MIDP JAVA和使用C++编写的.SIS扩展程序包。不失小巧体积的强力手机系列。代表机器有6681/7610/N73/N80/N95,同时这个系统和 UI Style也授权给了一些其他手机厂商比如西门子、三星、松下等。 Series 80 : NOKIA把这个系列的机器叫做Communicator,在型号上只有一个系就是9系。使用的是Symbian OS Crystal平台。它代表了NOKIA最强的技术,每代都是当时NOKIA所有最高级技术的集合体。最大特点就是像个铅笔盒(或者说遥控器……),外部有一个标准的手机操作界面,里面横向打开后有一个640X200的大屏幕,有四个功能键、N个快捷键和一个完整的QWERTY键盘。净重通常都在200克上下,但是功能强大。可以说是最棒的商务用手机了。NOKIA自己的高层基本都用这玩意儿。典型代表有9110/9210/9300/9500 (抛掉9000和9210C/9290这些过渡品不说,这个系就只出了这几款)。 Series 90 : 使用640X320的大屏幕,除了很少的几个功能/方向键以外完全是触摸屏控制。典型代表有7710。 因为Seires 20/30不支持扩充功能,所以没有相应的对外公开的它们UI Style文档,Series 40、Series 60/80/90的UI Style文档以及SDK均可以在Nokia的Developers频道免费下载。 UIQ开发的UI平台 Symbian提供了灵活的用户界面(Use interface UI),来适应不同的用户需求。目前基于Symbian的用户界面有很多,主要是Series 60/80/90以及UIQ,这其中从功能上来说UIQ最为强大,同时这也是更加贴近智能手机范畴的系统。这种UI我们都可以理解为Symbian之上的 Shell,它对Symbian的界面进行不同的“包装”,同时增加了一些常用的应用程序。 为了推广和完善UIQ,Symbian成立了UIQ技术公司(UIQ Technolgy),这是一家旨在开发和推广UIQ的公司。从目前来看似乎UIQ并没有诺基亚的Series 60系统来得流行,因为基于UIQ平台的手机产品比较少;但是随着UIQ 3.0的出现这种情况将发生戏剧性的变化,今年会有更多的厂商选择为产品配置UIQ平台。 Series 60界面介绍 作为目前Symbian智能机中出货量最大的用户界面,Series 60(简称“S60”)受到了厂商和广大用户的追捧和喜爱。厂商更是投入了大量的资金对Series 60进行研发。Series 60从诞生至今已经有了五个版本,并且有多个PARK。 Series 60的三个版本分别支持以下功能: Series 60第一版基本功能: 个人信息管理;日历、电话本、照像册、目录、与PC同步的文件管理应用程序; 连接:支持USB、蓝牙、IrDA协议。 短信服务:基于GSM传输的450个字节以下的短信服务。 E-mail:支持IMAP4, POP3, SMTP, MIME2。支持GRPS。 其它:中文支持、PC连接软件、插件、RealOne Player, XHTML 移动协议。 Series 60第二版基本功能: 多媒体:照相机、图像浏览、RealOne Player、多媒体应用程序 个人帐户管理:通过因特网支付信用卡的支持 文件管理:充许使用者创建、删除、移动文件或是目录。 应用软件管理: 个人主题:包括UI themes,如更换背景、图标。 其它:HTTP 支持,高级MMS 服务,支持SMIL协议,录音功能。 Series 60第三版基本功能: Macromedia Flash 、音乐播放、OMA DRM 2.0 、单机应用程序、桌面主题、新内容格式,支持MS ActiveSync、Windows Media Player mpeg、MS DRM编码;synch 1.2,IMAP/POP、 OMA email notification, OMA data synch, email 检测。 目前,支持Symbian OS的厂商很多,Symbian OS的发展前途被大多数人所看好。其良好的开放性和第三方软件易开发性,可以更好更快地进行市场占领。 Series 60第五版基本功能: S60平台跳过了第四版直接进入第五版 功能上在第三版的基础上增加了一些新特性,如支持640*360像素大屏幕的触摸及手写操作,支持flash lite 3.0,支持网页中显示flash和收看网络上的在线flash(FLV)视频,虚拟全键盘等 Symbian的特点 Symbian作为一款已经相当成熟的操作系统,具有以下的特点: 第一,提供无线通信服务,将计算技术与电话技术相结合。 第二,操作系统固化。 第三,相对固定的硬件组成。 第四,较低的研发成本。 第五,强大的开放性。 第六,低功耗,高处理性能。 第七,系统运行的安全、稳定性。 第八,多线程运行模式。 第九,多种UI,灵活,简单易操作。 以上总结的九点,并不代表说为Symbian OS所独有,只是Symbian OS将其这些特点突出,并且充分的这些特点发挥了优势,让其更好的为用户服务。 Symbian的缺点 Symbian机型所采用的硬件配置较低,且各类机型采用的的处理器主频较低,虽然系统可以使其获得较高的处理效能,但是在多媒体等方面的表现依然不尽如人意。在多媒体方面,Symbian OS对主流的媒体格式的支持性较差。Symbian OS虽然采用多种平台,来适应不同人群和各类需要,但是这也给Symbian OS带来了一种限制性的发展障碍。各个平台之间第三方软件不兼容,且软件开发商多专注于某一个平台,大大减少了各个平台上可用的第三方软件,给用户带来了一定的不便。版本之间兼容性差也是Symbian OS需要改进的一个地方,每当新版本的Symbian OS发布并有产品面世时,系统的兼容性便成了其发展的一个大敌。相当多的一部分软件需要软件开发商跟进,开发新的版本才能得以解决。 细节注意不够,由于symbian只提供给厂商一个内核及UI,很多细节功能需要厂商去添加,但是很多厂商将着眼点放在了产品的多功能及综合性能等方面,往往忽略了一些基本的功能。一些机型甚至连工作日闹钟这类功能都需要第三方软件才能实现,这无疑给不熟悉symbian的用户的带来了极大的不便。 Symbian的硬件构成 一般来说,Symbian系统的主要以下几个硬件部分组成,中央处理器、ROM、RAM、IO设备和电源。各个硬件构成各司其职,保证系统的运行。 Symbian系统一般采用32位处理器,系统运行及数据运算都依靠处理器来完成。ROM内固化Symbian系统和设备自带的各项功能。RAM则是用以存放当前活动的程序和系统运行必需的数据,以及各类临时性交换文件,或者作为WAP缓存等,此外还负责存放用户的一些数据。IO设备包括一般的控制设备,如键盘,触摸屏、扩展存储卡、蓝牙接口等。电源则为电池或者外接电源。以Series 60手机为例,一般会采用德州仪器的ARM处理器,在插入存储卡之后,系统一般存在4个逻辑存储驱动器:C盘——手机自带的用户存储盘,即Flash Memory,这种芯片的优点是不需要电力来维持资料,并且可以随时修改,D盘则是一个以空闲运行内存虚拟的缓存盘,E盘是用户插入的MMC卡,Z盘则固化了系统,即我们之前说到的ROM Symbian发展记事 2008年6月24日塞班公司被诺基亚全资收购,成为诺基亚旗下公司。 2005年初我们看到发布的版直接就是Symbian OS v9.1操作系统。该版本改善了应用程式及其内容保护,使用了新型ARM处理器,软体开发人员必须要改变安全设定码才能正确使用。紧接着同年2月14日发布,诺基亚发布了S60 3rd Edition(第三版),它正是主要基于Symbian OS v9.1操作系统的。S60第三版提供了由Symbian Signed认证和一种更高效的二进制格式来加强行业领先的安全性。 2004年 已经发布的采用Symbian OS 的手机包括Panasonic X700, Motorola A1000, Nokia 9500, 7610 和N-Gage QD, Samsung SGH-D710。Arima公司与LG电子获得了Symbian的授权。同时,联想公司决定将Symbian操作系统用于他们最近的手机产品中。 2004年2月,Symbian在授权LG等公司的时候,同时也发布了最新的Symbian OS v8.0,并提供了8.0a和8.0b两个版本。该版本改善了实时系统性能,提高了原有操作系统的兼容能力。此后不久,诺基亚针对它发布了S60第2版 Feature Pack2,它正是采用的Symbian OS v8.0a操作系统。同年,Symbian联盟又发布了Symbian OS v8.1版,基本上它是优化过的Symbian OS v8.0版,也提供了8.1a和8.1b两个版本,各自代表搭载EKA1和EKA2核心。搭载EKA2版本的8.1b支援单晶片手机,但不包含额外的安全层。那么诺基亚紧接它之后发布的S60第2版Feature Pack3就是采用Symbian OS v8.1a操作系统的。接下来按理该发布Symbian OS v9.0,但是这个版本并没有正式发布,而在2004年就被停止开发。 2003年 在当年中国智能手机系统平台市场份额中,Symbian占有整个智能手机系统平台市场份额的66.6%,处于绝对领先,微软操作系统紧随其后,占有22.5%的市场份额,而Palm OS和Linux在中国智能手机系统平台市场份额中的份额还非常小。 Symbian作为最老牌的手机操作系统平台的开发商,在进入了智能手机时代后,Symbian也并没有放弃发展的机会,以 Symbian7全新的风格来迎接时代的挑战,新的操作系统具备了多媒体娱乐,无线传输(包括蓝牙),并且加入了Sun公司的新Java虚拟机 (JVM),可以提供更高的性能和有利于Java应用程序的下载。并可以适用于GSM,CDMA等多种模式,同时为了配合流行的操作习惯基于 SMYBAIN OS厂家推出了三种平台:S60配合单手操作,S80配合双手操作,UIQ配合使用触笔操作。 2002年 DoCoMo 发布富士通第一款基于Symbian 操作系统的3G 手机 Sendo 取得Symbian 操作系统的许可证诺基亚发布诺基亚3650 和N-Gage 2002 年6 月诺基亚7650 向公众出售 西门子成为Symbian 的股东 索尼爱立信发布P800 Smartphone 适用于3G 手机的Symbian 操作系统v7.0 问世索尼爱立信成为Symbian 的股东和许可证持有者 2001年 富士通取得Symbian 操作系统的许可证第一款基于Symbian 操作系统的2.5G 手机,诺基亚7650 发布全球第一款采用开放式Symbian 操作系统的手机,诺基亚9210 个人通讯器向公众出售,同时还提供多样的开发商工具 Symbian 成为SyncML Initiative 的赞助商西门子取得Symbian 操作系统的许可证 2000年 索尼和三洋取得Symbian 操作系统的许可证全球第一款基于Symbian 操作系统的手机,爱立信R380 Smartphone 向公众出售 Symbian 被通用移动通信系统论坛(UMTS Forum) 评为“成功地在信息社会移动通信领域引入通用移动通信系统(Universal Mobile Telecomunication System, UMTS)” 1999年 Matsushita(松下)加入Symbian,成为其股东和许可证持有者 Symbian 被美国的Red Herring 杂志评选为“综合评定最佳”和“最具长期潜力”的公司。 1998年 Symbian 成立于1998 年6 月,是由爱立信、摩托罗拉、诺基亚和Psion 共同持股的独立私营公司。 Symbian的优势 Symbian的优势在于它得到了占据市场份额大多数的手持通讯设备厂商的支持,在NOKIA的大力倡导下,已经成为一个开放的、易用的、专业的开发平台,支持C++和java语言。同时在以下方面提供平台级支持: 协议标准:TCP,IPv4,IPv6,蓝牙,Java,WAP,SyncML,USB 通讯能力:支持多任务、面向对象基于组件方式的2G、2.5G和3G系统及应用开发,GSM,GPRS,HSCSD,EDGE,CDMA(IS-95)以及2000技术支持 信息定制:SMS、EMS、MMS、EMAIL和FAX支持 应用丰富:名片管理、通讯录、信息服务等 安全稳定:数据完整性支持,可靠高效的电池管理,数据同步,数据加密,证书管理,软件安装管理 多媒体 :图片、音乐、甚至视频浏览 Internet:互联网连接和浏览以及内容下载,POP3/SMTP/IMAP4 国际化 :支持Unicode,多种字体和文字格式 Symbian的未来 作为一个手持设备的操作系统,Symbian无疑面对的是一个完全不同于Windows的环境。最为不同的是UI和用户操作方式。当然主流任务也不同。那么Symbian能够担当起对抗微软的大任嘛? 从开发者的角度看,微软之所以成功是一条沿着不断丰富功能、不断降低开发者难度从而聚揽人气的道路。微软从简单的DOS入手,发展到Windows XP现在这个庞然大物,不断经历着推出新技术-〉推出新的开发工具和资源-〉提高开发效率的过程。这大概也是为什么现在windows下程序员特别多的原因吧? Symbian能否达到微软这个高度呢? 从现在来看,当然还有很大的差距。但是可以看出Symbian正在学习微软这个方面的优势,推出各种和程序员互动的形式,不断丰富自己的知识库,力图让自己成为入门容易的开发平台。同时也紧紧抓住了C++和JAVA这世界上汇集优秀人才最多的开发语言(据说Borland 也为Symbian设计了开发平台)。 从程序开发本身来看,开发效率和执行效率是一对天生的矛盾体。开发效率要提高,无疑就要降低执行效率。微软通过Wintel联盟,不断推动硬件的提速从而缓解由于软件执行效率降低带来的整体效率降低。那么Symbian要支持多种多样应用,无疑也要走这条路。 从目前看,虽然还没有厂商公开宣传手机的各种硬件速度,无疑的是后台的Mhz大战正在悄悄开始。 [编辑本段] sysmbian与其他手机操作系统比较及前瞻 Symbian 市场占有份额:★★★★☆ 技术跃升幅度:★★★☆ 看点和重要性:★★★☆ 多年来Symbian系统一直占据智能系统的市场霸主地位,系统能力和易用性等各方面已经得到了市场和手机 用户们的广泛认可。 Google Android 市场占有份额:★★☆ 技术跃升幅度:★★★★☆ 看点和重要性:★★★★☆ Android的出现并强势发展是近期手机行业当中引人注目的大事,Google介入手机领域的方式出乎所有人的 意料,并非是之前人们所猜测的智能手机,而是联合30多家技术和无线应用领域当中的领军厂商所组成的开放式 移动设备平台。 Windows Mobile 市场占有份额:★★★★ 技术跃升幅度:★★★☆ 看点和重要性:★★★★ Windows Mobile(WM)系统源自Windows桌面系统,有着桌面应用的血脉,因此无论是界面设计还是功能应 用都几乎和PC机如出一辙,在早期推广的时候,这也是大量用户投入到WM旗下的原因。 Linux 市场占有份额:★★★ 技术跃升幅度:★★★ 看点和重要性:★★★ 虽然在理论上Linux系统有着最为开源的特性,给开发者发挥的空间最大,但从近几年的发展来看,Linux系 统似乎仍然远离着多数的普通消费者。 Palm OS 市场占有份额:★★ 技术跃升幅度:★★☆ 看点和重要性:★★☆ Palm OS作为一款嵌入式操作系统,用于PDA等专业设备上确实是它的强项。但是,在Palm发展11年之后,已 经日益进入寒冬期,或许捍卫中高端专业领域才是它的正道。

    时间:2016-05-10 关键词: Symbian

  • 手机操作系统介绍之Symbian系

    Symbian操作系统是现今手机领域中应用范围最广的操作系统,并且拥有相当多针对不同用户的界面,也就是常说的Series。关于Symbian操作系统的界面,我们先来明确一个概念:不管是Series60、Series80、Series90还是UIQ,它们都是基于Symbian平台而开发的界面,然后各自根据一些硬件特性来进行区分。Series的全名是SeriesDeveloperPlatform。目前有三种不同series,分别为 series 60、series 80、series90。 Series 60 采用Series60界面的智能手机是目前Symbian智能机中出货量最高的。它具有以下特征:176208或更高分辨率的彩色屏幕、两个功能键、五方向键、数字键盘及特殊功能键,九宫格菜单。采用Series60界面的手机体积相对较小,用户完全可以用单手完成全部操作。此外,Series60界面手机还具有诸如数码相机、SMS、MMS、个人信息管理(PIM)、音频及视频录制、XHTML/WML浏览、JAVA支持等功能。 Series 80 Series80具有强大的商务办公性能和高速数据能力,被应用于高端产品。采用Series80界面的移动设备特征很明显:可折叠,内屏为 640200 的高分辨率屏幕。类似于PC键盘的完整键盘,存储空间大,可以存储较多数据、文件。采用Series80界面的产品支持各类文档、电子表格(SpreadSheet)以及演示文件的编辑操作,以及PDF浏览,并且随着技术的发展,采用series80界面的移动设备开始支持WLAN无线网络,可以高速浏览HTML和XHTML页面,收发电邮,因此,被作为高端,顶级的商务PDA。 Series 90 Series 90的开发与Series80的开发密切相关。两者间既有联系又有区别,如果说Series80偏重于商务功能,Series90则偏重于多媒体娱乐。它具有一个320640的高分辨率彩色屏幕,采用触摸屏设计,屏幕虚拟键盘,通过手写识别进行操作。Series90为用户提供了强大的多媒体应用和网络等方面的功能,用户可用其进行多媒体播放和互联网浏览。 UIQ Series: UIQSeries操作平台的特性是它的多媒体性,功能全面。UIQ界面上可支持手写操作,不过切换和关闭任务比较麻烦。UIQSeries是 SymbianOS 的系统架构上,专门为高阶的多媒体手机而设计,使用起来非常类似PDA操作。它的主要特征为:一个208320的触碰式彩色屏幕,可以通过手写笔进行输入和操作。大部分机型没有键盘。 介绍Symbian,就不得不提到Series60,正是这个UI界面,让我们接触、了解了Symbian。所以有必要对Series60进行稍微详细点的介绍。作为目前Symbian智能机中出货量最大的用户界面,Series60受到了厂商和广大用户的追捧和喜爱。厂商更是投入了大量的资金对 Series60进行研发。Series60从诞生至今已经有了三个版本,并且有多个PARK。 Series 60的三个版本分别支持以下功能: Series 60第一版基本功能: 个人信息管理;日历、电话本、照像册、目录、与PC同步的文件管理应用程序; 连接:支持USB、蓝牙、IrDA协议。 短信服务:基于GSM传输的450个字节以下的短信服务。 E-mail:支持IMAP4, POP3, SMTP, MIME2。支持GRPS。 其它:中文支持、PC连接软件、插件、RealOne Player, XHTML 移动协议。 Series 60第二版基本功能: 多媒体:照相机、图像浏览、RealOne Player、多媒体应用程序 个人帐户管理:通过因特网支付信用卡的支持 文件管理:充许使用者创建、删除、移动文件或是目录。 应用软件管理: 个人主题:包括UI themes,如更换背景、图标。 其它:HTTP 支持,高级MMS 服务,支持SMIL协议,录音功能。 Series 60第三版基本功能: Macromedia Flash 、音乐播放、OMA DRM 2.0、单机应用程序、桌面主题、新内容格式,支持MSActiveSync、Windows Media Player mpeg、MSDRM编码;synch 1.2,IMAP/POP、OMA email notification, OMA data synch,email 检测。 目前,支持SymbianOS的厂商很多,SymbianOS的发展前途被大多数人所看好。其良好的开放性和第三方软件易开发性,可以更好更快地进行市场占领。但是,如果没有足够的第三方应用软件的跟进,SymbianOS就无法发挥其强大的支持扩展能力,让我们共同祝愿SymbianOS在智能移动设备的道路上越走越远! Symbian作为一款已经相当成熟的操作系统,具有以下的特征: 第一,提供无线通信服务,将计算技术与电话技术相结合。 第二,操作系统固化。 第三,相对固定的硬件组成。 第四,较低的研发成本。 第五,强大的开放性。 第六,低功耗,高处理性能。 第七,系统运行的安全、稳定性。 第八,多线程运行模式。 第九,多种UI,灵活,简单易操作。 以上总结的九点,并不代表说为SymbianOS所独有,只是SymbianOS将其这些特点突出,并且充分的这些特点发挥了优势,让其更好的为用户服务。 Symbian OS的不足 Symbian机型所采用的硬件配置较低,且各类机型采用的的处理器主频较低,虽然系统可以使其获得较高的处理效能,但是在多媒体等方面的表现依然不尽如人意。在多媒体方面,SymbianOS对主流的媒体格式的支持性较差。SymbianOS虽然采用多种平台,来适应不同人群和各类需要,但是这也给 SymbianOS带来了一种限制性的发展障碍。各个平台之间第三方软件不兼容,且软件开发商多专注于某一个平台,大大减少了各个平台上可用的第三方软件,给用户带来了一定的不便。版本之间兼容性差也是SymbianOS需要改进的一个地方,每当新版本的SymbianOS发布并有产品面世时,系统的兼容性便成了其发展的一个大敌。相当多的一部分软件需要软件开发商跟进,开发新的版本才能得以解决。细节注意不够,由于symbian只提供给厂商一个内核及UI,很多细节功能需要厂商去添加,但是很多厂商将着眼点放在了产品的多功能及综合性能等方面,往往忽略了一些基本的功能。一些机型甚至连工作日闹钟这类功能都需要第三方软件才能实现,这无疑给不熟悉symbian的用户的带来了极大的不便。 Symbian的硬件构成 一般来说,Symbian系统的主要以下几个硬件部分组成,中央处理器、ROM、RAM、 IO设备和电源。各个硬件构成各司其职,保证系统的运行。 Symbian系统一般采用32位处理器,系统运行及数据运算都依靠处理器来完成。ROM内固化Symbian系统和设备自带的各项功能。RAM则是用以存放当前活动的程序和系统运行必需的数据,以及各类临时性交换文件,或者作为WAP缓存等,此外还负责存放用户的一些数据。IO设备包括一般的控制设备,如键盘,触摸屏、扩展存储卡、蓝牙接口等。电源则为电池或者外接电源。以Series60手机为例,一般会采用德州仪器的AMR处理器,在插入存储卡之后,系统一般存在4个逻辑存储驱动器:C盘手机自带的用户存储盘,即FlashMemory,这种芯片的优点是不需要电力来维持资料,并且可以随时修改,D盘则是一个以空闲运行内存虚拟的缓存盘,E盘是用户插入的MMC卡,Z盘则固化了系统,即我们之前说到的ROM.[!--empirenews.page--] 开发须知: 在Symbian的架构上有多种不同的平台,他们提供不同的软件开发套件(SDK)给程式开发人员,最主要的分别是UIQ和S60平台。个别的手机制造商,或是同家族系列,通常也在网络上提供可下载的SDK和软件开发延伸套件(SymbianDeveloperNetwork)。SDK内含说明文件、表头档案、数据库和在Windows运作的模拟器(WINS),到了 Symbianv8,SDK加入了该版本的GCC编译器(跨平台编译器),才能够正常在装置内使用。 由于Symbianv9使用新的ABI,所以需要一个新的编译器。在SDK方面来说,UIQ提供简化的framework使得单一的UIQSDK提供所有使用UIQ3的装置的开发基础,使用UIQ3的装置像SonyEricsson P990、M600和P1i。 SymbianC++程式设计在市售的整合式开发环境(IDE)之下完成。之前较常见的是 VisualStudio,但是以现在的Symbian版本,比较偏爱于Symbian版的CodeWarrior。不过在2006年Nokia的 Carbide.c++将会取代CodeWarrior。预期 Carbide.c++会释出不同版本:其一个免费版(Carbide.c++Express)允许使用者在模拟器上去设计软件原型。 还有为Symbian设计的Borland IDE。Symbian操作系统也可借由社群的技术开发而在Linux和MacOSX的环境下开发,有些部份Symbian允许公开key tool源代码。有一个插件允许在的Xcode IDE for MacOSX的环境下开发Symbian应用程式。 开发完成后,Symbian的应用程式需要找一个管道传输到消费者的移动电话。它们通常包装成SIS档案,透过电脑连线、蓝牙或是记忆卡。一个替代方案是去找手机制造商来合作使手机内建该程式。但是在SymbianOS9的SIS档案会稍稍不易推广,原因是每个程式都至少要拥有Symbian的签署才能安装在该操作系统的手机。 Java MEforSymbian的应用程式是使用正式的技术开发工具像是J2ME无线套件。它们包装成JAR或JAD档案。其他像是名为SuperWaba的工具是提供建立SymbianOS7.0或7.0s的Java应用程式。

    时间:2015-01-13 关键词: 手机 Symbian 操作系统 驱动开发

  • 配置Symbian WINS Emulator

     随着Symbian设备的快速增长,越来越多不同配置的Symbian设备开始在市场上出现.这对于个人开发者和小公司来说,在不同配置的Symbian设备上进行测试就成了一个很浪费时间的工作.精确的模拟不同Symbian设备的配置也就显得尤为重要了. 一个重要的模拟器配置文件(epoc.ini),它的位置在 %EPOCROOT%\epoc32\data\. 我们将在下面的文章中来一起了解它是如何配置磁盘和内存的. 驱动器配置 模拟器将在PC文件系统之上映射Symbian平台文件系统. 两个默认驱动器: C:(NS60设备上的闪存文件系统) Z:(设备ROM) 这两个驱动器的默认路径为: C: = %EPOCROOT%\epoc32\wins\c Z: =%EPOCROOT%\epoc32\data\z+%EPOCROOT%\epoc32\release\wins\udeb\z 这里我默认设定模拟一个MMC卡 _EPOC_DRIVE_D c:\symbian\6.1\Series60\epoc32\wins\d _EPOC_DRIVE_E c:\symbian\6.1\Series60\epoc32\wins\e 另一个有趣的设定是把PC的软驱模拟为MMC驱动器. 你将可以模拟MMC卡是否插入的状态而不必重新配置模拟器 _EPOC_DRIVE_D c:\symbian\6.1\Series60\epoc32\wins\d _EPOC_DRIVE_E a: 内存配置 Epoc.ini文件也可以用来定义设备内存的大小.这可以通过使用MegabytesOfFreeMemor关键字来完成 // 解析epoc.ini // 模拟16MB内存设备 // (考虑到系统运行需要1MB内存,因而定义为15) MegabytesOfFreeMemory 15 在NS60的SDK上,默认值为16MB,如果运行出错,则模拟器将会把64MB设为默认值.

    时间:2014-02-25 关键词: Symbian wins emulator

  • Symbian编译系统概观

     有很多涉及到编译过程的工具.这篇文章里我们仅学习一个最基本的工具编译一个简单应用程序的过程(针对Series 60和UIQ). 命令行工具 第一个涉及到的工具就是bldmake:这个工具可以创建一个命令文件,你将用到这个文件来编译并连接你的应用程序(abld). Bldmake需要bld.inf文件来完成这些工作 Abld.bat文件是应用程序编译的入口点. 依据你传递给abld命令的参数.将会产生如下文件:一个Visual C++工作区和项目文件(abld makefile vc6),一个Windows模拟器应用程序(abld build wins udeb)或一个真实Symbian设备的应用程序(abld build thumb urel). VC6和Wins参数可以见名知义(VC6=Visual C++6,Wins=Windows).udeb则意味着”Unicode-Debug”,urel表示”Unicode-Release”.Unicode是一个字符编码格式(有些类似ASCII但Unicode允许外文字符编码(包括汉语)).Debug的意思是你将会产生关于你的应用程序的调试信息(大概是模拟器的版本信息),发布到真实设备上时将不会包含调试信息(已经发布了就不会再需要调试了) 需要在手机上调试代码或跟踪执行过程?RFileLogger也许可以帮助你.这个class的功能非常强大而且很容易使用. 首先声明一个文件日志的连接并且创建一个log文件 //打开日志文件服务的连接 RFileLogger iLog; iLog.Connect(); iLog.CreateLog(_L("MyLoggingDirectory"),_L("MyLogFile"),EFileLoggingModeOverwrite); //... //关闭log文件和服务器连接 iLog.CloseLog(); iLog.Close(); 第3行的CreateLog函数有三个参数: Log路径 Log文件名 记录模式 (EFileLoggingModeOverwrite|EFileLoggingModeAppend) 例如下列代码,是我的log文件的full path(手机上的文件系统) C:/Logs/MyLoggingDirectory/MyLogFile. 对我来说,我习惯把opening代码放到我希望跟踪的class的ConstructL()函数里面,然后在析构函数里closing.在真正编码时,你最好检测一下Connect和CreateLog是否返回了KErrNone. 一旦你完成了这些,你就可以向log文件中输入文本和数据了。基本的命令为: 命令 Log文件 iLog.Write(_L("Hello World")) 11/07/2003 4:00:13 Hello World iLog.WriteFormat(_L("Result=%d"),err) 11/07/2003 4:00:13 Result=0 iLog.HexDump(aHeader,aHeader,myPtr,4) 11/07/2003 4:00:13 myBuf:0000: 41 42 00 44 AB.D [!--empirenews.page--] 要是不希望记录日期和时间,你可以使用这条语句来关闭它们。 iLog.SetDateAndTime(TBool aUseDate, TBool aUseTime) 别忘了在MMP文件上加入flogger.lib,还有包含flogger.h头文件。现在可以编译执行你的程序了。 Stop!log文件还没建立呢!正确!这没办法在代码里完成,我们只能手工在C:/Logs/MyLoggingDirectory目录中创建log文件,否则什么日志也不会记录。不需要重新编译。

    时间:2014-02-25 关键词: Symbian 编译系统

  • 在Visual C++调试器中显示Symbian字符串和描述符

     现在使用Visual Studio有一个令人很不爽的地方,就是处理描述符,因为你不能直接显示它们的内容(只能在模拟器的窗口里看到).这里有一个小技巧将可以让你显示Symbian描述符的内容. 为了达到这个目的, Microsoft Visual Studio中的"Auto Expand"将起到重要的作用.它可以让调试器定制规则来显示用户数据的内容.可以手动配置AutoExp.dat来达到我们的目的.这个文件的位置在C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin下.在记事本中打开这个文件,在它的尾部粘贴下列代码: ;======================================================= ; ; Symbian Strings & Descriptors ; ;======================================================= TDes16=<,t> length= max= TDesC16=<,t> length= TPtr=length= max= ptr= TPtr16=length= max= ptr= TPtrC=length= ptr= TPtrC16=length= ptr= TBuf<*>=length= max= buf= TBufC<*>=length= buffer= HBufC16=length= buffer= TLitC<*>=length= buf=   TDes8=<,t> length= max= TDesC8=<,t> length= TPtr8=length= max= ptr= TPtrC8=length= ptr= TBuf8<*>=length= max= buffer= TBufC8<*>=length=buffer= HBufC8=length= buffer= TLitC8<*>=length= buffer=   TFileName= TFullName= [!--empirenews.page--] 重启编译器,插两个断点进去,启动调试器.

    时间:2014-02-25 关键词: Symbian 字符串 c++ visual 描述符

  • 通过Amora用symbian手机控制Linux计算机

     在电脑的幻灯片演示时,通常是用键盘和鼠标,或者是用专用的蓝牙连接的演示棒(不知道学名是不是这个)。前者比较麻烦,后者需要购买专用的设备,花费比较大。但是,如果你有一个symbian的智能手机,并且你的电脑是Linux系统,那么只需要在电脑上和手机上分别装上Amora的服务端和客户端,你就可以用手机控制电脑的屏幕演示了。这样的软件在windows上应该很多,但是在linux下就比较少见了。 首先去这里下载amora的客户端和服务端。服务端是源码包,编译前需要安装相应的开发包。如果是ubuntu的话执行以下命令: sudo apt-get install gcc libxext-dev libbluetooth2-dev libimlib2-dev libxtst-dev 然后解压缩服务端,执行 ./configure make 找到生成的amora可执行文件,在终端运行。在电脑打开蓝牙的情况下,应该会提示Entering main loop…的信息,这样服务端就完成了。 接下来是手机上的客户端。 amora的客户端是用python写的,首先要装一个python for s60的软件包,在这里下载,有两个文件。注意要对应你的symbian版本下载,比如我的E50是S60 3rd版的,那就下载PythonForS60_1_4_1_3rdEd.SIS和PythonScriptShell_1_4_1_3rdEd.sis。文件都是已经签名了的,在3rd机上不需要自己签名,挺方便。下载安装,菜单中会多一个python的程序。 接着把amora的客户端脚本拷到手机上。在C盘或者E盘创建一个python的文件夹,把下载的客户端文件解压缩拷贝进去,然后运行手机上的python程序,选择“选项”-Run script,找到presenter.py打开,进入amora的主界面。在确保电脑服务端打开的前提下,选择Option-Search Device找到电脑连接。中途会提示你连接用的端口,直接确定即可。连接好后界面中会多一个蓝牙标记。再选Option-Start开始远程控制电脑了。你可以在手机上用方向键控制鼠标移动,OK键或按住1是鼠标左键,按住3是鼠标右键。之所以是按住是因为怕误操作影响演示。具体各数字键的功能可以在控制电脑的情况下在help中找到。

    时间:2014-02-25 关键词: Symbian amora 控制linux

  • Symbian开发环境入门

     二.开发环境入门 2.1 安装SDK及VC Nokia根据手机的屏幕大小和价格高低把手机分成了多个系列,现在使用的系列有:Series 40、Series 60、Series 80 和Series 90。60系列采用Symbian os 6.1,然后又根据手机屏幕的特点对UI做了一些修改,这个被修改了的Symbian就被称为Nokia的60系列平台。使用60系列的手机型号包括:Nokia 6670、 Nokia 6630、 Nokia 6260 、Nokia N-Gage QD™ 、Nokia 7610 、Nokia 6620 、Nokia 3620 、Nokia 3660 、Nokia 6600 、Nokia 3600、Nokia 3650、Nokia 7650、Nokia N-Gage™等。 下面我们就以60系列为例,介绍SDK的安装过程。 2.1.1 安装SDK 第一步,到Nokia论坛注册,下载最新的SDK。Nokia 网站提供的Series 60 SDK for Symbian OS Nokia Edition SDK最新版本是v1.2,Series 60 SDK for Symbian OS的最新版本是v2.1。下载网址:http://www.forum.nokia.com/main/0,6566,034-4,00.html 第二步,到http://www.activestate.com 网站下载最新的Active Perl Script 安装程序。到http://www.java.com/en/download/manual.jsp 下载最新的J2RE。 第三步:安装SDK,推荐为Symbian开发单独建一个目录,例如d:\Symbian而不是使用C:\program files等这样的目录。 第四步:安装Active Perl和J2RE,安装到默认目录即可。 第五步:检查环境变量设定。打开系统环境变量tab,然后看看有没有EPOCROOT,如果有的话,把它手动改成“\” 。改完之后应该是这个样子的: EPOCROOT = \ 然后,在系统PATH中加入 \epoc32\tools目录以及\epoc32\gcc\bin目录就可以了。 实际上,Symbian SDK根本不用安装,直接把epoc32目录拷贝到一个机器上,然后照上述方法设定目录和环境变量就可以了。 2.1.2 配置VC 如果我们使用的是VC 6.0,我们要保证系统至少打了SP3补丁,否则系统会有警告提示。如果我们使用的是VS.NET2003, 我们就只能安装Series 60 SDK for Symbian OS v2.1,因为Series 60 SDK for Symbian OS Nokia Edition SDK v1.2在VS.NET2003无法正确建立工程。 如果要直接在vc6里创建新项目,要把\Symbian\6.1\Series60\Series60Tools\ Application Wizard目录下的 AvkonAppWiz.awx和AVKONAPPWIZ.HLP文件拷贝到vc6的模板目录C:\Program Files\ Microsoft Visual Studio\ Common\ MSDev98\ Template下。这样我们就可以在VC的新建工程中看到Series 60 AppWizard v 1.9这个选项. 填入Project Name 以后,确认。 一路“Next”,一个最简单的Symbian应用程序就建立好了。 如果要将已经建立好的工程导入到VC6.0中,比如我们将SDK中的例子HelloWorld转换成一个VC6的项目,我们首先进入\Symbian\6.1\Series60\Series60Ex\HelloWorld目录。在这里我们可以看到,在Symbian中,一个Project通常是按inc, src, group等目录组织,group目录里通常放的是项目文件,所以编译时要先到这里。用命令提示符模式进入刚才说的那个目录下,然后执行: bldmake bldfiles 这个命令会在group目录下生成一个abld.bat的批处理文件,并且会在\Symbian \6.1\Series60\Epoc32\BUILD下生成\Symbian\6.1\Series60\Epoc32\BUILD\SYMBIAN\6.1\ SERIES60\SERIES60EX\HELLOWORLD\GROUP这个目录,并在最底层目录下生成一堆 .make文件。 然后,我们在同一个目录运行刚才生成的abld.bat: abld makefile vc6 这样就会自动生成vc6的dsw文件,位置在\Symbian\6.1\Series60\Epoc32\BUILD\ SYMBIAN\6.1\ SERIES60\SERIES60EX\HELLOWORLD\GROUP\HELLOWORLD\WINS。然后我们就可以在VC6种打开这个Symbian工程了。 2.2 编译 我们可以直接使用SDK提供的工具编译Symbian 工程,也可以使用VC6提供的集成环境来编译转化过的Symbian 工程。编译的结果存放在\Symbian\6.1\Series60\Epoc32\ Release\wins\UDEB\Z\SYSTEM\apps目录中。 2.2.1使用SDK提供的工具编译Symbian 工程 我们在上一节的那个位置继续输入: abld build wins udeb 这个命令会编译我们的程序,最后在\Symbian\6.1\Series60\Epoc32\Release\wins\UDEB目录下生成我们的helloworld,然后我们可以从开始菜单里运行模拟器的debug版,在模拟其中就可以运行helloworld了。 2.2.2 使用VC6编译Symbian 工程 我们直接打开运行abld makefile vc6后生成的dsw文件,VC自动装载转化过的工程。按F7便可以直接编译工程,编译结果同样放在\Symbian\6.1\Series60\Epoc32\Release\ wins\UDEB目录中。然后我们打开模拟器debug 版,就可以看到我们编译好的工程了。 2.3 打包 我们以SDK 1.2提供的HelloWorld为例,制作可以在手机中安装的.SIS文件: 2.3.1.检查程序 首先,在命令行格式下,进入HelloWorld工程mmp文件所在目录,输入bldmake bldfiles和abld build wins udeb,然后打开模拟器,检测程序有无错误。 2.3.2.编译工程 在程序无错误后,在命令行输入abld build armi urel 。执行这个命令之后会在目录d:\symbian\6.1\series60\epoc32\release\armi\urel生成HELLOWORLD.APP和HELLOWORLD.RSC两个文件。 2.3.3.建立.pkg文件 在d:\Symbian\6.1\Series60\Series60Ex\helloworld\sis 用记事本建立或者修改工程的pkg文件,内容如下: ; HelloWorld.pkg ; ;Language - standard language definitions &EN ; standard SIS file header #{"HelloWorld"},(0x10005B91),1,0,0 ;Supports Series 60 v 1.2 (0x101F8202), 0, 0, 0, {"Series60ProductID"} ; "d:\symbian\6.1\series60\epoc32\release\armi\urel\HelloWorld.APP"-"!:\system\apps\HelloWorld\HelloWorld.app"[!--empirenews.page--] "d:\symbian\6.1\series60\epoc32\release\armi\urel\HELLOWORLD.rSC"-"!:\system\apps\HelloWorld\HELLOWORLD.rSC" 其中,前面"d:\symbian\6.1\series60\epoc32\release\armi\urel\HELLOWORLD.rSC"是要打包安装的文件,"!:\system\apps\HelloWorld\HELLOWORLD.rSC"是安装的目标位置。在其中要注意的是,我们在目标位置中用“!”代替了实际的盘符。这样做得好处是在用户安装的时候,手机系统会提示用户选择要安装的位置,这就给了用户更大的灵活度。另外,在Symbian 系统中,安装的应用程序默认位置是“!:\system\apps ”。 编辑好pkg文件后,保存至相应目录。 2.3.4.打包程序 在命令行中,转至pkg文件所在目录,运行命令makesis HelloWorld.pkg。之后我们就在同一目录下得到了打包好的.sis文件。 2.4 手机测试 将打包好地.sis文件上传至手机中,然后在手机的应用程序管理器中就可以看到我们打包好的文件。选择“安装”命令,系统会提示用户要安装的位置,选择安装位置后,我们制作的应用程序就安装到手机中了。 我们回到手机的主菜单,就会发现新安装的HelloWorld 应用程序。打开运行,结果和在模拟器中看到的基本是一样的。

    时间:2014-02-25 关键词: Symbian 开发环境

  • 手机Symbian操作系统介绍

    Symbian由摩托罗拉、西门子、诺基亚等几家大型移动通讯设备商共同出资组建的一个合资公司,专门研发手机操作系统。而Symbian操作系统的前身是EPOC,而EPOC是 Electronic Piece of Cheese取第一个字母而来的,其原意为"使用电子产品时可以像吃乳酪一样简单",这就是它在设计时所坚持的理念。 Symbian操作系统在智能移动终端上拥有强大的应用程序以及通信能力,这都要归功于它有一个非常健全的核心-强大的对象导向系统、企业用标准通信传输协议以及完美的sun java语言。Symbian认为无线通讯装置除了要提供声音沟通的功能外,同时也应具有其它种沟通方式,如触笔、键盘等。在硬件设计上,它可以提供许多不同风格的外型,像使用真实或虚拟的键盘,在软件功能上可以容纳许多功能,包括和他人互相分享信息、浏览网页、传输、接收电子信件、传真以及个人生活行程管理等。此外,Symbian操作系统在扩展性方面为制造商预留了多种接口,而且EPOC 操作系统还可以细分成三种类型:Pearl/Quartz/Crystal,分别对应普通手机、智能手机、Hand Held PC场合的应用。 Symbian是一个实时性、多任务的纯32位操作系统,具有功耗低、内存占用少等特点,非常适合手机等移动设备使用,经过不断完善,可以支持GPRS、蓝芽、SyncML、以及3G技术。最重要的是它是一个标准化的开放式平台,任何人都可以为支持Symbian的设备开发软件。与微软产品不同的是,Symbian将移动设备的通用技术,也就是操作系统的内核,与图形用户界面技术分开,能很好的适应不同方式输入的平台,也可以使厂商可以为自己的产品制作更加友好的操作界面,符合个性化的潮流,这也是用户能见到不同样子的symbian系统的主要原因。现在为这个平台开发的java程序已经开始在互联网上盛行。用户可以通过安装这些软件,扩展手机功能。 在Symbian发展阶段,出现了三个分支:分别是Crystal、Pearl和Quarz。前两个主要针对通讯器市场,也是出现在手机上最多的,是今后智能手机操作系统的主力军。第一款基于Symabian系统的手机是2000年上市的某款爱立信手机。而真正较为成熟的同时引起人们注意的则是2001年上市的诺基亚9210,它采用了Crystal分支的系统。而2002年推出的诺基亚7650与3650则是Symbian Pearl分系的机型,其中7650是第一款基于2.5G网的智能手机产品,他们都属于Symbian的6.0版本。索尼爱立信推出的一款机型也使用了Symbian的Pearl分支,版本已经发展到7.0,是专为3G网络而开发的,可以说代表了当今最强大的手机操作系统。此外,Symbian从6.0版本就开始支持外接存储设备,如MMC,CF卡等,这让它强大的扩展能力得以充分发挥,使存放更多的软件以及各种大容量的多媒体文件成为了可能。 Symbian按版本来分,继2005年二月Symbian推出一款新的手机操作系统软件OSv9.0,到目前为止已先后有了6.0、6.1、7.0、7.0s、8.0、9.0几种版本。1999年3月Symbian推出了Symbian5.0操作系统,它的主要内核集合了网络,无线文字,电子邮件,名片薄以及个人信息助理,同时还具有支持标准网络页面的浏览器,配合java语言的支持,使得Symbian可以运行小型的应用程序。不过这个版本采用的机型甚少,基本上与EPOC没有太多的差别。 Symbian 6.0则在5.0的基础上增加了,GPRS、WAP1.2浏览器以及蓝牙技术的支持,用户可以运行第三方基于C++和J2ME开发的程序。而Symbian 6.1则是和Symbian 6.0相比主要增加了对USB的支持。Symbian 6.0的主要特点是: 支持语音通话和数据通信 ,支持Bluetooth和WAP ,配备安全性功能(SSL,HTTPS,WTLS) ,采用16bit Unicode,支持多语言显示 ,采用“PersonalJava 3.0”和“JavaPhone 1.0” 。 Symbian 7.0则支持多模式和3G手机(专区),可以让制造商们可以面向全世界推出可以运行于所有网络之上的Symbian OS手机,而且可以不对代码进行重大改动的情况下就可以重新使用许多目前已有的软件应用。7.0包含一些新的通讯、消息、联网和应用开发技术,并对一些与安全和认证相关的功能进行了改进。Symbian OS 7.0的其他功能包括:支持灵活的用户界面,例如Nokia的Series 60;支持几种音频/图像格式和许多面向游戏开发人员的API;全力的加密和认证管理,基于安全通讯协议(包括HTTPS、WTLS和SSL)及认证的应用安装;和Over-the-air(OTA)SyncML同步支持。 2004年2月,Symbian在授权LG等公司的时候,发布了Symbian8 .0版本。该版本改善了实时系统性能,提高了原有操作系统的兼容能力。此外,Symbian OS 8.0的软件工具改进了远程接入控制系统功能,运用调节装置消除手机用户使用增值服务时会受到的干扰。这个系统包含了绝对现代化的多媒体和Java设备,支持多种标准,其中包括JSR118, CLDC1.1 (JSR139),MobileMedia (JSR135),3D图像数据(JSR184), JTWI 1.0 c(JSR185)。最后,新版OS还支持SDIO。 2005年二月,英国著名手机软件制造商Symbian推出一款新的手机操作系统软件OSv9.0,它支持更高像素数码相机与三维游戏动画。该操作系统软件对运行环境要求较高,目前运行在由英国芯片开发商ARM提供的快速处理器芯片,并且需要相关设计与其它工具的支持来帮助手机生产商在开发其它版本时能够节约时间和降低成本。该软件可以处理200万像素的数字图片,甚至能够向无线耳机传送立体声音乐,更可喜的是,它不需要同步软件就能够从PC上导出MP3文件。 Series60是智能手机中应用最广泛的系统版本。Series60系统还分为6.0 OS、7.0 OS和8.0 OS三个版本。区别Series60的最直观因素在于屏幕的分辨率,Series60支持的分辨率为176*208像素,但以后S60还会支持240*320像素、352*416像素等。S60是拥有最多第三方软件或游戏的界面。 识别Series80界面最简单的办法就是看手机是否支持全键盘,例如诺基亚高端系列的9210、9300甚至9500,都采用全键盘的。识别Series90的最简便方法是:会采用触摸屏幕,分辨率也高达640*320像素。Series90应该是手机游戏、娱乐的最强平台,但因为采用Series90界面的手机型号太少,第三方软件的支持很少,所以S60依旧是玩家首选。 S40或S60是指诺基亚手机的上层平台。S60都是智能手机,所用底层操作系统是Symbian。诺基亚128*128屏幕都是S40 1.0。而128*160是S40 2.0。[!--empirenews.page--] 另外S40中,3100支持java MIDP 1.0,所以最大支持64KB的java;6230支持java MIDP 2.0,所以最大支持128KB的java40和60,包括90,还有以前的30,都是针对与nokia不同的操作系统而言40,是nokia自行研制的手机操作系统,面对于中低端客户,支持kjava的开发,其处理器效率不高,内存偏低,屏幕大小128*128。 S60,是基于Symbian 操作系统,也就是以前的epoc,其处理器为arm9,处理效率很高,内存颇大,屏幕大小为208*176同时支持kjava和C++的开发90,属于手持式设备,也是Symbian 操作系统但是功能强劲,等同于一个PDA了。 其实技术来上说,S40跟S60是区别在系统平台上,就好像WIN98跟WIN2000,但手机不像PC,屏幕大小的确是个关口,以致于平台不容易做到向下兼容,但有的游戏也同样做出不同版本来的。 当然啦,S40比S60不单单是屏幕上的差距,更大的是性能上的差距,一般来说,S60开发出来的游戏质量都比S40高好多,但可惜,S60比S40的机子又贵上了很多啊. 在很多网站上,一些对Symbian不是很了解的人们都以为Series 60和Series 80是不同的Symbian操作系统版本。于是就出现了比较混乱的称呼。比如:“Series 60操作系统”和“Symbian 80操作系统”的笑话。 其实,Symbian操作系统是Symbian公司开发的手机操作系统,它是一个独立于手机硬件的操作系统,而且它是一个开放的平台。这一点有点像Linux,市面上常见的有红帽等用户界面,但是它们都是在Linux系统下开发出来的,不过界面有些不同罢了。 所以,很多手机制造厂商在自己公司所生产的手机上做了些界面上的修改,于是就出现了S60,S80等名称。但是它们不是操作系统,而是在以操作系统为基础而开发出来的用户使用界面平台。 目前,Series 60有两个主要版本:第二版(2nd Edition)和第三版(3rd Edition) Series 60 Platform 2nd Edition Series 60 Platform 2nd 2nd Edition最初于2003年发行,首个被实现的终端是诺基亚6600手机。通过扩展,它已经被加入了三个Feature Packs,从而引入了令人激动的新功能,同时却不失平台兼容性。有了这些新的Feature Packs,Series 60 Platform 2ndEdition就向各种智能电话提供了极为出色的性能,从而满足所有主流市场运营商、企业、开发伙伴,以及消费用户的各种各样的功能需求。 用户界面 Series 60 用户界面是诺基亚投入了最深入研究、进行了最彻底开发的图形化用户界面。作为Series 60 Platform的一部分,它能确保用户在各个厂商的所有基于Series 60 Platform的设备上具有一致的用户界面。Series 60 Platform被设计成能单手操作各种高级的、用户友好的各类数据服务。Series 60用户界面有一个彩色显示屏,支持多种屏幕解析度(176x208、240x320(QVGA)及352x416)。它支持各种各样不同的功能,包括两个功能键、五方向导航键、一个应用与应用切换键,及呼叫和呼叫终止键。该用户界面使用一个标准的12键键盘,包括字母。界面中针对文本输入设置了清除键和编辑键。 应用 Series 60 Platform提供了范围广泛的丰富应用和应用实现器。其中包括如先进的电话应用、统一消息中心(Unified Messaging Center,MMS、SMS、Email)、各种OMA即时消息及精灵(Presence)应用、一个完整的移动互联网浏览器(HTML 4.01、XHTML MP,& WAP CSS)、3GPP兼容的流客户端(RealOne Player)、Java MIDP 2.0 环境、应用管理器、OMA数字版权管理(转发锁定)、SyncML数据同步及设备管理、OMA客户端配置、媒体廊、摄录机应用、图像阅览器、支持多重 PDP场景的连接管理器、移动钱包,以及多种个人信息管理应用。 网络支持 Series 60 platform中包括对GSM/GPRS/EDGE、CDMA及双模WCDMA-GSM配置的支持。双模WCDMA-GSM向运营商们的各种3G服务提供了全方位的支持, 从而为在各种移动设备上实现视频电话并提供先进的流能力和高级浏览功能铺平了道路。 Series 60 Platform 3rd Edition Series 60 Platform 3rd Edition是新一代全球领先的智能手机软件平台。全新的Series 60 Platform 3rd Edition加入了许多新鲜功能,同时又保持2nd edition的所有功能。新版Series 60 Platform 3rd Edition专注于增强的多媒体及企业应用功能、可持续发展的应用业务支持、 精益求精的客户定制能力,及不断改进的平台结构。 因为3rd Edition,Series 60 Platform现在更适合高容量的客户市场。Series 60 Platform 3rd Edition中得到改进的结构灵活性使Series 60手机制造商们能创建出既高度细分成本优化的各种终端,以满足用户的不同需求。这种新结构还包括内置的安全特性,从而向用户和开发者提供了更为安全更为信任的环境。 支持企业和多媒体应用 广大企业将得益于Series 60 Platform 3rd Edition的内置业务特性。诸如日程表、数据同步,及email等特性都得到了改进以适应针对各种各样企业环境的使用方便性。新加入的内置安全特性提供了对业务敏感数据的更多保护。Series 60 Platform 3rd Edition让获授权厂商们能构建更强健更多样化的各种企业级终端。 这一新版本还支持移动多媒体的成长。对OMA DRM 2.0 for music的支持既改善了使用性也改进了受保护内容的安全性。新版音乐播放器使得在线访问音乐内容更为便捷。有了全新的Series 60 Platform 3rd Edition,可以更为方便地在PC和移动终端之间传送将音乐及其他内容,这是因为:基于这个新版本的各种智能电话在功能上能被视为一个普通的USB储存棒。 面向开发伙伴的更多业务 对开发伙伴来说,Series 60 Platform 3rd Edition提供了更多针对高终端持有量的商业机会。新型安全框架和内置内容保护改善了对开发伙伴投资的保护,但同时又仍然允许自由软件应用的使用。诸如可扩展用户界面这类特性功能发现API将使开发伙伴们能创建更为智能化的应用,同时提供更佳的用户体验。

    时间:2014-02-10 关键词: 手机 Symbian 操作系统

  • Symbian动态数组与缓冲区

     类:RArray,RPointerArray CArrayX (CArrayFixFlat,CArrayPakFlat,CArrayVarSeg,CArrayPtrFlat,...6个修饰元素:Fix[定长],Pak[压缩],Var[变长],Ptr[指针],Seg[段],Flat[平坦]) 对于简单数组(定长/平坦),RArray,RPointerArray类提供更简单更高效的动态数组,应该优先使用这两个类而非CArrayX类(CArrayFixFlat,CArrayPtrFlat)。 在处理变长元素或需要使用段缓冲区(Seg)时,没有类似的RArray类,可以使用CArrayVarFlat,CArrayVarSeg,CArrayPakFlat,CArrayPtrSeg 数组之动态描述符数组,有两种: 指针描述符数组:CPtrC16Array,CPtrC8Array,引用指针,不复制数据到数组中 通用描述符数组: CDesC16Array,CDesC8Array, 每个加入数组的描述符会创建一个HBufC副本,不可修改。 知道了集合的大小,用动态定长数组:TFixedArray类,可以代替普通C++数组,此类提供了越界检查和一些有用函数。 动态缓冲区:CBufFlat,CBufSeg类,将数据保存在8位缓冲区内,读写二进制数据或者描述符。

    时间:2014-01-24 关键词: Symbian 缓冲区 动态数组

  • Symbian 摄像头编程预研

    摄像头编程预研 目前使用摄像头编程,网上用的最多的都是直接调用手机自带的照相/摄像程序来完成,不过使用这种方式,可控性就显得弱一些,为此近期对直接使用ECAM API进行了下简单预研。 照相流程 因为本次预研主要还是偏重照相功能。整个照相过程,假设使用文字说明可能会显得相对繁琐,为此结合ECAM API对照相功能进行了顺序流程图描绘,具体如下 该过程主要涉及到的观察器类就是MCameraObserver,该类和CCamera均在ecam.h头文件中被定义,以下是该观察器接口类的声明 class MCameraObserver { public: //CCamera::Reserve异步函数的回调通知 virtual void ReserveComplete(TInt aError)=0; //CCamera::PowerOn异步函数的回调通知 virtual void PowerOnComplete(TInt aError)=0; //假如取景器模式为位图模式时预览位图的回调通知 virtual void ViewFinderFrameReady(CFbsBitmap& aFrame)=0; //CCamera::CaptureImage异步函数的回调通知 virtual void ImageReady(CFbsBitmap* aBitmap,HBufC8* aData,TInt aError)=0; //CCamera::StartVideoCapture异步函数的回调通知 virtual void FrameBufferReady(MFrameBuffer* aFrameBuffer,TInt aError)=0; }; 在这里需要说明下的,恐怕就是取景器了,因为假设不是数码达人或者第一次接触摄像头类编程,这个概念还是比较新的。其实所谓取景器,可以理解为预览拟拍摄景物的视窗,CCamera支持两种显示取景器的方法:一种是直接屏幕访问模式,即应用程序只要指明在屏幕上的哪个区域显示图像,摄像头对象就会把当前取到的图像直接绘制到这个区域上(可以说过程不用程序干预的);另外一种是位图模式,即摄像头对象提供一系列的位图,由应用程序把位图绘制到窗口上。 一般在设置之前需要先获取一下摄像头参数,看看其是否支持所要设置的模式。EViewFinderDirectSuported就是支持直接屏幕访问模式,EViewFinderBitmapsSupported就是位图模式。通常情况下,假如两种模式都支持的情况下,选用直接屏幕访问模式,因为这种模式比较快而且不用程序代码干预,否则就用位图模式,位图模式时,当捕捉到图像后会调用观察器的ViewFinderFrameReady()函数将图像传给观察器进行绘制。 关于CameraInfo 摄像头本身有属性信息,我们可以通过调用CCamera:: CameraInfo(TCameraInfo& aInfo)函数获取。对N81手机主摄像头进行缺省参数的提取,具体参数如下图所示 对各自参数的分析如下 iHardwareVersion 相机硬件的版本号,该值不用细究,是OEM关心的 iSoftwareVersion 相机软件的版本号(驱动程序版本号),该值也是OEM关心 iOrientation 相机的朝向,该值是OEM出厂时根据相机特性设定的,编程无法修改,不过可以给我们编程提供参考条件,其取值有如下几种类型 /** Possible directions in which the camera may point. */ enum TCameraOrientation { /** Outward pointing camera for taking pictures. Camera is directed away from the user. */ EOrientationOutwards, /** Inward pointing camera for conferencing. Camera is directed towards the user. */ EOrientationInwards, /** Mobile camera capable of multiple orientations. Camera orientation may be changed by the user. */ EOrientationMobile, /** Camera orientation is not known. */ EOrientationUnknown }; 根据取得的值的情况,N81的主摄像头朝向为EOrientationOutwards,当然通过对N81和E71主次摄像头信息数据的采集,可知类似N81、E71等双摄像头手机的主摄像头属性都是EOrientationOutwards的,而前面次摄像头属性都EOrientationInwards。从而猜测像N93i这样的手机其摄像头朝向属性应该为EOrientationMobile(因为是猜测,所有还期待有人帮忙验证一下)。根据这个属性,对于双摄像头手机,我们可以编程选中需要使用的摄像头。 iOptionsSupported 同样也是一些无法修改的属性,表明了此摄像头支持的功能,因为该值是个位域的值,通常使用过程中要用位与操作来判断其是否支持某一种属性,具体如下罗列的枚举值 enum TOptions { /** View finder display direct-to-screen flag */ EViewFinderDirectSupported = 0x0001, /** View finder bitmap generation flag */ EViewFinderBitmapsSupported = 0x0002, /** Still image capture flag */ EImageCaptureSupported = 0x0004, /** Video capture flag */ EVideoCaptureSupported = 0x0008, /** View finder display mirroring flag */ EViewFinderMirrorSupported = 0x0010, /** Contrast setting flag */ EContrastSupported = 0x0020, /** Brightness setting flag */ EBrightnessSupported = 0x0040, /** View finder clipping flag */ EViewFinderClippingSupported = 0x0080, /** Still image capture clipping flag */ EImageClippingSupported = 0x0100, /** Video capture clipping flag */ EVideoClippingSupported = 0x0200 }; 我的英文比较差,就不一一翻译了,毕竟有些EviewFinderMirrorSupported、EviewFinderClippingSupported、EimageClippingSupported、EvideoClippingSupported我也不知道是啥具体用的。我们只需要关心这个手机的摄像头支持何种模式的取景器,支不支持拍照(EImageCaptureSupported)、支不支持录像(EVideoCaptureSupported)、支不支持对比度设置(EcontrastSupported)和亮度设置(EBrightnessSupported)就可以了。 因为N81主摄像头的iOptionsSupporte值是14(即1110)所以该主摄像头只支持位图模式的取景器设置,同时支持图像和视频的拍摄,不支持对比度亮度等设置。 iFlashModesSupported 闪光灯支持模式,具体的模式可以参见如下枚举值 enum TFlash { /** No flash, always supported. */ EFlashNone = 0x0000, /** Flash will automatically fire when required. */ EFlashAuto = 0x0001, /** Flash will always fire. */ EFlashForced = 0x0002, /** Reduced flash for general lighting */ EFlashFillIn = 0x0004, /** Red-eye reduction mode. */ EFlashRedEyeReduce = 0x0008, /** Flash at the moment when shutter opens.快门开时闪 */ EFlashSlowFrontSync = 0x0010, /** Flash at the moment when shutter closes. 快门关事闪*/ EFlashSlowRearSync = 0x0020, /** User configurable setting */ EFlashManual = 0x0040 }; 这里就不做赘述了,N81的值11(即1011),支持自动、总是打开和红眼消除,当然总是关闭肯定是支持的。 知道了支持何种类型,我们就可以对摄像头的闪光灯类型通过CCamera::Flash和CCamera::SetFlashL两个函数获取和设置。 iExposureModesSupported 曝光支持模式,具体的模式详见如下枚举值 /** Specifies the type of exposure. - EExposureAuto is the default value. */ enum TExposure { /** Set exposure automatically. Default, always supported. */ EExposureAuto = 0x0000, /** Night-time setting for long exposures. */ EExposureNight = 0x0001, /** Backlight setting for bright backgrounds. */ EExposureBacklight = 0x0002, /** Centered mode for ignoring surroundings. */ EExposureCenter = 0x0004, /** Sport setting for very short exposures. */ EExposureSport = 0x0008, /** Generalised setting for very long exposures. */ EExposureVeryLong = 0x0010, /** Snow setting for daylight exposure. */ EExposureSnow = 0x0020, /** Beach setting for daylight exposure with reflective glare. */ EExposureBeach = 0x0040, /** Programmed exposure setting. */ EExposureProgram = 0x0080, /** Aperture setting is given priority. */ EExposureAperturePriority = 0x0100, /** Shutter speed setting is given priority. */ EExposureShutterPriority = 0x0200, /** User selectable exposure value setting. */ EExposureManual = 0x0400, /** Exposure night setting with colour removed to get rid of colour noise. */ EExposureSuperNight = 0x0800, /** Exposure for infra-red sensor on the camera */ EExposureInfra = 0x1000 }; 获取N81的相机曝光支持模式为7(即0111),所以只支持自动、夜晚、背光和中间四种模式。 我们可以通过CCamera::Exposure()和CCamera::SetExposureL两个函数对摄像头的曝光模式进行获取和设置。 iWhiteBalanceModesSupported 白平衡支持模式,白平衡具体的模式如下 /** Specifies how the white balance is set. */ enum TWhiteBalance { /** Set white balance automatically. Default, always supported. */ EWBAuto = 0x0000, /** Normal daylight. */ EWBDaylight = 0x0001, /** Overcast daylight. */ EWBCloudy = 0x0002, /** Tungsten filament lighting. */ EWBTungsten = 0x0004, /** Fluorescent tube lighting */ EWBFluorescent = 0x0008, /** Flash lighting. */ EWBFlash = 0x0010, /** High contrast daylight primarily snowy */ EWBSnow = 0x0020, /** High contrast daylight primarily near the sea */ EWBBeach = 0x0040, /** User configurable mode */ EWBManual = 0x0080 }; 具体不做展开,可以通过调用CCamera::WhiteBalance和CCamera::SetWhiteBalanceL两个方法来进行对白平衡参数的获取和设置。 焦距(放大倍数) 在CameraInfo里面涉及焦距的参数真不少,iMinZoom、iMaxZoom、iMaxDigitalZoom、iMinZoomFactor、iMaxZoomFactor、iMaxDigitalZoomFactor 这几个参数值其实很困惑我的,特别是iMaxDigitalZoom,不知道是干嘛用的,这个值只能先不管了。根据CCamer提供了四个关于Zoom的如下四个函数 /** Sets the digital zoom factor. This must be in the range of 0 to TCameraInfo::iMaxDigitalZoom inclusive. May leave with KErrNotSupported if the zoom factor is out of range. @param aDigitalZoomFactor The required digital zoom factor. */ virtual void SetDigitalZoomFactorL(TInt aDigitalZoomFactor = 0)=0; /** Gets the currently set digital zoom factor. @return The currently set digital zoom factor. */ virtual TInt DigitalZoomFactor() const=0; /** Sets the zoom factor. This must be in the range of TCameraInfo::iMinZoom to TCameraInfo::iMaxZoom inclusive. May leave with KErrNotSupported if the specified zoom factor is out of range. @param aZoomFactor Required zoom factor. */ virtual void SetZoomFactorL(TInt aZoomFactor = 0)=0; /** Gets the currently set zoom factor. @return The currently set zoom factor. */ virtual TInt ZoomFactor() const=0; 可以猜测分别表示数码变焦和光学变焦。 另外,经过对N81和E71的参数比较,N81的iMaxDigitalZoomFactor是20.0,而E71是4.0,正好对应N81的20倍数码变焦,E71的4倍数码变焦。因为很多手机摄像头镜头都不支持光学变焦,所以在这里对我们有用的也就是只需要通过DigitalZoomFactor和 SetDigitalZoomFactorL两个函数在iMaxDigitalZoomFactor范围内设置数码变焦值就可以了。 图像格式和图像尺寸参数 iImageFormatsSupported和iNumImageSizesSupported两个参数分别用以表明摄像头拍照时所支持的图像格式和图像尺寸数量,具体支持的图像格式如下枚举值定义 enum TFormat { /** 8 bit greyscale values, 0=black, 255=white. */ EFormatMonochrome = 0x0001, /** Packed RGB triplets, 4 bits per pixel with red in the least significant bits and the 4 most significant bits unused. */ EFormat16bitRGB444 = 0x0002, /** Packed RGB triplets, 5 bits per pixel for red and blue and 6 bits for green, with red in the least significant bits. */ EFormat16BitRGB565 = 0x0004, /** Packed RGB triplets, 8 bits per pixel with red in the least significant bits and the 8 most significant bits unused. */ EFormat32BitRGB888 = 0x0008, /** JFIF JPEG. */ EFormatJpeg = 0x0010, /** EXIF JPEG */ EFormatExif = 0x0020, /** CFbsBitmap object with display mode EColor4K. */ EFormatFbsBitmapColor4K = 0x0040, /** CFbsBitmap object with display mode EColor64K. */ EFormatFbsBitmapColor64K = 0x0080, /** CFbsBitmap object with display mode EColor16M. */ EFormatFbsBitmapColor16M = 0x0100, /** Implementation dependent. */ EFormatUserDefined = 0x0200, /** 4:2:0 format, 8 bits per sample, Y00Y01Y10Y11UV. */ EFormatYUV420Interleaved = 0x0400, /** 4:2:0 format, 8 bits per sample, Y00Y01Y02Y03...U0...V0... */ EFormatYUV420Planar = 0x0800, /** 4:2:2 format, 8 bits per sample, UY0VY1. */ EFormatYUV422 = 0x1000, /** 4:2:2 format, 8 bits per sample, Y1VY0U. */ EFormatYUV422Reversed = 0x2000, /** 4:4:4 format, 8 bits per sample, Y00U00V00 Y01U01V01... */ EFormatYUV444 = 0x4000, /** 4:2:0 format, 8 bits per sample, Y00Y01Y02Y03...U0V0... */ EFormatYUV420SemiPlanar = 0x8000, /** CFbsBitmap object with display mode EColor16MU. */ EFormatFbsBitmapColor16MU = 0x00010000 }; 因为N81主摄像头的iImageFormatsSupported值为480(也即0x01E0),所以支持的格式为EFormatExif、EFormatFbsBitmapColor4K、 EFormatFbsBitmapColor64K和 EFormatFbsBitmapColor16M四种。 每一种格式又有对应的各种不同的尺寸,而具体支持的尺寸数则有iNumImageSizesSupported来限定,如上N81的iNumImageSizesSupported值为3,对每种格式使用CCamera::EnumerateCaptureSizes获取得尺寸均为320*240,640*480,1152*864,这让我百思不得其解,毕竟N81是200万像素的摄像头,怎么会最大尺寸是菜1152*864呢?系统自带的照相/摄像程序也是支持1600*1200的,而且关键QQ手中邮也是支持1600*1200格式的,后来经过在论坛上搜索,才知道原来CCamera::EnumerateCaptureSizes获取的尺寸跟UI程序时横屏(landscape)还是竖屏(portrait)有关的,像N81在横屏模式下iNumImageSizesSupported的值为4,其尺寸为320*240,640*480,1152*864和1600*1200,而默认竖屏下就是之前的那些数值。 另外用E71手机做过实验,发现对于E71,横屏还是竖屏,其实是一样的,没有任何变化,其iNumImageSizesSupported始终是5,而用CCamera::EnumerateCaptureSizes获取得尺寸也均为320*240,640*480,1152*864,1600*1200和2048*1536,所以我们在获取最大尺寸时可以毫无顾忌的使用横屏模式。 有了这个尺寸,我们就可以根据需要,调用CCamera::PrepareImageCaptureL(TFormat aImageFormat,TInt aSizeIndex)函数来设定我们拍照时需要的具体尺寸了。 在这里画蛇添足下,对于使用横屏和竖屏模式切换,可以在C*AppUi内通过调用CAknAppUiBase::SetOrientationL(TAppUiOrientation aOrientation)来简单实现,具体的参数值横屏时传EappUiOrientationLandscape,竖屏时传EappUiOrientationPortrait。不过类似我们程序的自定义界面,调用完这个函数后,会产生消息到C*AppUi::HandleResourceChangeL,只要我们在这个函数内部处理好界面排版就可以了。关于该项测试,周二已经和大红一起演示过了。 视频格式和视频尺寸参数 手机摄像头自然也提供了视频的录制功能,视频是由一帧一帧的图像构成,在CameraInfo信息里头与视频相关的参数就是iNumVideoFrameSizesSupported(单帧的尺寸)、iNumVideoFrameRatesSupported(帧速)和iVideoFrameFormatsSupported(支持的帧格式)。 因为N81的iVideoFrameFormatsSupported是2048(也即0x800),所以视频格式只支持EFormatYUV420Planar一种格式,而iNumVideoFrameSizesSupported为3,即支持3种模式,通过CCamera::EnumerateVideoFrameSizes(TSize& aSize,TInt aSizeIndex,TFormat aFormat)函数可以得到N81摄像时支持的三种视频尺寸为320*240,176*144,128*96,另外可以通过调用CCamera::EnumerateVideoFrameRates(TReal32& aRate, TInt aRateIndex, TFormat aFormat,TInt aSizeIndex,TExposure aExposure = EExposureAuto)函数得到N81支持的帧速为15帧每秒。 有了这些参数可以方便的通过调用CCamera::PrepareVideoCaptureL函数设置摄像时所要用到的视频尺寸和帧速;调用CCamera::StartVideoCapture函数开启摄像,开启摄像后摄像头会调用MCameraObserver::FrameBufferReady传递回来具体的每一帧数据,供界面显示和编写成视频文件;调用CCamera::StopVideoCapture函数来停止摄像,在任何时候可以通过CCamera::VideoCaptureActive来查询摄像头是否处于摄像过程中。 其它至于目前所使用的帧尺寸和帧速在其它地方是不可设置的,只能通过CCamera::GetFrameSize和CCamera::FrameRate两个函数来进行获取当前的参数值。 帧缓存参数 这个不知道怎么翻译,我就笼统称其为帧缓存参数好了,在摄像过程需要使用到帧缓存有iMaxFramesPerBufferSupported和iMaxBuffersSupported,前者表示每个buffer允许存放的最大帧数,后者为允许使用的buffer最大个数。由于N81的iMaxBuffersSupported为2,所以最多允许使用2个帧缓存区,又iMaxFramesPerBufferSupported是1,也即每个帧缓存最多只能放一帧数据。虽然目前并不完全知道其实际作用如何,但是这两个参数也是只有通过CCamera::PrepareVideoCaptureL这个函数来进行设置,通过函数CCamera::BuffersInUse()和CCamera::FramesPerBuffer()来获取当前的设置值。 由于视频摄像需要涉及到音视频编辑方面的内容,个人在视频录制方面还是空白,为此目前没有真正尝试,也就没有深入进去。 以下在贴几张预研中对E71 320万像素4倍数码变焦的CameraInfo信息截图和N81 200万像素20倍数码变焦横屏时的CameraInfo信息截图,以供大家参阅。 E71 CameraInfo信息截图 N81 横屏CameraInfo信息截图 因为E71不区分横竖屏,所以CameraInfo是一样的,有心的可以对比下之前的竖屏N81截图和横屏的差别。 此次小结先到这里,错误之处还望指正。

    时间:2013-11-22 关键词: Symbian 摄像头编程

首页  上一页  1 2 3 4 5 6 7 8 9 10 下一页 尾页
发布文章

技术子站

更多

项目外包