2013-08-20 2 views
0

위도와 경도와 관련된 문제가 있습니다. 다음과 같이 내 코드는 다음과 같습니다 - 네저 방법은 위치가 내 문제를 change.But 도착 때 실행는 onLocationChanged 작동하고 위의 코드 모두에서위도와 경도로 위치를 변경하는 데 문제가 있습니다.

LocationManager locationManager = (LocationManager) 
        getSystemService(LOCATION_SERVICE); 

      LocationListener locationListener = new LocationListener() { 

       public void onLocationChanged(Location location) { 


       Toast.makeText(
         CheckInSOSMessageService.this, 
         "Location has been Changed now.....................", 0) 
         .show(); 

       isLocationChanged=true; 

        } 

       public void onStatusChanged(String provider, int status, 
         Bundle extras) { 
       } 

       public void onProviderEnabled(String provider) { 
       } 

       public void onProviderDisabled(String provider) { 

       } 
      }; 

      locationManager.requestLocationUpdates(
        LocationManager.GPS_PROVIDER, 0, 0, locationListener); 

이 내가 한 장소에서 장치를 이동할 때 다른 위치 변경 및 토스트 알림은 장치에서 보이지만, onLocationChanged 메서드는 여러 번 실행됩니다. 내 장치조차도 유휴 위치에 있습니다. 이로 인해 토스트 알림이 반복적으로 나타납니다. 많은 것을 자극합니다. . 내가 한 번 그 위치를 원할 때. 변경 위의 방법은 번만을 실행 한 다음 장치를 다시 이동 한 후 실행합니다.이 작업은 내 요구 사항입니다.이 문제를 해결할 수 있도록 도와주세요. 사전 감사합니다!

+0

isLocationChanged는 무엇을 사용하고 있습니까? 이 변수를 사용할 수는 있지만 더 나은 방법은 배터리를 보존하기 위해 청취자 등록을 취소하는 것입니다. –

+0

# 안드로이드의 위치 API에별로 익숙하지 않지만 내가 상상할 수있는 것은 장치를 옮기면 한 번 이상 위치가 변경된다는 것입니다. long과 lat의 마지막 값을 저장하고 새로운 값과 비교할 수있게하십시오. 차이가 크면 게시물을 인쇄하십시오. 단 한 가지 생각, 그것이 사실인지 모르겠다. – ZeusNet

답변

0

휴대 전화가 항상 같은 위치에 있어도 위치가 변경되고 onLocationChanged가 트리거됩니다. f.e. 때문에 GPS 신호가 급격히 변동하기 때문입니다. 건물에 신호 반사입니다. 적당한 시간 간격으로 정확한 위치를 얻지 못할 것입니다.

일시적으로 위치를 저장하고 새 위치와 비교할 수 없도록 피하십시오. 그들 사이의 거리가 지정된 경계선에 도달하면 새 위치를 사용하십시오. 이 많은 스팸하고 많은 자원 때문에

또 다른 제안은

locationManager.requestLocationUpdates(
       LocationManager.GPS_PROVIDER, 0, 0, locationListener); 

같은 요청을 방지하는 것입니다. 자신의 접근 방식에 맞는 몇 가지 다른 minTime 및 minDistance 값을 사용해보십시오. 그러면 0ms마다 onLocationChanged가 트리거되지 않습니다.

편집 :

당신은 위치 갱신이 같은 요청을 사용하는 것보다 매 순간을합니다.

locationManager.requestLocationUpdates(
       LocationManager.GPS_PROVIDER, 1000, 1000, locationListener); 

매분 1 킬로미터마다 업데이트가 제공됩니다. minDistance가 없으면 업데이트를 요청할 수 없기 때문에 충분히 높게 설정하십시오.

+0

안녕하세요 스티브 !! 사실 나는 위치가 변경되었을 때 서버에 데이터를 보내려고합니다. 아무런 변화가 없다면 데이터가 서버로 전송되지 않습니다. 마찬가지로 위치가 다시 변경되면 데이터가 다시 전송됩니다. server.So 그래서 난 그 위치가 변경되는지 여부를 인식하고 싶습니까? 제발 thios 문제를 해결하도록 도와주세요. 나는 확실히 당신의 대답을 수락 할 것입니다. –

+0

@DeepakSharma는 편집에 대해 살펴 봅니다. –

+0

하지만 어떻게 응용 프로그램을 테스트 할 수 있습니까 ??1km 이상으로 이동 한 다음 신청서를 테스트해야합니까? –

0

공유 환경 설정을 사용하여 현재 위치를 업데이트하고 논리를 실행 한 후 상당한 거리를 확보 한 후 location.distanceTo (loc)를 사용하여 sharedPrefs의 현재 위치를 비교할 수 있습니다.

관련 문제