2010年09月17日 | Wizzer | 2 条评论 接触Java ME,到现在已经过去五天了。利用一款带GPS模块的WM6.1系统的手机实现定位和数据上报项目,周期为18天,公司没有一个人搞过手机开发,囧,身为研发部负责人责无旁贷(目前是光杆司令)…… 废话不多讲,刚开始用MyEclispe + MyEclispeMe + WTK + JDK 搭建了开发环境(这也是费了九牛二虎之力) 一、Java ME/J2ME环境的搭建 1、安装 MyEclipse MyEclipse_6.5.1GA_E3.3.2_Installer.exe、myEclipse6.5汉化包.rar、MyEclipse注册码.txt 2、安装 MyEclispeMe 开发插件 运行MyEclispe –>帮助–>Software Updates–>Find and Install –>搜索新部件 新建站点:http://eclipseme.org/updates/ (可能要翻翻哦),确定,全部勾选,安装,完毕。 3、安装 JDK JDK6.0.21版本,如果找不到就先安装 jdk-6u20-windows-i586.exe 再打21补丁 JavaSetup6u21.exe。 4、安装 JavaME SDK sun_java_me_sdk-3_0-win.exe 5、安装 WTK WTK2.5.2_01版本,sun_java_wireless_toolkit-2.5.2_01-win.exe MyEclispe–>首选项–>J2ME–>设备管理–>选择WTK目录–>refresh (以上这些软件你就百度吧,不行就google,再不行必应) 注意:MyEclipse 编译的JAR包,很可能在虚拟机上安装不了。提示什么907啊,30的错误。 解决办法就是打开,JAR,编辑META-INF文件夹下的 MANIFEST.MF 文件,增加一行: MIDlet-1: Test,,demo.LocationMIDlet 名字为Test,入口类为demo.LocationMIDlet 有的环境可能需要JAD包,相应的里面也要加上这一行。 二、支持JSR179的虚拟机 WM6.1上安装4EsmertecJbed_v20090217.5.1a_Chs.cab,狗狗搜,搜不到就找我要吧。 三、测试代码 package demo; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.List; import javax.microedition.location.Coordinates; import javax.microedition.location.Criteria; import javax.microedition.location.Location; import javax.microedition.location.LocationException; import javax.microedition.location.LocationProvider; //import javax.microedition.location.QualifiedCoordinates; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; public class LocationMIDlet extends MIDlet implements CommandListener, Runnable { private Display myDisplay; private Command okcmd; private Command ecmd; private Form form; private List myList; private boolean yes; public LocationMIDlet() { myDisplay = Display.getDisplay(this); myList = new List("测试真机是否支持 JSR179", List.IMPLICIT); okcmd = new Command("测试", Command.OK, 1); ecmd = new Command("退出", Command.OK, 1); form = new Form("GPS"); String cellid=System.getProperty("CellID"); if(cellid==null||"".equals(cellid)){ cellid=System.getProperty("Cell-ID"); } if(cellid==null||"".equals(cellid)){ cellid=System.getProperty("CELLID"); } if(cellid==null||"".equals(cellid)){ cellid=System.getProperty("CELL-ID"); } form.append("CellID:"+cellid); form.append("JSR:"+System.getProperty("Version")); myList.addCommand(okcmd); form.addCommand(ecmd); form.setCommandListener(this); myList.setCommandListener(this); } protected void destroyApp(boolean arg0) throws MIDletStateChangeException {} protected void pauseApp(){} protected void startApp() throws MIDletStateChangeException { myDisplay.setCurrent(myList); } public void commandAction(Command arg0, Displayable arg1) { if(arg0 == okcmd) { String version = System.getProperty("microedition.location.version"); yes = (version != null && !version.equals("")); Thread t = new Thread(this); t.start(); } if(arg0 == ecmd) { this.notifyDestroyed(); } } public void run() { myDisplay.setCurrent(form); //测试真机是否支持 jsr179 if(yes) { // Set criteria for selecting a location provider: // accurate to 500 meters horizontally // 设置精度 Criteria myCriteria = new Criteria(); myCriteria.setHorizontalAccuracy(500); double lat = 0; double lon = 0; // Get an instance of the provider // 找卫星,找服务 try { LocationProvider myLocationProvider = LocationProvider.getInstance(myCriteria); // Request the location, setting a one-minute timeout // 请求位置,并设置超时时间 Location myLocation = myLocationProvider.getLocation(5000); Thread.sleep(1000); Coordinates myCoordinates = myLocation.getQualifiedCoordinates(); for(int i=0;i<10;i++){ if(myCoordinates != null) { // Use coordinate information // 得到经纬度 lat = myCoordinates.getLatitude(); lon = myCoordinates.getLongitude(); } form.append("真机支持JSR179,纬度坐标:" + String.valueOf(lat) + ",经度坐标:" + String.valueOf(lon)); form.append("------------"+i); try{ Thread.sleep(1000); }catch(Exception e){ } } } catch (LocationException e) { form.append("LocationException 发生异常"); e.printStackTrace(); } catch (InterruptedException e) { form.append("InterruptedException 发生异常"); e.printStackTrace(); } } //真机不支持 jsr179 else { form.append("真机不支持JSR179"); } } } 四、遗留问题 WM6.1手机系统运行JBED虚拟机上的Java ME软件,通过JSR179获取经纬度已实现。 (先运行WM上的GPS软件,后执行虚拟机里的测试代码) 两个问题: 1、室内等信号弱的地方无法定位; 2、JSR179是否需要WM上的程序进行GPS初始化待验证。 初步验证失败,貌似需要WM上先初始化GPS拨号找到卫星,虚拟机里程序才能读取数据,杯具。。。 再研究研究。。。 1,981 total views, 1 views today
下载地址:http://download.it168.com/298/301/124454/index.shtml ,WM系统下运行模拟器就是个杯具囧,模拟器下获取GPS数据估计只要诺基亚手机支持,Android的话本身就是JAVA没必要用J2ME开发。 回复