1

開始ボタンをクリックしたときにどれだけ移動したかを測定し、停止ボタンをクリックした後に測定を停止しようとしています。そのためには、(1) ロケーション マネージャー、ロケーション リッスン、およびロケーション オブジェクトを既にセットアップしており、onClick リスナーを配置する前に、それらは既に正常に機能しています。(2) onClickListener を設定したら、GPS が定期的に更新されなくなりました。イベントトリガー後にGPSを定期的に更新する方法を知っている人はいますか? 以下は私のコードです。

public class MeasureDistance extends Activity implements LocationListener {
    TextView showData;
    Button start;
    Button stop;
    double longitutde;
    double previousLongitude;
    Location previous;
    Location current;
    LocationListener myListener;
    Location location;
    Location previousLocation = null;
    LocationManager locationManager;
    static double meter = 0;
    double distance = 0;
    boolean startGPS = false;
    double diff;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {   //This is for the UI
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        showData = (TextView)findViewById(R.id.showText);
        start = (Button)findViewById(R.id.startButton);
        stop = (Button)findViewById(R.id.stopButton);

        start.setOnClickListener(onClickListener);
        stop.setOnClickListener(onClickListener);
        //This is for the Location
        locationManager = (LocationManager)getSystemService(LOCATION_SERVICE);
        location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

        locationManager.requestLocationUpdates(locationManager.GPS_PROVIDER,0,0,this);
    }

    public void onLocationChanged(Location location)
    {
        if((previousLocation != location) && (previousLocation != null) &&(startGPS == true))
        {
            distance = location.distanceTo(previousLocation);
            meter = distance + meter;
        }
        previousLocation = location;
    }

    public void onStatusChanged(String provider, int status, Bundle extras) {
        //To change body of implemented methods use File | Settings | File Templates.
    }

    public void onProviderEnabled(String provider) {
        //To change body of implemented methods use File | Settings | File Templates.
    }

    public void onProviderDisabled(String provider) {
        //To change body of implemented methods use File | Settings | File Templates.
    }

    public View.OnClickListener onClickListener = new View.OnClickListener()
    {
        public void onClick(final View v){
            switch(v.getId())
            {
                case R.id.startButton:
                {
                    startGPS = true;
                    showData.setText(Double.toString(meter * 3.28));
                    break;
                }
                case R.id.stopButton:
                {
                    showData.setText("Stop Button is Click");
                    break;
                }
            }
        }
        //To change body of implemented methods use File | Settings | File Templates.
    } ;
}
4

1 に答える 1

1

実装したいのは次のとおりだと思います:1)ユーザーがスタートを押すと、GPSを使用して場所が更新され始めます。2) ユーザーが停止ボタンを押さない限り、距離は更新され続けます。3) 停止すると、場所と距離は更新されなくなります。

1) の場合: スタート ボタンの onClick() メソッドにロケーション リスナーを登録する必要があります。現在、onCreate() でロケーション リスナーを登録しています。したがって、[開始] ボタンを押しても何も起こりません (showData テキストビューに距離を表示する以外は)。

2) の場合: 距離計算は onLocationChanged() メソッドで行います。表示コードを変更する必要があります。つまり、showData textview の距離を onLocationChanged() メソッドに設定する必要があります。現在、コードは、[開始] ボタンをクリックしたときにのみ、計算された距離で showData テキストを更新します。

3) の場合: 停止ボタン onClick() メソッドでは、(ユーザーが停止したい場合) 位置の更新を要求しないように、位置リスナーの登録を解除する必要があります。

locationManager.removeUpdates(this);
于 2013-06-06T20:06:07.427 に答える