1

特定の間隔で位置データを取得する Android アプリを作成しようとしています (例: - 5 秒、1 分など)。これが私のコードです:-

            public void onLocationChanged(Location loc) {
            // TODO Auto-generated method stub
            if(loc!=null)
            {   
              //Required Interval
              tInterval =(minInterval*60*1000) + (secInterval)*1000 - 1000;

              //The app also supports interval mode
              RadioButton sel = (RadioButton) findViewById(mode.getCheckedRadioButtonId()); 

              //Code for Manual Functionality
              if(sel.getText().equals(MANUAL_RADIO))
              {
                      Time t = new Time();
                      t.setToNow();
                      db.addLocationAtTime(loc, t);
                      Toast.makeText(getApplicationContext(), "Location Added to Database",Toast.LENGTH_SHORT).show();        
                      locate.removeUpdates(this);

                      b.setText(MANUAL_BUTTON);
                      d.setEnabled(true);
              }

              //Code for Interval functionality
              else if(sel.getText().equals(INTERVAL_RADIO))
              {
                              //count is object of Countdown class which is a Thread object
                              if(count == null)
                              {
                                      //t is a Time object
                                      t.setToNow();
                                      //SQLiteDatabase object for logging Location with Time
                                      db.addLocationAtTime(loc, t);
                                      Toast.makeText(getApplicationContext(), "Location Added to Database",Toast.LENGTH_SHORT).show();
                                      count =  new CountDown( tInterval);
                                      count.start();
                              }

                              else if(count.getState().toString().equals("TERMINATED"))
                              {
                                      t.setToNow();
                                      db.addLocationAtTime(loc, t);
                                      Toast.makeText(getApplicationContext(), "Location Added to Database",Toast.LENGTH_SHORT).show();
                                      count =  new CountDown(tInterval);
                                      count.start();                                  
                              }

                  }
              }
            }

Countdown クラスのコードは次のとおりです。- このクラスは、間隔をアプリに追加するために使用されます。

public class CountDown extends Thread 
{
    long time;
    public CountDown(long duration)
    {
            time = duration;
    }

    public void run()
    {
                    long t1 = System.currentTimeMillis();
                    long t2 = 0;
                    do
                    {
                      t2 = System.currentTimeMillis();      
                    }while(t2 - t1 < time);            
    }
}

問題は、上記のコードを使用すると正確な間隔が得られないことです。私は常に1秒余分に取得しています(式で1000を引いたため)が、この1秒は常に発生しているわけではありません。誰でも私が間違っていることを教えてもらえますか?

4

3 に答える 3

2

LocationManager.requestLocationUpdatesを見て、パラメータに時間間隔を渡すだけです..

LocationManager mLocationManager = (LocationManager).getSystemService(mActivity.LOCATION_SERVICE);
mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 5000, 0, new GeoUpdateHandler());
于 2013-05-22T05:23:03.267 に答える
1

ここではデフォルトの機能を使用する必要があると思いますが、使用する必要はありませんTimer

NETWORK_PROVIDER

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 3000, 0, networkLocationListener);

GPS_PROVIDER

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 0, gpsLocationListener);

ここ 、

minTime(2nd field)      =>   minimum time interval between location updates, in milliseconds
minDistance(3rd field)  =>   minimum distance between location updates, in meters

ドキュメンテーション

于 2013-05-22T05:24:26.233 に答える
0

requestLocationUpdates(...) メソッドの minTime パラメータはまったく何もしないと思います。多くの人が考えているように、距離ベースの更新がより短い間隔で来るのを防ぐようには見えません。Android 2.3.6 から 4.0.4 までのデバイスで試しました。

于 2013-10-28T05:34:49.393 に答える