2011-08-05 12 views
1

私は、アプリケーションの起動時(GPSサービスが開始されたとき)に進捗ダイアログを表示させたいアプリケーションを開発中です。私は、GPSサービスが有効な位置で返ってきたときに進捗ダイアログを終了したい。 私は別のスレッドを開始しなければならないことは分かっていますが、どうやってそれを行うのかは分かりません。 私が持っている:私のonCreate()GPSアプリケーションの開始時に進捗ダイアログを表示

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 
       1000, 10, this); 

を。

public void onLocationChanged(Location location)は、データが更新される場所です。

答えて

1

本当の問題は、実際に有効なポジションをいつ取得するのかわからないことです。この場合、進行状況バーを表示するのは難しいでしょう。あなたは遠くにいます。

「GPS位置の取得」というメッセージを表示し、可能であればGPS衛星が回転するある種のアニメーション、GPS衛星とGPS受信機の間を移動する「信号」、またはだからあなたのGUIのスレッドでアニメーションをレンダリングすると、あなたが同時に意志

Acquiring GPS Signal Acquiring More GPS Signal Maybe a Flashing Thingy

:あなたはGPS信号を取得する(しかし、見て、それをより快適にする)していることを示すGPSアイコンを点滅GPS信号を取得する別のスレッドを実行します。あなたは、コールバックメソッド内

while(!positionAcquired) 
{ 
    renderAnimation(); 
} 

:あなたのGUIのスレッドで

class GPSPositionGetter extends Runnable 
{ 
    private LocationManager _locationManager; 
    GPSPositionGetter(LocationManager locationManager) 
    public run() 
    { 
     _locationManager.requestLocationUpdates(...); 
    } 
} 

Thread t = new Thread(new GPSPositionGetter(locationManager)); 
t.start(); 

は、あなたがこれを行う新しいスレッドを開始するには:あなたが取得するとGPSを使用して、レンダリングを終了します知らせます:あなたがとしてpositionAcquiredを宣言する必要があり

public onLocationChanged(Location location) 
{ 
    if(IsValid(location)) 
    { 
     positionAcquired = true; 
    } 
} 

注意可視性を確保し、スレッドのローカルメモリにキャッシュされないようにするために、を使用します。

P.S.コードはちょうどあなたに何をすべきかの大まかなアイデアを与えることです。 (ExecutorServiceのような)もっと洗練されたソリューションがありますが、一般的なアプローチはそれほど違いはありません。

関連する問題