Я разрабатываю приложение, которое получает позицию сотового телефона весь день в течение 6 и 6 минут в службе, оно работает нормально, но иногда метод OnLocationChanged
слушателя сетевого провайдера перестает быть вызванным, и я Не знаю почему.
По какой-то причине перестает быть вызванным, но поставщик включен, и Lister работает, когда я разрешаю или отключаю Поставщика вручную, вызывается onProviderEnabled
и onProviderDisabled
.
Это просто происходит с NETWORK_PROVIDER
, GPS_PROVIDER
работает хорошо.
СЛУШАТЕЛЬ:
LocationListener locationListenerGPS = new LocationListener() {
// @Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO locationListenerGPS onStatusChanged
Log.d(TAG, "Provedor trocado");
}
// @Override
public void onProviderEnabled(String provider) {
Log.w(TAG, "PROVEDOR " + provider + " HABILITADO!");
}
// @Override
public void onProviderDisabled(String provider) {
Log.w(TAG, "PROVEDOR " + provider + " DESABILITADO!");
}
// @Override
public void onLocationChanged(Location location) {
longitudeGPS = location.getLongitude();
latitudeGPS = location.getLatitude();
Log.d(TAG,"LocationChangedGPS LAT: "+latitudeGPS+" longi: "+longitudeGPS);
gpsComSinal = true;
}
};
LocationListener locationListenerNET = new LocationListener() {
// @Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO locationListenerNET onStatusChanged
Log.d("Contele", "Provedor foi mudado");
}
// @Override
public void onProviderEnabled(String provider) {
Log.i(TAG, "PROVEDOR " + provider + " HABILITADO!");
}
// @Override
public void onProviderDisabled(String provider) {
Log.i(TAG, "PROVEDOR " + provider + " DESABILITADO!");
}
@Override
public void onLocationChanged(Location location) {
longitudeNET = location.getLongitude();
latitudeNET = location.getLatitude();
Log.d(TAG,"LocationChangedNET LAT: "+latitudeNET+" longi: "+longitudeNET);
netComSinal = true;
}
};
код:
public void initProviders() {
localizacao = (LocationManager) getApplicationContext().getSystemService(LOCATION_SERVICE);
localizacao.removeUpdates(locationListenerNET);
localizacao.removeUpdates(locationListenerGPS);
localizacao.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,
locationListenerGPS);
localizacao.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0,
0, locationListenerNET);
Log.d(TAG,"EsperaGPS");
Handler esperaGPS = new Handler() {
public void handleMessage(Message msg) {
requestGPS();
}
};
Message msgEsperaGPS = Message.obtain();
msgEsperaGPS.what = 0;
esperaGPS.sendMessageDelayed(msgEsperaGPS, 35000);
}
public void requestGPS() {
if (gpsComSinal) {
Log.d(TAG,"PEGO SINAL DE GPS");
rastreio = "GPS";
longitude = longitudeGPS;
latitude = latitudeGPS;
Log.d(TAG, "Utilizando provedor GPS.");
localizacao.removeUpdates(locationListenerGPS);
localizacao.removeUpdates(locationListenerNET);
} else {
Log.d(TAG,"Sem GPS... pegar NEt");
// Setando os valores para usar network
localizacao.removeUpdates(locationListenerGPS);
localizacao.removeUpdates(locationListenerNET);
localizacao
.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
0, 0, locationListenerNET);
Log.d(TAG,"EsperaNET");
requestNET();
}
}
public void requestNET() {
if (netComSinal) {
Log.d(TAG,"PEGO SINAL DE NET");
rastreio = "NET";
longitude = longitudeNET;
latitude = latitudeNET;
Log.d(TAG, "Utilizando provedor NET.");
localizacao.removeUpdates(locationListenerNET);
} else {
localizacao.removeUpdates(locationListenerGPS);
localizacao.removeUpdates(locationListenerNET);
Log.d(TAG,"Sem sinal");
}
}
Отчет в Samsung Galaxy S3:
По-прежнему получая "Sem-sinal" в течение 4 дней подряд.
Эта проблема уже произошла с Galaxy Y и LG Optimus l5
Я сделал еще один тест, чтобы узнать, получили ли другие приложения позиции NET, и я обнаружил, что они передаются по той же самой проблеме, они не могут получить позицию NET только для GetLastknowLocation; чтобы проверить, что я использовал Galaxy S3 с этой проблемой, и я отключил поставщик GPS. (Протестировано в Цербере).
Я не мог найти объяснения, почему слушатель NETWORKSLOCATIONS перестает давать позиции, но может быть, потому что он не должен работать в течение 2 или 3 дней без остановки.
Я проделал некоторые тесты с другими приложениями, чтобы проверить, не возникает ли эта проблема с моим назначением, и я обнаружил, что они передаются по одной и той же проблеме, например, в Cerberus:
Я отключу GPS-провайдера в мобильном телефоне (Galaxy S3) с проблемой "Sem-sinal", посмотрите:
Мой отчет:
И Cerberus (печать, сделанная в 14/05/2013):
Но когда я открыл Google Maps, кажется, что он работает нормально, я попытался переместиться на дистанционное место, чтобы увидеть, будет ли отображаться GetLastknowLocation
, но нет, карты google помещают меня в нужное место в данный момент, поэтому я понял, что Google Maps использовал motionevent для перемещения меня на карту;
И также распечатайте журнал Карт Google, чтобы получить NetWorkProvider:
Обычный случай:
Семейный случай: