2013-06-17 4 views
0

현재 위치 데이터를 매분 (또는 기타 지정된 시간)받는 애플리케이션을 작성 중이며 서버로 전송합니다.매주 Android 위치 업데이트

내가 알아 차린 문제점은 다음과 같습니다. 전원에 연결된 응용 프로그램을 사용할 때 완벽하게 작동합니다. 정의 된 간격으로 업데이트를 보냅니다. 배터리로 사용할 때 업데이트가 무작위로 전송됩니다.

저는 타이머를 사용하여 업데이트 간격을 지정합니다. 이 타이머는 백그라운드 서비스에서 실행됩니다. 내가 타이머를 업데이 트를 요청하고 위치를받을 때 업데이 트를 제거합니다. 내 코드의 조각 :

private class mainTask extends TimerTask 
    { 
     public void run() 
     { 
      toastHandler.sendEmptyMessage(0); 
     } 
    } 

    private final Handler toastHandler = new Handler() 
    { 
     @Override 
     public void handleMessage(Message msg) 
     { 
      date = date.getInstance(); //used to set time of update. 

      if(!GPSupdating) 
      { 
       locationManager.requestLocationUpdates("gps", 0, 0, locationListenerGPS); 
       GPSupdating = true; 
      } 
     } 
    }; 

내 위치 수신기 :

LocationListener locationListenerGPS = new LocationListener() 
    { 

     public void onLocationChanged(Location updatedLocation) 
     { 
      myGPSLocation = updatedLocation; 
      haveLocationGPS = true; 
      locationManager.removeUpdates(locationListenerGPS); 
      GPSupdating = false; 
     } 

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

     public void onProviderEnabled(String provider) {} 

     public void onProviderDisabled(String provider) {} 
    }; 

가이 제대로 작동되지 않는 이유 어떤 생각을 가지고 있습니까?

+0

백그라운드 ** 서비스 **에서 실행중인 "TIMER"와 동일한 문제가있었습니다 ** 오늘까지 까지 아무런 이유가 없었습니다 ... 그래서 타이머 대신 'Alram Manager'를 사용했습니다. '그리고 그게 완벽하게 – DeltaCap

+0

답해 주셔서 감사합니다. Timer 대신 Alarm Manager를 사용하는 샘플 코드를 보내 주시겠습니까? 그것은 매우 도움이 될 것입니다. –

답변

0

매분마다 청취자를 활성화/비활성화하는 것은 좋지 않습니다. 1 분

1) 설정 최소한의 업데이트 시간 (requestLocationUpdates에서) 업데이트 리스너에서 서버로 데이터를 전송 :

더 나은

는 다음과 같은 일을 시도

locationManager.requestLocationUpdates("gps", 60*1000, 0, locationListenerGPS); 

당신은보다 정확한 업데이트 간격을해야하는 경우 보다 :

2) 별도의 스레드를 시작하고 GPS 업데이트를 사용 설정합니다. 스레드 또는 서비스 변수에 마지막 위치를 저장하십시오. 또한 타이머를 시작하고 타이머 틱에서 위치를 서버로 보냅니다.

0

전원 관리를 위해 기준을 사용해보십시오. 전원 요구 사항을 POWER_LOW로 설정하십시오. 당신은 약간의 정확성을 느낄 것입니다.

LocationManager locationManager= (LocationManager) getSystemService(context); 
     Criteria criteria = new Criteria(); 
      criteria.setAccuracy(Criteria.ACCURACY_FINE); 
      criteria.setPowerRequirement(Criteria.POWER_LOW); 
      provider = locationManager.getBestProvider(criteria, true); 
0

분당 한 번씩 GPS를 사용 또는 사용 중지하면 에너지를 절약 할 수 있습니다. 큰 인터벌 (5 분)을 선택하거나 두 번째 위치를 선택하십시오.
그런 다음 lastValidLocation 필드에 위치를 저장하고 자신의 타이머를 시작한 다음 1 분에 한 번 lastValidLocation을 읽습니다. 변경된 경우 서버로 보냅니다.

관련 문제