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 回答