J2ME GPS定位JSR 179实例2
原创
©著作权归作者所有:来自51CTO博客作者zhy000的原创作品,请联系作者获取转载授权,否则将追究法律责任
//为何在模拟器上OK,在手机上就不行呢?
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.lcdui.*;
import javax.microedition.location.*;
class MyCanvas extends Canvas
{
GISMIDlet GIS;
public MyCanvas(GISMIDlet GIS)
{
this.GIS = GIS;
}
private double lat;
private double lon;
public void setInfo(double lat, double lon)
{
this.lat = lat;
this.lon = lon;
}
protected void paint(Graphics g)
{
// TODO 自动产生方法 Stub
Font f = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN,
Font.SIZE_SMALL);
g.setFont(f);
// use font height as a line height
int lineHeight = f.getHeight();
// current line counter
int line = 0;
g.setColor(0xffffff);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0x0000ff);
g.drawString("Lat, Lon (" + GIS.formatDouble(lat, 5) + ", " + GIS.formatDouble(lon, 5) + ")", 0, lineHeight * (line++), Graphics.TOP | Graphics.LEFT);
}
}
public class GISMIDlet extends MIDlet implements CommandListener, LocationListener
{
private Command exitCmd = new Command("Exit", Command.EXIT, 1);
//private Form mainForm;
private MyCanvas myCanvas;
protected double lat; // 纬度
protected double lon; // 经度
//private LocationProvider locationProvider;
//private TextField latField; // 緯度欄位
//private TextField lonField; // 經度欄位
public GISMIDlet()
{
/* mainForm = new Form("GIS 經緯度測試");
latField = new TextField("緯度:", formatDouble(lat, 5), 15,
TextField.DECIMAL); // 設定緯度欄位格式
lonField = new TextField("經度:", formatDouble(lon, 5), 15,
TextField.DECIMAL); // 設定經度欄位格式
mainForm.append(latField); // 增加緯度欄位
mainForm.append(lonField); // 增加經度欄位
mainForm.addCommand(exitCmd); // 增加軟體按鈕
mainForm.setCommandListener(this); // 監聽按鈕事件 */
myCanvas = new MyCanvas(this);
myCanvas.addCommand(exitCmd);
myCanvas.setCommandListener(this);
Display.getDisplay(this).setCurrent(myCanvas); // 顯示畫面
}
protected void startApp() throws MIDletStateChangeException
{
Criteria c1 = new Criteria(); // 存取座標之限制
c1.setHorizontalAccuracy(500); // 水平
c1.setVerticalAccuracy(25);
/* try {
while (true) {
Thread.sleep(5000); // 每幾秒顯示一次資料 */
try
{
LocationProvider lp = LocationProvider.getInstance(c1); // 讀取座標之物件
if (lp != null)
{
lp.setLocationListener(this, -1, 0, 0); // 每幾秒讀取一次座標
}
Location LC = lp.getLocation(60);
Coordinates C = LC.getQualifiedCoordinates(); // 將座標封存
if (C != null)
{
lat = C.getLatitude(); // 緯度
lon = C.getLongitude(); // 經度
myCanvas.setInfo(lat, lon);
}
}
catch (LocationException e)
{
e.printStackTrace();
}
catch (InterruptedException e)
{
// TODO 自動產生 catch 區塊
e.printStackTrace();
}
} // end method startApp
protected void pauseApp()
{
// TODO 自動產生方法 Stub
} // end method pauseApp
protected void destroyApp(boolean arg0) throws MIDletStateChangeException
{
// TODO 自動產生方法 Stub
} // end method destroyApp
public void commandAction(Command c, Displayable arg1)
{
if (c == exitCmd)
{
try
{
destroyApp(false);
}
catch (MIDletStateChangeException exception)
{
System.out.println("MIDletStateChangeException");
}
notifyDestroyed();
}
} // end method commandAction
public String formatDouble(double value, int decimals)
{
String doubleStr = "" + value;
int index = doubleStr.indexOf(".") != -1 ? doubleStr.indexOf(".")
: doubleStr.indexOf(",");
// Decimal point can not be found...
if (index == -1)
{
return doubleStr;
}
// Truncate all decimals
if (decimals == 0)
{
return doubleStr.substring(0, index);
}
int len = index + decimals + 1;
if (len >= doubleStr.length())
{
len = doubleStr.length();
}
double d = Double.parseDouble(doubleStr.substring(0, len));
return String.valueOf(d);
} // end method formatDouble
public void locationUpdated(LocationProvider lp, final Location location)
{
new Thread()
{
public void run()
{
if (location != null && location.isValid())
{
Coordinates C = location.getQualifiedCoordinates();
if (C != null)
{
lat = C.getLatitude(); // 緯度
lon = C.getLongitude(); // 經度
myCanvas.setInfo(lat, lon);
myCanvas.repaint();
}
}
}
}.start();
}
public void providerStateChanged(LocationProvider arg0, int arg1)
{
// TODO 自動產生方法 Stub
}
/*public void updata(double lat, double lon) {
latField.setLabel("緯度:" + formatDouble(lat, 5)); // 更新緯度欄位
lonField.setLabel("經度:" + formatDouble(lon, 5)); // 更新經度欄位
latField.setString("" + formatDouble(lat, 5)); // 更新緯度欄位
lonField.setString("" + formatDouble(lon, 5)); // 更新經度欄位
} // end method updata*/
} // end class GISMIDlet
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Java socket 获取gps定位
本文详细介绍了Java socket 获取gps定位的方法,并给出了详细的代码示例。
服务器 数据 客户端 Java -
J2ME 安装
[code="java"]J2ME 安装 心得2009-09-05 9:13jdk1.5.4.exe——Java运行环境安装文件eclipsesdk_win32.zip——
开发工具 java runtime eclipse Java -
j2me and android
停状态)当手机来电接电话的时候,会调用该接口。用户可以调用该
UI Android sed -
j2me入门
在这里我基本上讲解的是客户端.而客户端用的是j2me来设计.所以这篇文章将详细的介绍有关j2me的体系以及入门.(内容有些部分将Co
J2SE SUN 客户端 main方法 System -
J2ME学习笔记
一、J2ME介绍: J2ME的全称是Ja
java 字符串 Java