현재 GPS를 사용하는 앱을 구현중에 있습니다.
헌데 문제가 앱 최초 로딩시에 위치를 잡아오지 못합니다.
에뮬레이터와 디바이스(갤럭시 탭)에서 확인해 본 결과 다음과 같은 증상이 발생됩니다.
1. 앱을 최초로 동작하면 마지막 위치 못잡아옴
2. 에뮬레이터에서 위치를 준 뒤 다시 가져오라고 해도 실행되지 않음
3. 기본으로 제공되는 지도 앱을 한번이라도 실행한 뒤 제가 만든 앱을 실행하면 위치 잡아옴
제가 만든 앱에서는 알림창에 생기는 GPS 아이콘이 생기지 않으나
지도앱이나 타 앱을 사용하여 GPS아이콘이 생긴뒤 실행하면 잘 잡아옵니다.
아무래도 아이콘이 생기고 안생기고의 차이인것 같은데...
설정관련해서는 전부다 GPS사용으로 되어있습니다.
공지사항은 다 읽어보았습니다.
여러분의 많은 조언 부탁드립니다.
답변 감사드립니다.
현재 Criteria를 사용하지 않고 그냥 무조건 GPS만 사용하기 위하여
locationManager = (LocationManager) getSystemService(MapActivity.LOCATION_SERVICE);
locationListener = new MyLocationListener();
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
0,
0,
locationListener);
이렇게 사용하고 있습니다.
이게 다른 어플에서 알림창에 GPS를 뜨게 한뒤에 사용을 하면 정상적으로 사용이 가능하나
다른 어플을 사용하지 않은 상태에서 바로 들어오면 문제가 되더군요. 아직 해결방법은 찾지 못하였습니다.ㅠ
Criteria라는게 결국 조건걸고 해당 조건에 해당하는 최적의 Provider를 찾는데 쓰는 녀석이니 사용하셔도 크게 문제 없을거라 생각하는데 말씀하신방법으로 구성해본적이 없어서 으악..ㄷㄷ
음 근데 갤s기준으로 말씀드리자면 이놈이 자기가 gps를 사용하겠다고 명령을 내려도 하드웨어자체가 반응이 느려가 딜레이가 생기는 경우가 있는녀석들이 있습니다.
전에 갤s를 기준으로 gps모듈들어가는 어플만들당시 gps 지정해주고 값을 가져오려해도 못가져 오더군요. 그래서 그냥 타이머로 딜레이를 3초정도 주고 긁어오니 자기값을 가져오는 이상한 경우를 경험한적이 있습니다. 요런부분도 생각해보시면 좋을거 같네요.
위 3개 증상을 보면 gps를 활성화를 못시키는것 같은 느낌이네요.
String context = Context.LOCATION_SERVICE;
locationManager = (LocationManager)getSystemService(context);




음 정확히 이해는 잘 안되지만
location = locationManager.getLastKnownLocation( LocationManager.NETWORK_PROVIDER );
이 가장 최근값을 못가져온다는건지
아니면 gps활성화를 못시키고 있다는건지 잘 이해가 안되는군요.
일단전 Criteria를
String context = Context.LOCATION_SERVICE; locationManager = (LocationManager)getSystemService(context); //GPS 설정. Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); // 정확도 criteria.setPowerRequirement(Criteria.POWER_LOW); // 전원 소비량 criteria.setAltitudeRequired(false); // 고도, 높이 값을 얻어 올지를 결정 criteria.setBearingRequired(false); // provider 기본 정보 criteria.setSpeedRequired(false); //속도 criteria.setCostAllowed(true); //위치 정보를 얻어 오는데 들어가는 금전적 비용 //상기 조건을 이용하여 알맞은 GPS선택후 위치정보를 획득 provider = locationManager.getBestProvider(criteria, true);형식으로 구성을 해주고
그이후는 IF문을 통해 provider값이 널인지를 확인해서 동작을 체크합니다.
예로
if(provider == null){} else {if(location == null){if(location==null){if(location==null){ 최종 gps값 가져오기 }} else { gps 수신못함 알람 출력 }이런느낌으로 구성 합니다.