2017-07-31 48 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