2017-07-31 25 views
1

Androidでプログラミングを開始しましたが、何かをバックグラウンドで継続的に実行することに問題があるようです。 これは私がGPS.Itを使用して、デバイスの速度を表示することができますので、それは1秒ごとにアプリケーションの開始時に開始し、基本的にそれを実行したい私は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"; 
} 

で持っているコードは本当に簡単でなければなりませんしかし、私はちょうど方法を知らない。 多くの感謝!

答えて

0

そのタスクは一度実行され、位置を取得して終了します。あなたは、外部から各秒、それを起動し、あなたがループを作成し、遅延を追加する必要がない限り:、最後に

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

    runGPS = true; 
    currentGPS = task(); 

    return true; 
} 

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

    runGPS = false; 

    return true; 
} 

//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; 
} 

また、私は、タスクを開始/停止するために2つのメソッドを作成することをお勧めします固定の遅延を待つ代わりに、毎秒正確に更新する必要がある場合は、ストップウォッチを作成し、GPSデータを読み取るのにかかる時間を測定し、遅延を1000 - stopWatch.EllapsedMillisecondsにする必要があります。

関連する問題