【问题标题】:onPause to stop LocationManageronPause 停止 LocationManager
【发布时间】:2011-12-18 00:00:14
【问题描述】:

我认为我这样做对吗?

我有这段代码,它通过此处未显示的 MyLocationListener 方法开始查找我的 GPS 位置,该方法有效,但我想停止 locationManager onPause,我认为或每当此活动不是当前活动时,但我无法获得removeUpdates 代码来解决。

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);        
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MINIMUM_TIME_BETWEEN_UPDATES, MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, new MyLocationListener());

然后,

@Override 
public void onPause()
{
    super.onPause();
    locationManager.removeUpdates(MyLocationListener);
}

“MyLocationListener”无法解决,我也尝试过“this”,并且,

locationManager.removeUpdates((LocationListener) this);

这可以解决,但在运行时给我一个“无法暂停”错误。

【问题讨论】:

    标签: android locationmanager


    【解决方案1】:

    我有一个类似的问题: Having some trouble getting my GPS sensor to stop

    您可能需要为启动的和结束的定义一个相同的 LocationListener。

    试试:

    LocationListener mlocListener; 
    

    在类名下,然后在 onCreate 方法中使用以下内容:

    mlocListener = new MyLocationListener();
    

    并将上面的 mlocListener 用于整个班级。

    所以让你的班级看起来像这样:

    public class SomeClass extends Activity {
        LocationManager mlocManager;
        LocationListener mlocListener; 
    
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.screenlayout);
        mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        mlocListener = new MyLocationListener();
        mlocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, mlocListener);
    }
    
    @Override
    public void onPause(){
        mlocManager.removeUpdates(mlocListener);
        super.onPause();
    } 
    

    【讨论】:

    • 感谢 Stagleton,我非常接近,eclipse 以自己的方式告诉我,我需要声明一个类级别的变量,我几乎做到了。这归结为我在学习 Android 的同时努力学习测试东西。再次感谢!
    • 干杯!很高兴听到它起作用了。是的,我需要自己更好地阅读 logcat
    • 如果 Stagleton 在他的示例中将 LocationManager 写为 Singletonclass 会很好 ;)
    【解决方案2】:

    您可以在Activity 类中实现LocationListener 接口:

    public class MyActivity extends Activity implements LocationListener {
    
        private LocationManager mLocMgr;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            mLocMgr = (LocationManager) getSystemService(LOCATION_SERVICE);
            mLocMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 100, this);
    
        }
    
        @Override
        public void onLocationChanged(Location location) {}
        @Override
        public void onProviderDisabled(String arg0) {}
        @Override
        public void onProviderEnabled(String provider) {}
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {}
    
        @Override
        public void onPause() {
            super.onPause();
            mLocMgr.removeUpdates(this);
        }
    }
    

    【讨论】:

      【解决方案3】:

      我认为你只需要切换超级 onPause 调用和 removeUpdates 调用的顺序即可。

      @Override 
      public void onPause()
      {
          locationManager.removeUpdates(MyLocationListener);
          super.onPause();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-19
        • 1970-01-01
        相关资源
        最近更新 更多