728x90
일반적으로 안드로이드 폰에서 위치정보를 얻는 방법은 크게 3가지
1) GPS - 위성에서 정보를 받아 삼각측량으로 위치를 계산, 정확하다, 건물 안에서는 안된다
2) 3G망 - 인접된 전화기지국에서오는 전파의 시간 차이로 위치를 계산, 실내에서도 가능
3) WiFi 의 AP
1. 위치제공자 확인법
1) AndroidManifest.xml - 권한설정
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
2) 시스템으로부터 LocationManager 객체 얻어오기
3) getAllProviders() 메소드로 위치제공자 리스트 가져오기
// 1. 위치관리자 객체 생성
LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
// 2. 위치제공자 모두 가져오기
List<String> list = lm.getAllProviders();
for (int i = 0; i < list.size(); i++) {
// 위치제공자
list.get(i);
// 해당 제공자 사용가능 boolean
lm.isProviderEnabled(list.get(i));
}
/**안드로이드 위치 제공자 관련 상수**/
public static final String GPS_PROVIDER = "gps"
public static final String NETWORK_PROVIDER = "network"
public static final String PASSIVE_PROVIDER = "passive"
2. Criteria
// 1. 위치관리자 객체 생성
LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
//2. Criteria 객체 생성(프로바이더의 상세 속성 옵션)
Criteria criteria = new Criteria();
criteria.set(Criteria.ACCURACY_FINE); //위도와 경도에 정확도(정밀도) 설정
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setPowerRequirement(Criteria.POWER_HIGH);
criteria.setAltitudeRequired(false);
criteria.setSpeedRequired(true);
criteria.setCostAllowed(true);
criteria.setBearingRequired(false);
//3. criteria의 옵션에 해당하는, 현재 위치값을 가져오기 위한 프로바이더
private String bestProvide = locationManager.getBestProvider(criteria, true);
4. 위치 정보 취득시의 콜백 - onLocationChanged
//GPS Update 시간은 1초 이상, 반경은 10m 이상이 좋음
//(GPS 송수신하는데 준비 과정에서만 약 1초가 소요 된다고 함)
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 변경에 따른 코딩 구현.
}
Reference
https://developer.android.com/reference/android/location/LocationManager
https://bitsoul.tistory.com/130
https://pluu.github.io/blog/android/droidkaigi/2017/12/30/droidkaigi-location/
https://gogorchg.tistory.com/entry/Android-실시간-GPS-사용
728x90