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