본문 바로가기

나의 플랫폼/안드로이드

[Android] 실시간 GPS 사용

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

실시간으로 위치 추적을 할 때, 여러 Test와 조사 결과 다음과 같이 나왔다.


1. 강제적으로 Update를 시키지 말고, LocationListener를 통하여 받도록 하자.

2. GPS Update 시간은 1초 이상, 반경은 10m 이상이 좋다.

 ( GPS 송수신하는데 준비 과정에서만 약 1초가 소요 된다고 함. )

3. distanceBetween를 이용하면 거리가 나온다.

4. getSpeed 함수는  m/s 단위이다.

   km/h 변경은 3600을 곱하라. (60초 * 60분)

기본적인 GPS 셋팅 소스

전제 조건 : 클래스에서 LocationListener을 상속 받는다.

....

Criteria criteria = new Criteria();

criteria.setAccuracy(Criteria.ACCURACY_FINE);

criteria.setPowerRequirement(Criteria.POWER_LOW);

criteria.setAltitudeRequired(true);

criteria.setBearingRequired(false);

criteria.setSpeedRequired(false);

criteria.setCostAllowed(true);

LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

 String provider = locationManager.getBestProvider(criteria, true);

if (!locationManager.isProviderEnabled(provider)

        &&locationManager.getLastKnownLocation(provider)!=null) {

                locationManager.requestLocationUpdates(

                        provider,

                        1000,

                        10, this);

 } else {

                criteria.setAccuracy(Criteria.ACCURACY_COARSE);

                provider = locationManager.getBestProvider(criteria, true);

                locationManager.requestLocationUpdates(

                        provider,

                        1000,

                        10, this);

  }

@Override

public void onLocationChanged(Location location) {

// GPS 변경에 따른 코딩 구현.

}


위 코드에서 속도를 구할 때, onLocationChanged가 언제 불러질지 확실한 시간을 알 수 없으므로,

불러지기 전 시간과 불러진 후 시간을 체크 하여 다시 계산 해주면 정확한 m/s 속도를 구할 수 있다.

private long startTime = -1;

private Location beforeLocation;

private Location curLocation;


@Override

public void onLocationChanged(Location location) {

// GPS 변경에 따른 코딩 구현.

if (startTime == -1) {

startTime = location.getTime();

}

// 현재 위치 거리 및 속도 구하기.

      float distance[] = new float[1];

      Location.distanceBetween(beforeLocation.getLatitude(), beforeLocation.getLongitude(),

location.getLatitude(), location.getLongitude(), distance);

long delay = location.getTime() - startTime;

double speed = distance[0]/delay;

double speedKMH = speed * 3600;


// 전 위치 저장.

beforeLocation = location;

}


참고하세요.


그럼 오늘도 즐코딩.





'나의 플랫폼 > 안드로이드' 카테고리의 다른 글

notification  (0) 2013.07.04
[Android] 외장 하드 접근의 큰 착각.  (11) 2013.07.03
[ JAVA ] try catch finally 사용 시 문제점.  (4) 2013.04.16
[ Android ] htons  (0) 2013.01.28
[ Android ] AIDL 파일 예제  (0) 2013.01.28