2012-03-07 3 views
1
을 취소해야하는

내가 할 노력하고있어 무엇 :안드로이드 - GPS 위치 업데이트 - TimerTask를

1) 사용자의 위치 정보를 매 X 분

2

) 웹을 호출하는 타이머와 TimerTask를 사용 업데이트 무슨 일 최신 위치 정보

기록 서비스 :

1)에 TimerTask를 사용자의 전화가 동면 경우)

2

를 생성/SL eeping, 웹 서비스에 대한 호출은 사용자의 전화가 깨어 났을 때, 대기 TimerTasks의 모든 결과를 즉시 실행 TimerTask를 큐

4)에 저장되어지고있는 것으로 보인다)

3 작동하지 않습니다 웹 서비스 여기

에 대한 다수의 원치 않는 위치 업데이트에 코드입니다 :

timer.scheduleAtFixedRate(new TimerTask() { 
@Override 
public void run() { 

    try 
    { 
     //validate that the device has an active & working connection 
     ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetwork = connMgr.getActiveNetworkInfo(); 

     //validate the the device network provider is enabled 
     if ((eview_locationManagerwifi 
       .isProviderEnabled(LocationManager.NETWORK_PROVIDER)) && (activeNetwork != null && activeNetwork.getState() == NetworkInfo.State.CONNECTED)) 
     { 
       UpdateSubscriberLocation(); // call the web service to report location data             
     } 
     else 
     { 
      this.cancel(); 
     } 
    } 
    catch (Exception e) 
    { 


    } 

네트워크 연결과 TimerTask를하지 않기 때문에 공급자가 사용되는 검사는 "진정한"분명히으로 돌아 모두 GE 취소 된 경우 사용자의 휴대 전화가 깨어날 때까지 대기열에 들어갑니다.

웹 서비스의 응답없이 일정 시간이 경과 한 경우 어떻게 타이머 작업을 취소 할 수 있습니까? TimerTask에 일종의 "setTimeout"메서드를 찾을 수 없었습니다.

답변

0

TimerTask를 사용하지 말고 LocationManager.requestLocationUpdates()를 사용하십시오. 이것은 TimerTask와 같이 추가되지 않으며 코드를 간소화합니다. 또한 사용자 위치가 변경되지 않으면 작업을 피할 수있는 추가 이점을 얻을 수 있습니다.

+0

을 TimerTask를 사용하는 방법을 찾을 수 있다면 멋지 네요. 일정한 간격으로 (사용자가 결정한)이 코드가 필요하기 때문에 사용하고 있습니다. 사용자 위치가 아니라면 아무 것도 처리하지 않는 아이디어를 좋아합니다. 변경,하지만 Timer/TimerTask 조합을 사용하지 않고 규칙적으로 일정한 간격으로 코드가 실행되도록하려면 어떻게해야합니까? – JMax2012

+0

잠깐, 실제로 답변을 찾은 것 같아요. requestLocationUpdates() 호출에 일반 시간이 포함되어 있습니다. 간격, 그렇지? 그래서 내가 만들면 응용 프로그램이 시작될 때이 메서드에 대한 호출이 x 밀리 초마다 계속해서 실행되어야합니다. 맞습니까? – JMax2012

+0

requestLocationUpdates의 시간 간격은 위치 관리자에 대한 힌트 일뿐입니다. 장치가 최대 절전 모드이면 더 이상 업데이트를 얻을 수 없습니다. – Stefan

0

빠른 업데이트가 필요한 경우 장치가 CPU를 끄는 것을 방지하려면 WakeLock을 사용하십시오. 알람이 요청에게 위치 업데이트를 해고하는 경우, 데이터를 전송하는 모든 다른 분은 알람 관리기를 사용한다고 말할 수 있습니다 (http://developer.android.com/reference/android/os/PowerManager.html

것은 당신이 빠른 업데이트가 필요하지 않은 경우, 다음 알람 설정 :. 자세한 내용은 여기를 참조하십시오 http://developer.android.com/reference/android/app/AlarmManager.html

+0

OP와 코드 스 니펫을 명확히하기 위해 업데이트 작업은 사용자가 환경 설정에서 선택한 것을 기반으로 사용자 정의 설정 (보통 15 분마다 또는 30 분마다)에 따라 실행되어야합니다. – JMax2012

+0

LocationManagerService에 PARTIAL_WAKE_LOCK이 포함되어 있으므로이를 앱에 포함 할 필요가 없습니다. – jsmith