2012-04-10 5 views
0

내 프로젝트에 대략적인 코드가 있는데 단추를 누를 때 사용자의 GPS 위치를 얻으려고하고 위치를 GeoPoint로 설정하여 메서드에 전달할 수있게하려고합니다.버튼 클릭시 GPS 위치를 얻으려면 어떻게해야합니까?

이 메서드는 해당 점을 오버레이로 그리는 오버레이 클래스 용입니다. 스택 오버플로 질문에서 일부 코드를 사용했습니다 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(); 
     } 
    } 
}); 

이것은을 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"); 
} 

이 업데이트를 얻는 MyLocationListener 클래스 내부의 onLocationChanged 방법이며 나는 위치를 일단 나는 업데이트 요청을 중지합니다.

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

    } 
} 

을 사용자가 버튼 액세스를

+0

안녕하세요 미안했다 그 GPS 클래스의 값을 클릭 그런 때 너무 오랫동안 회신 해주십시오. 아이디어를 주셔서 감사 드리며 노력했지만 매우 잘 작동합니다. 다시 한번 감사드립니다. –

관련 문제