Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
removeUpdates()赢得';不要停止Android的GPS。将位置管理器设置为空会导致应用程序崩溃_Android_Gps - Fatal编程技术网

removeUpdates()赢得';不要停止Android的GPS。将位置管理器设置为空会导致应用程序崩溃

removeUpdates()赢得';不要停止Android的GPS。将位置管理器设置为空会导致应用程序崩溃,android,gps,Android,Gps,以下是在我的服务中获取GPS的代码。当我设置keepCyclingFlag=false时,我想停止GPS。我在我的片段中运行了这个定位服务,它工作得非常好。然而,当我切换到使用服务时,这不会停止呼叫GPS。当我尝试将位置管理器或侦听器设置为false时,它导致我的应用程序崩溃,出现空指针异常。我已经找过了,我迷路了。任何帮助都将不胜感激 谢谢。 代码 public void getUserLocation() { user = null; lm = (Locat

以下是在我的服务中获取
GPS
的代码。当我设置
keepCyclingFlag=false
时,我想停止
GPS
。我在我的片段中运行了这个定位服务,它工作得非常好。然而,当我切换到使用服务时,这不会停止呼叫
GPS
。当我尝试将位置管理器或侦听器设置为false时,它导致我的应用程序崩溃,出现
空指针异常
。我已经找过了,我迷路了。任何帮助都将不胜感激

谢谢。

代码

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);


    }
public void getUserLocation(){
user=null;
lm=(LocationManager)getSystemService(
这项服务包括:;
locationListener=新locationListener(){
@凌驾
已更改位置上的公共无效(位置){
if(location.getAccurance()<100){
gpsSignalReceived=真;
lat=位置。getLatitude();
lon=location.getLongitude();
LatLng objLatLon=新的LatLng(lat,lon);
如果(!keepCyclingFlag){//如果此标志为false,则停止GPS
lm.RemoveUpdate(locationListener);
lm=零;
Log.d(“byi”,“GPS应停止”);
}
}
}
@凌驾
公共无效onProviderDisabled(字符串提供程序){
//TODO自动生成的方法存根
}
@凌驾
公共无效onProviderEnabled(字符串提供程序){
//TODO自动生成的方法存根
}
@凌驾
public void onStatusChanged(字符串提供程序,int状态,
捆绑(附加){
//TODO自动生成的方法存根
}
};
bestProvider=lm.getBestProvider(标准,true);
//Log.d(“BYI”,“Providers:+lm.getProviders(true));
//lm.RequestLocationUpdate(bestProvider,0,0,locationListener);
lm.requestLocationUpdate(lm.NETWORK_PROVIDER,0,0,locationListener);
lm.RequestLocationUpdate(lm.GPS_提供程序,0,0,locationListener);
}

我认为您注册同一个侦听器两次,有点滥用LocationManager。 我会尝试两件事:

  • 注册两个不同的侦听器实例
  • 使用同一实例调用removeUpdates两次

  • 我很笨,不小心给服务打了两次电话。在经历了很多头痛之后,我解决了这个问题,与场地经理没有任何关系。然而,为了使我的代码更简洁,我做了#1。创建了一个实现LocationListener的类,然后创建了该类的两个实例。谢谢