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 

 

LocationManager  |  Android Developers

LocationManager public class LocationManager extends Object java.lang.Object    ↳ android.location.LocationManager This class provides access to the system location services. These services allow applications to obtain periodic updates of the device's geog

developer.android.com

https://bitsoul.tistory.com/130

 

안드로이드: 위치제공자 LocationManager 예제 - 현재폰에 제공되는 위치제공자 확인

안드로이드: 위치제공자 LocationManager 예제 - 현재폰에 제공되는 위치제공자 확인 안드로이드를 사용하여 위치기반 앱을 만들때, 현재 톤에 제공되는 위치 제공자 들이 어떠한 것들이 있는지 확인해봐야 합니다..

bitsoul.tistory.com

https://pluu.github.io/blog/android/droidkaigi/2017/12/30/droidkaigi-location/

 

Pluu Dev - [번역] DroidKaigi 2017 ~ 위치 정보를 정확하게 트래킹하는 기술

Emulator 29.2.2 Canary에서 Location 사용하기 Posted on 28 Sep 2019 [요약] Demystifying Android Accessibility Development (Google I/O '19) Posted on 23 Sep 2019 Android Studio Tips #2 Posted on 24 Jul 2019 Android Studio Tips #1 Posted on 13 Jul 2019

pluu.github.io

 https://gogorchg.tistory.com/entry/Android-실시간-GPS-사용

 

[Android] 실시간 GPS 사용

실시간으로 위치 추적을 할 때, 여러 Test와 조사 결과 다음과 같이 나왔다. 1. 강제적으로 Update를 시키지 말고, LocationListener를 통하여 받도록 하자. 2. GPS Update 시간은 1초 이상, 반경은 10m 이상이 좋..

gogorchg.tistory.com

 

728x90

+ Recent posts