2012-09-26 7 views
1

좌표와 함께 10 초마다 원격 서버에 데이터를 보내려고합니다. 나는 가장 일치가 나는 다음과 같은 코드가 청취자의locationListener는 한 번만 호출됩니다.

public void onCreate(Bundle savedInstanceState) { 
    //snip 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 0, new SendingLocationListener()); 
} 

될 것이라고 생각 : 그것은 doInBackground() 방법의에

public void onLocationChanged(Location location) { 
    if(null == location) return; 
    TrackerNotifierTask task = new TrackerNotifierTask(); 
    task.execute(location); 
} 

TrackerNotifierTaskhttpclient을 사용하기 때문에 꽤 간단합니다.

이제 작업을 시작하면 onLocationChanged()이 실행되고 데이터가 원격 서버에 성공적으로 도달한다는 것을 알 수 있습니다. 그러나 단 한 번! 나중에 내가 뭘 할지라도 코디 등을 바꾸어도 과제는 불리지 않는다.

안드로이드에서 이와 같은 것을 구현하는 올바른 방법인가 아니면 background-service에 의지해야할까요?

답변

0

this을 참조하십시오.

LocationListeneranonymous class으로 구현 된 경우 예상대로 작동합니다.

+0

이 문제를 해결 하는가, 같은데? – Shrikant

+0

좋아, 익명의 내부 클래스로 트릭이 작동했습니다, 리스너는 각 GPS (mock) 업데이트를 호출합니다. 반면에, minTime은 무시되는 것 같습니다. 어떻게 든 강제 할 수 있습니까? – injecteer

+0

문제가 해결되면 http://stackoverflow.com/questions/6442093/how-do-i-decide-what-interval-to-use-for-requestlocationupdates를 참조하십시오. – Shrikant

3

Shrikant의 링크는 LocationListener 구현의 클래스 구조에 대한 몇 가지 힌트를주었습니다.

클래스를 반드시 inner anonymous class으로 정의하지 않아야합니다. 나는 그것을 내부라고 정의했으나 이름이 붙여졌고 또한 효과가 있었다.

트릭은 리스너 인스턴스 필드로 선언해야한다 :

private LocationListener listener; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    //snip 
    locationManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE); 
    listener = new MyLocationListener(SomeActivity.this); 
    locationManager.requestLocationUpdates(provider, 1000, 0, listener); 
} 

그렇지 않으면 가비지 컬렉션과 같이 정의 된 경우, 제 1 회 실행 후가 될 것입니다 :

locationManager.requestLocationUpdates(provider, 1000, 0, new MyLocationListener()); 

그것은 솔루션의 절반이었습니다. 나머지 부분 - 약 minTime -은 해결되지 않은 채로 남아 있습니다. 어쩌면 그것은 에뮬레이터와 관련이 있습니다 ... 길을 찾 자마자 빠진 부분을 게시 할 것입니다.

UPDATE : 가 실제 장치에서 minInterval는 좌표가 변경되었을 경우 리스너, 화재에 상관없이 발생할 것으로 보인다 여부

관련 문제