下面我们一步一步实现J2ME API在OPHONE OS上的移植。
1、 入口程序MIDlet
学过J2ME的开发人员都知道J2ME有一个主体类MIDlet类,它是程序管理接口,调用startApp(),进入应用程序。
同样,在OPHONE OS平台中同样有一个主体类Activity,调用onCreate(savedInstanceState)进入某个交互界面。
下面我们将通过继承Activity模拟实现J2ME中的MIDlet类和方法。
public abstract class MIDlet extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startApp();
}
public abstract void destroyApp(boolean unconditional);
public String getAppProperty(String key) {
return null;
}
public abstract void startApp();
public void notifyDestroyed() {
}
public void notifyPaused() {
}
public void pauseApp() {
}
public void platformRequest(String URL) {
}
public void resumeRequest() {
}
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startApp();
}
public abstract void destroyApp(boolean unconditional);
public String getAppProperty(String key) {
return null;
}
public abstract void startApp();
public void notifyDestroyed() {
}
public void notifyPaused() {
}
public void pauseApp() {
}
public void platformRequest(String URL) {
}
public void resumeRequest() {
}
}
2、Canvas
同样在J2ME中画板Canvas类与OPhone OS中的View类相似。
public abstract class Canvas extends Displayable {
public Canvas(MIDlet context) {
super(context);
}
Graphics g = new Graphics();
public void onDraw(android.graphics.Canvas canvas) {
g.bind(canvas);
paint(g);
}
int getGameAction(int keyCode) {
return 0;
}
int getKeyCode(int gameAction) {
return 0;
}
String getKeyName(int keyCode) {
return "key";
}
boolean hasPointerEvents() {
return true;
}
boolean hasPointerMotionEvents() {
return true;
}
boolean hasRepeatEvents() {
return true;
}
protected void hideNotify() {
}
boolean isDoubleBuffered() {
return true;
}
protected void keyPressed(int keyCode) {
}
protected void keyReleased(int keyCode) {
}
protected void keyRepeated(int keyCode) {
}
protected abstract void paint(Graphics g);
protected void pointerDragged(int x, int y) {
}
protected void pointerPressed(int x, int y) {
}
protected void pointerReleased(int x, int y) {
}
void repaint() {
}
void repaint(int x, int y, int width, int height) {
}
void serviceRepaints() {
}
void setFullScreenMode(boolean mode) {
}
protected void showNotify() {
}
protected void sizeChanged(int w, int h) {
}
}
public Canvas(MIDlet context) {
super(context);
}
Graphics g = new Graphics();
public void onDraw(android.graphics.Canvas canvas) {
g.bind(canvas);
paint(g);
}
int getGameAction(int keyCode) {
return 0;
}
int getKeyCode(int gameAction) {
return 0;
}
String getKeyName(int keyCode) {
return "key";
}
boolean hasPointerEvents() {
return true;
}
boolean hasPointerMotionEvents() {
return true;
}
boolean hasRepeatEvents() {
return true;
}
protected void hideNotify() {
}
boolean isDoubleBuffered() {
return true;
}
protected void keyPressed(int keyCode) {
}
protected void keyReleased(int keyCode) {
}
protected void keyRepeated(int keyCode) {
}
protected abstract void paint(Graphics g);
protected void pointerDragged(int x, int y) {
}
protected void pointerPressed(int x, int y) {
}
protected void pointerReleased(int x, int y) {
}
void repaint() {
}
void repaint(int x, int y, int width, int height) {
}
void serviceRepaints() {
}
void setFullScreenMode(boolean mode) {
}
protected void showNotify() {
}
protected void sizeChanged(int w, int h) {
}
}
3、Graphics
J2ME 中的Graphics类和OPhone OS中的paint类相似。在移植中,要用OPhone OS类库实现J2ME中的Graphics类,我们在实现的过程中可以对Graphics对象进行修饰,通过整合OPHONE OS 中Canvas并调类库中的Paint类和Color类的方法来实现。比如:
Graphics
public class Graphics {
public final static int VCENTER = 0;
public final static int TOP = 1;
public final static int SOLID = 2;
public final static int RIGHT = 3;
public final static int LEFT = 4;
public final static int HCENTER = 5;
public final static int DOTTED = 6;
public final static int BOTTOM = 7;
public final static int BASELINE = 8;
Canvas dist;
private final Paint paint = new Paint();
public void bind(Canvas canvas) {
dist = canvas;
}
public void setColor(int eraseColour) {
}
public void drawImage(Image img, int x, int y, int anchor) {
dist.drawBitmap(img.getTp(), x, y, paint);
}
}}
public class Graphics {
public final static int VCENTER = 0;
public final static int TOP = 1;
public final static int SOLID = 2;
public final static int RIGHT = 3;
public final static int LEFT = 4;
public final static int HCENTER = 5;
public final static int DOTTED = 6;
public final static int BOTTOM = 7;
public final static int BASELINE = 8;
Canvas dist;
private final Paint paint = new Paint();
public void bind(Canvas canvas) {
dist = canvas;
}
public void setColor(int eraseColour) {
}
public void drawImage(Image img, int x, int y, int anchor) {
dist.drawBitmap(img.getTp(), x, y, paint);
}
}}
上面是我们重新定义的Graphics类,在其方法的实现上,我们调用了OPHONE OS的一些具体实现方法,从而用OPHONE OS类库实现了J2ME的框架,做到了两个平台之间很好的移植。
从上面几个例子可以看出两个平台的框架具有很多相似性,这就为两个平台之间的移植创造了条件。同时我们也会看到,两个平台之间存在一定的差异性,一些在 J2ME中的类和方法无法通过直接继承或者调用OPhone OS来实现,这时候就需要移植人员,自己来实现一些相关的类,这也是移植过程中需要我们去努力克服的困难。相关教程参考http://www.oms-sdn.com/?id=logo网站