실시간으로 위치 추적을 할 때, 여러 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 |