2012-04-10 3 views
0

У меня есть примерный код для моего проекта, и я пытаюсь получить GPS-местоположение пользователя при нажатии кнопки, и я хочу, чтобы это место было GeoPoint, которое затем можно передать методу.Как получить местоположение GPS на кнопку?

Метод предназначен для класса Overlay, который рисует наложение этой точки. Я использовал какой-то код из Stack Overflow question How can I obtain the current GPS location?. У меня есть программа, настроенная так, что 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(); 
     } 
    } 
}); 

Это метод getLocation(), который создает locationManager и requestUpdates.

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 без добавления его в массив?

ответ

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 класса

+0

Привет жаль, что я принял так долго отвечать. Спасибо за идею, которую я пробовал, и она работает очень хорошо. Еще раз спасибо. –

Смежные вопросы