こんにちは、ウェブサーバーの座標を利用するアプリを書いています。Web サービスから座標を取得する方法は知っていますが、座標を取得したら、それらをマップ上に常に表示するにはどうすればよいでしょうか。Location Manager からの場所が変更されたときに、Location Listener がマップ上のポイントを更新するのと似ています。Webサービスでもらえるポイントを常に更新したい。これはサービスで行われますか? もしそうなら、どのように?
public class GeoUpdateHandler implements LocationListener {
@Override
public void onLocationChanged(Location location) {
...
GeoPoint point = new GeoPoint(lat, lng);
createMarker();
mapController.animateTo(point); // mapController.setCenter(point);
}
更新: Createmarker のコード
private void createMarker() {
GeoPoint p = mapView.getMapCenter();
OverlayItem overlayitem = new OverlayItem(p, "", "");
itemizedoverlay.addOverlay(overlayitem);
mapView.getOverlays().add(itemizedoverlay);
}
更新: Web サービスから座標を取得するためのコード...
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(".../android/serverFile.php");
JSONObject json = new JSONObject();
try {
JSONArray postjson=new JSONArray();
postjson.put(json);
// Execute HTTP Post Request
System.out.print(json);
HttpResponse response = httpclient.execute(httppost);
// for JSON:
if(response != null)
{
InputStream is = response.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
String jsonStr = sb.toString();
JSONObject jsonObj = new JSONObject(jsonStr);
String longitudecord = jsonObj.getString("lon");
String latitudecord = jsonObj.getString("lat");
}
タイマーで更新:
public void startService(){
timer.scheduleAtFixedRate(new TimerTask(){
@Override
public void run() {
//Call the method that contacts the server and
//adds the coordinates to a list. Get those values from the list.
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.kre8tiveinspired.com/android/serverFile.php");
JSONObject json = new JSONObject();
try {
// JSON data:
JSONArray postjson=new JSONArray();
postjson.put(json);
// Execute HTTP Post Request
System.out.print(json);
HttpResponse response = httpclient.execute(httppost);
// for JSON:
if(response != null)
{
InputStream is = response.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
String jsonStr = sb.toString();
JSONObject jsonObj = new JSONObject(jsonStr);
// grabbing the menu object
String longitudecord = jsonObj.getString("lon");
String latitudecord = jsonObj.getString("lat");
latcord = latitudecord;
loncord = longitudecord;
}
}catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Handler handler = new Handler();
handler.post(new Runnable(){
public void run(){
double aDouble = Double.parseDouble(loncord);
double bDouble = Double.parseDouble(latcord);
int lat = (int) (aDouble * 1E6);
int lng = (int) (bDouble * 1E6);
GeoPoint point = new GeoPoint(lat, lng);
createMarker();
mapController.animateTo(point); // mapController.setCenter(point);
//add the overlays to the map
// and call invalidate for the mapview.
mapView.invalidate();
}
});
}
}, 0, 1000); // Here im calling the timer every 10 seconds