0

プロジェクトの大まかなコードがいくつかあり、ボタンが押されたときにユーザーのGPS位置を取得しようとしています。その位置を、メソッドに渡すことができるGeoPointにします。

このメソッドは、そのポイントをオーバーレイするオーバーレイクラス用です。Stack Overflowの質問からいくつかのコードを使用していました。現在のGPS位置を取得するにはどうすればよいですか?。GeoPointが配列に追加され、その配列から取得されてメソッドに追加されるようにプログラムを設定しました。これを行うためのより良い方法はありますか、それとも配列に入れずにポイントを使用する方法はありますか?

これは、オーバーレイが追加され、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()メソッドです。

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");
}

これは、更新を取得するクラスonLocationChanged内のメソッドでMyLocationListenerあり、場所が決まったら、更新の要求を停止します。

@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);
}

そのGeoPointを配列に追加せずにbuttonListenerのメソッドに渡すにはどうすればよいですか?

4

1 に答える 1

1

次のように、場所が変更されたときに更新される GPS クラスを作成します。

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) {

    }
}   

次に、ユーザーがボタンをクリックすると、その GPS クラスの値にアクセスします

于 2012-04-10T22:57:03.233 に答える