2012-09-26 68 views
1

我想每隔10秒將一些數據和座標一起發送到遠程服務器。我想,這最匹配的將是locationListener只調用一次

public void onCreate(Bundle savedInstanceState) { 
    //snip 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 0, new SendingLocationListener()); 
} 
在監聽我有以下代碼

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

TrackerNotifierTask使用httpclient在它的doInBackground()方法,所以這是非常簡單的。

現在,如果我開始活動,我可以看到onLocationChanged()得到執行並且數據成功地到達遠程服務器。但只有一次!不管我以後做什麼,更換座標或任何東西,任務都不會被調用。

這是在android中執行此類事情的正確方法,還是我應該使用background-service

回答

0

請參閱this

它按預期的方式工作,當LocationListener實施爲anonymous class

+0

這是否解決問題了嗎? – Shrikant

+0

好吧,與匿名內部類的技巧已經奏效,每個GPS(模擬)更新調用監聽器。另一方面,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); 
} 

否則將垃圾收集第一次運行之後,如果像這樣定義:

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

這是解決方案的一半。另一部分 - 關於minTime - 尚未解決。也許它與模擬器有關......我會盡快找到缺失的部分。

UPDATE: 好像,一個真正的設備上的minInterval似乎導致聽者火,無論是否COORDS改變或不