西门子C65开发手札

来源:互联网 发布:淘宝上怎么买烟 编辑:程序博客网 时间:2024/06/11 04:44

    自己给西门子C65也写过一段时间程序,其中也发现很莫名其妙的问题,找遍N个网站,才发现开发西门子手机软件的实在是少得可怜……唉,也只能怨西门子不争气吧!
在这里写一些自己开发中遇到的问题,也算是给西机的开发FANS做些参考吧!

1.不支持GameCanvas.getState()
    虽然西门子C65号称支持CLDC1.1和MIDP2.0,其实是没有完全实现的。其中GameCanvas.getState()就是一例子,如果在编程中采用getState()方法,将会出现意想不到的结果,因为无论如何,getState()返回的永远是0值,而不是键位值。
    可以用下面这个类做测试:
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.*;
public class myGameCanvas extends GameCanvas
{
 Graphics g=getGraphics();
 public myGameCanvas()
 {
  super(false);
 }
 protected void keyPressed(int keyCode)
 {
  int keyState=this.getKeyStates();
  if(keyState!=0)
  {
   g.setColor(0,0,0);
   g.fillRect(0,0,this.getWidth(),this.getHeight());
   g.setColor(255,255,0);
   g.drawString("keyCode"+Integer.toString(keyCode),20,20,0);
   g.drawString("keyState "+Integer.toString(keyState),20,40,0);
  }
  else
  {
   g.setColor(0,0,0);
   g.fillRect(0,0,this.getWidth(),this.getHeight());
   g.setColor(255,255,0);
   g.drawString("keyCode "+Integer.toString(keyCode),20,20,0);
   g.drawString("keyState "+Integer.toString(keyState),20,40,0);
  }
  this.setFullScreenMode(true);
  flushGraphics();
 }
}

2.文件名大小写
    西门子的实体机子对文件名区分大小写,比如"a.PNG"和"a.png"是不同的文件,但在windows的模拟器下是同一个文件。这会造成一个结果就是,明明在模拟器中顺利读出了图片,但在实机中就是抛出异常!

3.模拟器不支持media.*
   这应该是模拟器的不完善,凡是涉及到media.*的都会提示“JAVA ERRO”!但是在实体机上一切运行正常。所以打算在软件中播放声音的朋友,还是要到实体机中去尝试,说不定很多问题就迎刃而解。
例如,此段代码在模拟器中出错,但在实体机中正常通过:
try
  {
   InputStream in = getClass().getResourceAsStream("/res/music"+stageNum+".mid");
   player = Manager.createPlayer(in,"audio/midi");
   player.setLoopCount(4);
   player.start();
  }
  catch(IOException e){}
  catch(MediaException e){}

4.模拟器不支持RMS
   不知道为什么,模拟器一直不支持RMS,总之解决方法也只能用WTK自带的模拟器测试是否正常,或是直接拷贝到手机上测试了。