Служба определения местоположения onProviderEnabled никогда не вызывается
У меня есть служба для обновления местоположения в моем приложении. Когда я запускаю свое приложение с отключенным GPS, возвращаюсь в меню Android и включаю GPS, и, наконец, возвращаюсь к моему приложению (служба не была уничтожена), onProviderEnabled никогда не вызывается. Кто-нибудь может помочь?
ОБНОВЛЕНИЕ: если я перезапускаю приложение, провайдер включается. Только onProviderEnabled не вызывается...
В каждой деятельности, в которой мне нужно местоположение, я делаю
super.onCreate(savedInstanceState);
//....
// Bind location service
bindService(new Intent(this, LocationService.class), mConnection, Context.BIND_AUTO_CREATE);
//....
а также
@Override
protected void onDestroy() {
super.onDestroy();
// Unbind LocationService
ItemDetail.this.unbindService(mConnection);
}
и сервис
public class LocationService extends Service implements LocationListener {
LocationManager locationManager;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
// Update after minimum 5 minutes and if user has moved at least 100 meters.
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5 * 60 * 1000, 100, this);
Location loc = getBestLocation(locationManager);
if(loc!=null){
GlobalVars.lat = (Double) (loc.getLatitude());
GlobalVars.lng = (Double) (loc.getLongitude());
}
}
}
public void onLocationChanged(Location loc) {
GlobalVars.lat = (Double) (loc.getLatitude());
GlobalVars.lng = (Double) (loc.getLongitude());
}
public static Location getBestLocation(LocationManager locationManager) {
Location location_gps = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
Location location_network = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
// If both are available, get the most recent
if(location_gps!=null && location_network !=null) {
return (location_gps.getTime() > location_network.getTime())?location_gps:location_network;
}
else if(location_gps==null && location_network ==null){
return null;
}
else
return (location_gps==null)?location_network:location_gps;
}
public void onProviderEnabled(String s){
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5 * 60 * 1000, 100, this);
}
public void onProviderDisabled(String s){
locationManager.removeUpdates(this);
GlobalVars.lat = null;
GlobalVars.lng = null;
}
public void onStatusChanged(String s, int i, Bundle b){}
@Override
public void onDestroy() {
locationManager.removeUpdates(this);
}
}
1 ответ
В вашем LocationService.onCreate()
Метод ваш код проверяет, отключен ли поставщик GPS.
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){...}
Но вы только начинаете подписку, если она уже включена. Обратите внимание, что ваш слушатель никогда не будет зарегистрирован на LocationManager
и не будет получать никаких обновлений о том, что провайдеры местоположения отключены или включены. Скорее поменяй onCreate()
метод всегда вызывать
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5 * 60 * 1000, 100, this);