如何停止位置经理?

时间:2010-11-16 18:14:19

标签: android gps locationmanager

不知道为什么,但有时候LOCManager在关闭申请后仍然有效。

我在一个Activity中调用onCreate-Methode中的startGPS()(只有一个,我称之为StartActivity)。

protected void startGPS()
{    
 try
 {           
     lmanager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
     lmanager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
     lmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
 }
 catch(Exception e)
 {
     e.printStackTrace();
 }
}

如果此活动将被销毁(因此,当应用程序将关闭时),我调用endGPS()

public void endGPS()
{

 try
 {           
     lmanager.removeUpdates(this);
     lmanager=null;
 }
 catch(Exception e)
 {
  e.printStackTrace();
 }
}

一些想法,一些建议,我做错了什么?!

6 个答案:

答案 0 :(得分:26)

您应该在方法removeUpdates中调用方法onPause

@Override
protected void onPause() {
    super.onPause();
    locationManager.removeUpdates(this);
    Log.i(TAG, "onPause, done");
}

答案 1 :(得分:12)

您的活动是否可能未被销毁?即:你按下主页按钮。将您的gps开始/结束移至onStartonPause

答案 2 :(得分:8)

模拟器一旦加载就永远不会摆脱GPS图标。因此,在模拟器上,您无法使用GPS图标作为GPS是否仍在运行的测试。但是,在设备上,图标应该消失。

  

我应该使用两个不同的听众吗?

我肯定会的。我不知道removeUpdates()是否会删除这两个请求,或者即使两个请求都注册了单个侦听器。

答案 3 :(得分:2)

我看到这篇帖子已经有一段时间了,但也许它会帮助其他人。我使用:removeUpdates(this),因为我的监听器是我实现de location manager的活动,你需要指出你的监听器。

答案 4 :(得分:2)

我使用:locationManager.removeUpdates(locationListener);它的工作

    @Override
protected void onPause() {
    super.onPause();
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        // TODO: Consider calling
        //    ActivityCompat#requestPermissions
        // here to request the missing permissions, and then overriding
        //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
        //                                          int[] grantResults)
        // to handle the case where the user grants the permission. See the documentation
        // for ActivityCompat#requestPermissions for more details.
        return;
    }


    locationManager.removeUpdates(locationListener);
}

答案 5 :(得分:0)

相当古老的查询,但这对我有用。

       @Override
        public void onStatusChanged(String s, int i, Bundle bundle) {

        mLocationManager.removeUpdates(locationListener);

        }