2012-04-10 16 views
0

私は自分のプロジェクトにおおまかなコードをいくつか持っており、ボタンが押されたときにGPSの位置を取得しようとしています。その場所をメソッドに渡すことができるGeoPointにします。ボタンクリックでGPS位置を取得するにはどうすればよいですか?

このメソッドは、その点をオーバーレイに描画するオーバーレイクラスです。私はスタックオーバーフローの質問からいくつかのコードを使用していたHow can I obtain the current GPS location?。私はGeoPointが配列に追加されるようにプログラムをセットアップしてから、その配列から取得してメソッドに追加しました。これを行うにはより良い方法がありますか、それを配列に入れないでポイントを使用する方法はありますか?

Button startBtn = (Button) findViewById(R.id.startBtn); 
startBtn.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View arg0) { 
     // TODO Auto-generated method stub 
     getLocation(); 

     tempOverlay = (MapOverlay) listOfOverlays.get(arrayNumber); 
     tempOverlay.addPoint(points.get(pointCount)); 
     mapView.postInvalidate(); 
     } 
    } 
}); 

これはlocationManagerとrequestUpdatesを作成するのgetLocation()メソッドである:

これは、オーバーレイが追加され、GeoPointがアレイから取得されるボタンです。

public void getLocation() 
{ 
    lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
    locationListener = new MyLocationListener(); 
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener); 

    System.out.println("Get Location Called"); 
} 

これは、更新を取得し、私は更新の要求を停止位置を取得したらMyLocationListenerクラス内部onLocationChanged方法です。私は、配列にそれを追加することなく、buttonListenerでメソッドにGeoPointことを渡す方法

@Override 
public void onLocationChanged(Location loc) 
{ 
    if(loc != null) 
    { 
      Toast.makeText(getBaseContext(),"LocationChanged : Lat: " + loc.getLatitude()+ " Lng: " + loc.getLongitude(), 
      Toast.LENGTH_SHORT).show(); 
    } 

    p = new GeoPoint((int) (loc.getLatitude() * 1E6),(int) (loc.getLongitude() * 1E6)); 

    points.add(p); 
    System.out.println("Point Added to Array"); 

    LBServicesActivity.this.lm.removeUpdates(this); 

    mc.animateTo(p); 
    mc.setZoom(18); 
} 

答えて

1

場所は種類のこのような変更されたときに更新されるGPSクラスを作成します。ユーザーはそのGPSクラスの値

+0

こんにちは申し訳ありませんが、私が取ったボタンへのアクセスをクリックしたときに次に

public class GPSData { private static double latitude; /** * @return the latitude */ public static double getLatitude() { return latitude; } /** * @param latitude the latitude to set */ public static void setLatitude(double l) { latitude = l; } private static double longitude; /** * @return the longitude */ public static double getLongitude() { return longitude; } /** * @param d the longitude to set */ public static void setLongitude(double d) { longitude = d; } } public static class MyLocationListener implements LocationListener { public void onLocationChanged(Location location) { setAccuracy(location.getAccuracy()); setLongitude(location.getLongitude()); setLatitude(location.getLatitude()); } @Override public void onProviderDisabled(String provider) { } @Override public void onProviderEnabled(String provider) { } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } } 

を返信するには長い間。アイデアをありがとう、私はそれを試してみて、それは非常にうまく動作します。再度、感謝します。 –

関連する問題