removeUpdates()不会为Android停止GPS。将位置管理器设置为null会导致应用崩溃

时间:2014-06-10 07:43:49

标签: android gps

以下是我的服务中获取GPS的代码。当我设置keepCyclingFlag = false时,我想停止GPS。我在我的片段中运行了这个位置服务,它运行得很好。但是,当我切换到使用服务时,这不会停止调用GPS。当我尝试将位置管理器或侦听器设置为false时,它会使用nullpointer exception使我的应用程序崩溃。我已经搜索过并迷路了。任何帮助将不胜感激。

感谢。

CODE

public void getUserLocation() {

        user = null;
        lm = (LocationManager) getSystemService(
                this.LOCATION_SERVICE);



        locationListener = new LocationListener() {

            @Override
            public void onLocationChanged(Location location) {

                if (location.getAccuracy() < 100) {
                    gpsSignalReceived = true;

                    lat = location.getLatitude();
                    lon = location.getLongitude();


                    LatLng objLatLon = new LatLng(lat, lon);



                if (!keepCyclingFlag){//if this flag is false then stop the GPS
                    lm.removeUpdates(locationListener);

                    lm = null;
                    Log.d("byi", "GPS SHOULD STOP");
                }
                }
            }

            @Override
            public void onProviderDisabled(String provider) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onProviderEnabled(String provider) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onStatusChanged(String provider, int status,
                    Bundle extras) {
                // TODO Auto-generated method stub

            }

        };

        bestProvider = lm.getBestProvider(criteria, true);

        //Log.d("BYI", "Providers: " + lm.getProviders(true));
                //lm.requestLocationUpdates(bestProvider, 0, 0, locationListener);
                lm.requestLocationUpdates(lm.NETWORK_PROVIDER, 0, 0,locationListener);
                lm.requestLocationUpdates(lm.GPS_PROVIDER, 0, 0,locationListener);


    }

1 个答案:

答案 0 :(得分:0)

我认为你只是通过两次注册同一个监听器来滥用LocationManager。 我会尝试两件事:

  1. 注册2个不同的侦听器实例。
  2. 使用相同的实例调用removeUpdates两次。