안드로이드에서 내 위치를 출력 하기 위해선 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이 나왔던 이유는 값을 가져오는데 시간이 걸리기 때문이다.
저작자 표시 비영리 변경 금지
신고
블로그 이미지

roter

JHB / Peripheral Programmer

댓글을 달아 주세요

  • hunny. 2011.05.13 17:57 신고  댓글주소  수정/삭제  댓글쓰기

    풀 소스좀 볼수 있을까요?? 위의 내용만 있으면 실행 되나요??

    • BlogIcon roter 2011.05.17 17:24 신고  댓글주소  수정/삭제

      안녕하세요^^ 저의 블로그에 방문해 주셔서 감사합니다.
      위의 내용에 적지 않은 부분이 있네요~ 퍼미션으로 위치정보에 관련한 퍼미션을 추가해야 할 듯합니다. 그 외에는 위의 소스만으로 실행이 됩니다~ 추후 수정하도록 하겠습니다. 감사합니다 ^^