티스토리 뷰


안드로이드에서 내 위치를 출력 하기 위해선 MyLocationOverlay를 사용하라고 여기 저기 써져있는데..
난 아무리 해도 안되더라.. 계속 getMyLocation에서 GeoPoint값이 null값으로 나온다.
그래서 LocationManager랑 LocationListener를 사용해서 내 위치 정보를 구해왔다.

//현재 내 위치를 GeoPoint로 리턴한다.
	private GeoPoint getMyLocation(){		
		LocationManager myLocationManager;
		LocationListener myLocationListener;
		
		//GPS가 켜져있는지 확인한다.
		myLocationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
		Location loc = myLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
		if(loc == null)
		{
			Log.i("HONEYMAP", "GPS OFF");
			return null;
		}
		
		myLocationListener = new LocationListener() {
			
			@Override
			public void onStatusChanged(String provider, int status, Bundle extras) {
			}
			@Override
			public void onProviderEnabled(String provider) {
			}
			@Override
			public void onProviderDisabled(String provider) {
			}
			//위치 정보가 변경 됐을 때 위치 정보를 가져온다.
			@Override
			public void onLocationChanged(Location location) {
				Log.i("HONEYMAP","Lat:"+location.getLatitude()+"Lng:"+location.getLongitude());
				myLat = location.getLatitude()*1E6;
				myLng = location.getLongitude()*1E6;
			}
		};
		
		//쥐피에스로 부터 위치 변경이 올 경우 업데이트 하도록 설정
		myLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0, 0,	myLocationListener);
		
		//가장 최근 위치를 저장한다.
		myLat = myLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getLatitude()*1E6;
		myLng = myLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getLongitude()*1E6;
		
		Log.i("HONEYMAP","LAT:"+myLat.intValue()+
						"Lng:"+myLng.intValue());
		
		//현재 위치 정보를 GeoPoint에 리턴한다.
		GeoPoint p = new GeoPoint(myLat.intValue(), myLng.intValue());
		return p;
	}


myLat랑 myLng는 클래스 멤버 변수로 Double myLat, myLng 이렇게 선언 돼있음.

사용은 이런 식으로 한다.
if(getMyLocation() != null){
			Log.i("HoneyMap", "Lat:"+getMyLocation().getLatitudeE6());
			Log.i("HoneyMap", "Lng:"+getMyLocation().getLongitudeE6());
			
			mapView.getController().animateTo(getMyLocation());
		}


getMyLocation() != null 이부분이 없다면, GPS가 꺼져있을 경우에 에러나서 프로그램이 꺼진다.


내용 추가(101016)
MyLocationOverlay를 사용해도 된다. null이 나왔던 이유는 값을 가져오는데 시간이 걸리기 때문이다.
댓글
  • hunny. 풀 소스좀 볼수 있을까요?? 위의 내용만 있으면 실행 되나요?? 2011.05.13 17:57
  • BlogIcon jhbaek 안녕하세요^^ 저의 블로그에 방문해 주셔서 감사합니다.
    위의 내용에 적지 않은 부분이 있네요~ 퍼미션으로 위치정보에 관련한 퍼미션을 추가해야 할 듯합니다. 그 외에는 위의 소스만으로 실행이 됩니다~ 추후 수정하도록 하겠습니다. 감사합니다 ^^
    2011.05.17 17:24 신고
댓글쓰기 폼