MIDP2.0及其移植技术分析
hp=gethostbyname(host);
……
}
如果目标平台还需要其它网络协议(datagram、comm),其移植过程与Socket的移植基本相同。
2.5 应用管理系统(AMS)
MIDP的应用管理系统(application management system)负责管理当前设备中安装的J2ME应用,其功能包括MIDlet的加载、安装、显示、更新和删除。AMS从main.c中的函数main()开始执行,根据其输入初始化一些系统参数,包括系统路径(classJ2ME MIDP 移植 平台无关 本地代码)、堆空间大小(heapsize)、命令行(command line)等,然后就启动KVM,而KVM就会从AMS的JAVA界面main.java开始解释执行java代码。AMS的所有管理功能都是用JAVA语言实现的,因此AMS的实现是与平台无关的。但不同的平台可能有不同的系统参数和格式,对AMS的界面网络也可能有不同的要求。所以,移植者有可能要修改main.c中解析系统参数的部分,保证AMS能正确解析目标平台的所有参数;同时修改AMS的JAVA层,使其界面网络满足用户的需求。
2.6 多媒体
MIDP2.0较MIDP1.0最大的改变就是在MIDP2.0中向应用提供了音频接口(Audio API)的支持。音频接口是移动设备媒体接口MMAPI(Mobile Media API)的一部分。音频的播放过程为5个部分(unrealized、realized、prefetched、started、closed),同时它有自己的音频播放事件的传道和处理过程。MIDP音频播放部分所要做的移植工作就主要集中在声音播放接口,事件的处理方式和兼容不同的音频文件格式上。
播放接口的移植:不同的目标平台,提供的音频系统API是不同的,有的系统甚至根本没有提供播放音频的API。这时,移植者就要根据目标平台的实现情况替换或自己实现音频的播放接口。
Windows的音频播放接口(win32/native/MMATONE.C):
Java_javax_microedition_media_Manager_nPlayTone(KNITRAPS)
{
……
chn1=getMidiChnl();
if(chnl==-1){
KNI_ReturnInt(0);
}
tones[chn].msg=((note&0xff)<<8)|0x00000090|(chnl&0xf);
msg=((vol&0xff)<<16)|((note&0xff)<<8)|0x90|(chnl &0xf);
midiOutShortMsg(midiOut,msg);
timerID=timeSetEvent(dur,TIMERES,(LPTIME CALLBACK)timeToneProc,(DWORD)chnl,TIME_ONESHOT);
tones[chnl].timerID=timerID;
……
}
事件传递的移植:MIDP中音频播放结束的事件(EOM)是专门通过系统的消息机制传递,而不是通过MIDP的事件传递,因此也需要移植:
Windows---OM的传递(win32/native/MMAEVT.C):void injectNativeEvent(int pID,int curMTime){
《MIDP2.0及其移植技术分析(第5页)》