如何将J2MEAPI移植到OPhone

对于Android的红火,以及Windows Mobile的跟进,移动OPhone看起来还像是别人的技术。不过如何将J2ME API移植到OPhone,本文就谈论这些。

创新互联公司是一家专业从事成都网站设计、成都做网站、网页设计的品牌网络公司。如今是成都地区具影响力的网站设计公司,作为专业的成都网站建设公司,创新互联公司依托强大的技术实力、以及多年的网站运营经验,为您提供专业的成都网站建设、营销型网站建设及网站设计开发服务!

中国拥有世界最庞大的电信客户群,仅移动用户就达4亿,3G在中国有最大的市场做后盾,无论现在的市场发展如何的困难,3G费用的降低是大势所趋,不久的将来,必然形成巨大的3G浪潮,3G手机会如雨后春笋一般,充满祖国大地,如今各大移动通信运营商和移动终端开发商都看到广大的前景,在为3G做最后的准备。最近作为中国移动业务最大的运营商中国移动公司推出了自己的开发平台:OPhone OS系统。OPhone OS采用linux2.6内核,兼容Android应用。

OPhone是中国移动在这次3G浪潮来临前打造的主力航空母舰,与中移动无线业务平台的对接,OPhone将承载大量3G业务应用。大量的软件开发企业将会把新的阵地放到移动平台上来,软件如:手机电视、炒股、网游,企业应用MIS,移动办公,都将会是移动设备发展的热点,这样也就需要大量的开发人员,由于手机开发人员稀少,收入比一般pc开发人员会更高。由于现在中国移动的大力推广,如果企业和创业者依托mmarket也会有不错的前景,OPhone作为中国移动大力推广的战略平台潜力巨大。

Android移植除了硬件外最重要的是Java平台之间的移植,目前市面上Java VM主要使用的是Sun公司的Java Micro Edition。而Google Android平台采用的是自己开发的Dalvik。如何从过去J2ME移植到谷歌手机平台呢?

虽然是不同的开发环境,但是所要实现的功能都是相近的,因此从功能的角度可以很好的理解OPHONE OS平台和J2ME平台之间的联系和区别。总结一下,可以发现从以下四个方面可以很好的理解两个平台之间移植。

如果代码框架写得好,逻辑部分基本不需要怎么变化,只需要把和平台相关的接口转换一下就可以了。

1)用户界面

这一点是J2ME移植到Dalvik上最麻烦的地方,Android的图形类和Sun Jave ME有了很大的不同,同时m3到m5 SDK上也有更大改变的趋势,导致了移植时出现很多需要自己去实现相关类,使最终程序的运行效率可能会受影响,真机没有出现的情况下通过开发板可以适当的测试出性能损失。这一点需要花费很长时间去学习,也是未来我们着重需要讲解的。

2)数据存储

这方面就显示出Android 平台比Sun Java强大的地方了,Android平台附带了一个SQLite数据库,和Sun J2ME中的Record Management System (RMS)相比在功能上有了很大的提升,同时在性能上也会有不俗的表现,在过去开发J2ME软件时一直都采取的是如果数据比较简单使用自定义的二进制格式或XML代替。

3)网络数据

这部分Android平台的做法是import Sun中的I/O读写库InputStream这样的类,同时网络相关的仍然采用Sun的URLConnection类进行操作,基本上没有变化,移植时注意下设备的栈空间简单的调整下就可以了。

4)媒体播放

这部分在Android系统上就有了大幅的改变,官方推荐使用MediaPlayer播放类,该类支持mp3、mid、wav、mp4等常规媒体格式的播放,相比J2ME中提供的就灵活强大的多。

下面我们一步一步实现J2ME API在OPHONE OS上的移植。

1、 入口程序MIDlet

学过J2ME的开发人员都知道J2ME有一个主体类MIDlet类,它是程序管理接口,调用startApp(),进入应用程序。

同样,在OPHONE OS平台中同样有一个主体类Activity,调用onCreate(savedInstanceState)进入某个交互界面。

下面我们将通过继承Activity模拟实现J2ME中的MIDlet类和方法。

 
 
 
  1. publicabstractclassMIDletextendsActivity {
  2. publicvoidonCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. startApp();
  5. }
  6. publicabstractvoiddestroyApp(booleanunconditional);
  7. publicString getAppProperty(String key) {
  8. returnnull;
  9. }
  10. publicabstractvoidstartApp();
  11. publicvoidnotifyDestroyed() {
  12. }
  13. publicvoidnotifyPaused() {
  14. }
  15. publicvoidpauseApp() {
  16. }
  17. publicvoidplatformRequest(String URL) {
  18. }
  19. publicvoidresumeRequest() {
  20. }
  21. }

2、Canvas

同样在J2ME中画板Canvas类与OPhone OS中的View类相似。

 
 
 
  1. publicabstractclassCanvas extends Displayable {
  2. publicCanvas(MIDlet context) {
  3. super(context);
  4. }
  5. Graphics g =newGraphics();
  6. publicvoidonDraw(android.graphics.Canvas canvas) {
  7. g.bind(canvas);
  8. paint(g);
  9. }
  10. intgetGameAction(intkeyCode) {
  11. return0;
  12. }
  13. intgetKeyCode(intgameAction) {
  14. return0;
  15. }
  16. String getKeyName(intkeyCode) {
  17. return"key";
  18. }
  19. boolean hasPointerEvents() {
  20. returntrue;
  21. }
  22. boolean hasPointerMotionEvents() {
  23. returntrue;
  24. }
  25. boolean hasRepeatEvents() {
  26. returntrue;
  27. }
  28. protectedvoidhideNotify() {
  29. }
  30. boolean isDoubleBuffered() {
  31. returntrue;
  32. }
  33. protectedvoidkeyPressed(intkeyCode) {
  34. }
  35. protectedvoidkeyReleased(intkeyCode) {
  36. }
  37. protectedvoidkeyRepeated(intkeyCode) {
  38. }
  39. protectedabstractvoidpaint(Graphics g);
  40. protectedvoidpointerDragged(intx,inty) {
  41. }
  42. protectedvoidpointerPressed(intx,inty) {
  43. }
  44. protectedvoidpointerReleased(intx,inty) {
  45. }
  46. voidrepaint() {
  47. }
  48. voidrepaint(intx,inty,intwidth,intheight) {
  49. }
  50. voidserviceRepaints() {
  51. }
  52. voidsetFullScreenMode(boolean mode) {
  53. }
  54. protectedvoidshowNotify() {
  55. }
  56. protectedvoidsizeChanged(intw,inth) {
  57. }
  58. }

3、Graphics

J2ME 中的Graphics类和OPhone OS中的paint类相似。在移植中,要用OPhone OS类库实现J2ME中的Graphics类,我们在实现的过程中可以对Graphics对象进行修饰,通过整合OPHONE OS 中Canvas并调类库中的Paint类和Color类的方法来实现。比如:

 
 
 
  1. Graphics
  2. public class Graphics {
  3. public final static int VCENTER = 0;
  4. public final static int TOP = 1;
  5. public final static int SOLID = 2;
  6. public final static int RIGHT = 3;
  7. public final static int LEFT = 4;
  8. public final static int HCENTER = 5;
  9. public final static int DOTTED = 6;
  10. public final static int BOTTOM = 7;
  11. public final static int BASELINE = 8;
  12. Canvas dist;
  13. private final Paint paint = new Paint();
  14. public void bind(Canvas canvas) {
  15. dist = canvas;
  16. }
  17. public void setColor(int eraseColour) {
  18. }
  19. public void drawImage(Image img, int x, int y, int anchor) {
  20. dist.drawBitmap(img.getTp(), x, y, paint);
  21. }
  22. }}

上面是我们重新定义的Graphics类,在其方法的实现上,我们调用了OPHONE OS的一些具体实现方法,从而用OPhone OS类库实现了J2ME的框架,做到了两个平台之间很好的移植。

从上面几个例子可以看出两个平台的框架具有很多相似性,这就为两个平台之间的移植创造了条件。同时我们也会看到,两个平台之间存在一定的差异性,一些在 J2ME中的类和方法无法通过直接继承或者调用OPhone OS来实现,这时候就需要移植人员,自己来实现一些相关的类,这也是移植过程中需要我们去努力克服的困难。

本文名称:如何将J2MEAPI移植到OPhone
本文路径:http://www.gawzjz.com/qtweb2/news21/21071.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联