Android 我应该从哪个类调用locationManger.removeUpdates()?

Android 我应该从哪个类调用locationManger.removeUpdates()?,android,gps,locationlistener,Android,Gps,Locationlistener,因此,我有一个Android应用程序,它向LocationManager类请求GPS。 我有一个想使用该数据的活动,还有一个实现LocationListener的自定义类。 我已经编写了一些自定义方法来将GPS值返回给我的另一个类 目前,我正在请求并发布我的活动类中的位置更新,而不是位置侦听器类的实现。。。我认为这是正确的方法,但我只是想获得有关生命周期的任何反馈,等等(实现LocationListener的类不是活动,所以我甚至不认为我可以调用onPause()等) 这是活动: package

因此,我有一个Android应用程序,它向
LocationManager
类请求GPS。 我有一个想使用该数据的
活动
,还有一个实现
LocationListener
的自定义类。 我已经编写了一些自定义方法来将GPS值返回给我的另一个类

目前,我正在请求并发布我的
活动
类中的位置更新,而不是
位置侦听器
类的实现。。。我认为这是正确的方法,但我只是想获得有关生命周期的任何反馈,等等(实现
LocationListener
的类不是
活动,所以我甚至不认为我可以调用
onPause()
等)

这是
活动

package com.jessescott.sonicity;

import android.app.Activity;
import android.content.Context;
import android.view.View;
import android.widget.TextView;
import android.location.Location;
import android.location.LocationManager;
import android.location.LocationListener;


public class PlayActivity extends Activity {

    // GLOBALS
    private static final String TAG = "SoniCity";
    LocationManager locationManager;
    MyLocationListener locationListener;

    TextView latitude, longitude;
    TextView ActualLatitude, ActualLongitude;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.play_layout);

        // GPS
        locationListener = new MyLocationListener(this);    


        // TextViews
        latitude  = (TextView) findViewById(R.id.Latitude);
        longitude = (TextView) findViewById(R.id.Longitude);

        ActualLatitude  = (TextView) findViewById(R.id.ActualLat);
        ActualLatitude.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.v(TAG, "Asking For New Latitude");
                ActualLatitude.setText(locationListener.getCurrentLatitude());  
            }
        });

        ActualLongitude = (TextView) findViewById(R.id.ActualLon);
        ActualLongitude.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.v(TAG, "Asking For New Latitude");
                ActualLongitude.setText(locationListener.getCurrentLongitude());    
            }
        });

    }

    @Override
    protected void onPause() {
        super.onPause();
        // Stop GPS
        locationManager.removeUpdates(locationListener);
        locationManager = null;
    }

    @Override
    protected void onResume() {
        super.onResume();
        locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 5, locationListener);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }

} /*  */
。。。这是
LocationListener
实现:

 package com.jessescott.sonicity;

    import android.content.Context;
    import android.location.Location;
    import android.location.LocationListener;
    import android.os.Bundle;
    import android.util.Log;

    class MyLocationListener implements LocationListener {

      private static final String TAG = "SoniCity";
      float currentLatitude     = 0;
      float currentLongitude    = 0;

      public MyLocationListener(Context context) {
            super();
      }

      // Define all LocationListener methods
      public void onLocationChanged(Location location) {
        currentLatitude  = (float)location.getLatitude();
        currentLongitude = (float)location.getLongitude();


      }

      public void onProviderDisabled (String provider) { 
        Log.v(TAG, "Provider is " + provider);
      }

      public void onProviderEnabled (String provider) { 
        Log.v(TAG, "Provider is " + provider);
      }

      public void onStatusChanged (String provider, int status, Bundle extras) {
        Log.v(TAG, "Status is " + status);
      }

      // Custom Methods

      public String getCurrentLatitude() {
          String lat = Float.toString(currentLatitude);
          return lat;
      }

      public String getCurrentLongitude() {
          String lon = Float.toString(currentLongitude);
          return lon;
      }

    } /* */

我想,因为我已经将它移动到了一个单独的类(它们以前是同一个类),所以我只想确保我在正确的位置调用了th request/remove。

我没有详细查看您的代码,但从我所看到的情况来看,它看起来不错
onResume()
是注册监听器的正确位置,
onPause()
是取消注册监听器的正确位置,以便优化电池寿命等


一个需要考虑的事情:

  • 对于一个健壮的应用程序,确保你注意从代码中得到的信息> OnStasuStutials<代码>,<代码>一个PosivEnabule和<代码>一个PosivalEngulaby。我在STACKOFFROW网站上看到了各种各样的问题,其中的答案是关注状态变化等。
  • ,为了更好地估计位置,你可以考虑使用位置。精度值,因为GPS位置估计的精度可以改变。一分钟后,它们可能非常准确,但随后可见卫星发生变化,准确度可能会突然降低很多。在我的应用程序中,我使用了一个简单的卡尔曼滤波器来实现这一点,我在回答这个问题时发布了它的代码。
  • 我没有详细查看您的代码,但从我所看到的情况来看,我觉得它很好
    onResume()
    是注册监听器的正确位置,
    onPause()
    是取消注册监听器的正确位置,以便优化电池寿命等


    一个需要考虑的事情:

  • 对于一个健壮的应用程序,确保你注意从代码中得到的信息> OnStasuStutials<代码>,<代码>一个PosivEnabule和<代码>一个PosivalEngulaby。我在STACKOFFROW网站上看到了各种各样的问题,其中的答案是关注状态变化等。
  • ,为了更好地估计位置,你可以考虑使用位置。精度值,因为GPS位置估计的精度可以改变。一分钟后,它们可能非常准确,但随后可见卫星发生变化,准确度可能会突然降低很多。在我的应用程序中,我使用了一个简单的卡尔曼滤波器,并在回答问题时发布了它的代码。
  • 没问题!如果你觉得我的答案有用,你甚至可以把它标记为有用和/或答案:-)。没问题!如果你觉得我的答案有用,你甚至可以把它标记为有用和/或答案:-)。