2013-06-06 3 views
1

Я пытаюсь измерить, насколько я путешествую, когда нажата кнопка запуска, и прекратите измерение после нажатия кнопки остановки. Для этого (1) Я уже настроил диспетчер местоположений, место прослушивания и объект местоположения, и они уже работают хорошо, прежде чем я поставлю onClick Listener. (2) После того, как я установил onClickListener, GPS не обновляется регулярно. Кто-нибудь знает, как регулярно обновлять GPS после запуска события? Следующий мой код.Как регулярно обновлять Android-планшет на экране?

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. 
    } ; 
} 
+0

Непосредственно связано с вашей проблемой; но обычно вы должны включать GPS в onStart() или onResume() и отключать его в onPause() или onStop(). Включение его в onCreate() приведет к тому, что он будет работать все время, убивая батарею. –

ответ

1

Я предполагаю, что вы хотите реализовать это: 1) Пользователь нажимает кнопку Пуск и местоположение начинает получать обновленный с помощью GPS. 2) Расстояние продолжает обновляться до тех пор, пока пользователь не нажимает Stop 3) On Остановить местоположение, и расстояние больше не обновляется.

Для 1): вы должны зарегистрировать приемник местоположения в методе onClick() кнопки «Пуск». В настоящее время вы регистрируете прослушиватель местоположений в onCreate(). Таким образом, нажатие кнопки «Пуск» ничего не делает (кроме отображения расстояния в текстовом представлении showData).

Для 2): Пусть расчет расстояния будет в методе onLocationChanged(). Вы должны сдвинуть свой отображаемый код, т. Е. Настроить расстояние в текстовом представлении showData на метод onLocationChanged(). В настоящее время ваш код обновляет текст showData с вычисленным расстоянием только при нажатии кнопки «Пуск».

Для 3): При нажатии кнопки OnClick() вы должны отменить регистрацию приемника местоположения, чтобы вы не запрашивали обновления местоположения (когда пользователь хочет остановиться).

locationManager.removeUpdates(this); 
+0

Спасибо, что именно то, что я хочу сделать. Тем не менее, я новичок на Android. Не могли бы вы объяснить мне, как регистрировать приемника в OnClick? Потому что, когда я перемещаю приемник местоположения из onCreate в onClick, он дает мне ошибку с «requestLocationUpdate», вот мой код. –

+0

переместить locationManager.requestLocationUpdates() из OnCreate в OnClick из Start Button –

+0

публичного недействительного OnClick (окончательный View V) { переключателя (v.getId()) { случая R.id.startButton: { startGPS = истинный ; // Это для местоположения locationManager = (LocationManager) getSystemService (LOCATION_SERVICE); Местонахождение = locationManager.getLastKnownLocation (LocationManager.GPS_PROVIDER); locationManager.requestLocationUpdates (locationManager.GPS_PROVIDER, 0,0, это); showData.setText (Double.toString (метр * 3.28)); ломать; } –

Смежные вопросы