3

タイムアウトのあるユーザーの位置を見つける必要があるので、次のようなコードを記述しました

  1. LocationListenerを開始します

    GPSLocationListener = new LocationListener() {
    
    @Override
    public void onLocationChanged(Location location) {
             _timerGPSLocation.cancel();
    }
    
    @Override
    public void onStatusChanged(String provider, int status, Bundle b) {
    }
    
    @Override
    public void onProviderEnabled(String s) {
    }
    
    @Override
    public void onProviderDisabled(String s) {
    }
    };
    
     _locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, minDistance, _GPSLocationListener);
    

    `

  2. タイムアウトのタイマーを設定する

    _timerGPSLocation = new Timer();
    _timerGPSLocation.schedule( new TimerTask() {
    
    @Override
    public void run() {
        _locationManager.removeUpdates(_GPSLocationListener);
    }
    
    }, (long)(timeout*1000) ); 
    

これを何度も行うと(座標を読み取ってタイムアウト付きのタイマーを設定しようとすると)、GPSがいくつかの衛星に接続し、正しい位置を取得できると思います。これを行うためのより良い方法はありますか?タイムアウト時に_locationManager.removeUpdatesを呼び出すと、接続されているすべての衛星が削除されますか?

編集:

私の目標は、GPSを定期的に(5分)読み取ることです。GPS読み取りを使用して位置を取得しようとしている間もタイムアウトを設定する必要があります。タイムアウト後にロケーションが読み取られない場合は、ロケーションリスナーを停止する必要があります。私はここのコードリストを使用してこれを達成しました。

ここで私の質問は、LocationListenerがタイムアウトになるために削除すると、GPSと衛星間の「確認応答」が失われるかどうかです。

4

1 に答える 1

1

タイマーのスケジュールは、あなたがやろうとしていることに対してうまくいくでしょう。同様に、ハンドラーを使用して、スレッドまたはLooperオブジェクトを渡すことができます。のように

Handler h = new Handler();

h.postDelayed(Runnable r, long millis);

これを使用して、実行可能ファイル、つまりスレッドまたはルーパーを時間遅延で投稿して、場所の更新をキャンセルすることもできます。

編集:postDelayedは、ランナブルが特定の遅延後に実行されるようにするために使用されます。postAtTimeは、プログラムの特定の稼働時間に投稿します

于 2013-01-19T01:08:28.793 に答える