2017-07-31 95 views
1

在Android中開始編程,我似乎遇到了在後臺連續運行某些問題。 這是我在MainActivity在背景中每秒計算一次GPS位置?[Xamarin Android]

async Task task() 
{ 
var locator = CrossGeolocator.Current; 
locator.DesiredAccuracy = 50; 
var position = await locator.GetPositionAsync(timeoutMilliseconds: 10000); 
var speed = position.Speed * 3.6; 
speedKmh = speed.ToString() + "km/h"; 
} 

代碼我希望它開始在應用程序的開始,基本上運行它每隔1秒,所以我可以使用GPS.It必須是非常簡單的顯示設備的速度但我只是不知道如何。 非常感謝!

回答

0

該任務將運行一次,獲得位置並完成。除非你啓動它外部每一秒,你需要創建一個循環,並增加延時:

//Defined somewhere else 
bool runGPS = false; 
Task currentGPS = null; 

async Task task() 
{ 
    while(runGPS) 
    { 
     var locator = CrossGeolocator.Current; 
     locator.DesiredAccuracy = 50; 
     var position = await locator.GetPositionAsync(timeoutMilliseconds: 10000); 
     var speed = position.Speed * 3.6; 
     speedKmh = speed.ToString() + "km/h"; 
     await Task.Delay(1000); 
    } 

    currentGPS = null; 
} 

此外,我會建議創建兩個方法來啓動/停止任務:

bool StartGPS() 
{ 
    if(currentGPS != null) 
     return false; 

    runGPS = true; 
    currentGPS = task(); 

    return true; 
} 

bool StopGPS() 
{ 
    if(currentGPS == null) 
     return false; 

    runGPS = false; 

    return true; 
} 

最後,如果您需要每秒精確更新一次,則不必等待固定延遲,您必須創建一個秒錶,測量讀取GPS數據所需的時間並延遲1000 - stopWatch.EllapsedMilliseconds