Я разрабатываю приложение, которое получает позицию сотового телефона весь день в течение 6 и 6 минут в службе, оно работает нормально, но иногда метод OnLocationChanged
поставщика сети слушатель перестает быть вызванным, и я не знаю почему.LocationListener NETWORK_PROVIDER разрешен, но onLocationChanged никогда не называется
Это почему-то перестает быть вызванным, но провайдер включен, а Листер работает, когда я включаю или выключаю Поставщика вручную, вызывается 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:
все еще получаю "Сем SINAL" в течение 4 дней подряд.
Этот вопрос уже произошло с Galaxy Y и LG Optimus L5
Я сделал еще один тест, чтобы увидеть, если другие мки получили позиции NET, и я обнаружил, что они проходят по той же проблеме, они могут» t получить позицию NET только через GetLastknowLocation; чтобы проверить, что я использовал Galaxy S3 с этой проблемой, и я отключил поставщик GPS. (Протестировано в Цербере).
Я не мог найти объяснений, почему слушатель NETWORKSLOCATIONS останавливает предоставление позиций, но может быть, потому что он не должен работать в течение 2 или 3 дней без остановки.
Я сделал несколько тестов с другими мки, чтобы увидеть, если этот вопрос просто происходит с моим Aplication, и я обнаружил, что они проходят по той же проблемой, как и в Cerberus, например:
Я отключить GPS Provider в мобильный телефон (Galaxy S3) с "SINAL СЭМ" проблемы, посмотрите:
Мой отчет:
И Cerberus (печать взяты в 14/05/2013) сообщают:
Но когда я открыл Карты Google, он, похоже, работает нормально, я попытался переместиться на дистанционное место, чтобы посмотреть, будет ли он показывать GetLastknowLocation
, но нет, карты google помещают меня в нужное место в данный момент, поэтому Я понял, что Google Maps использовал motionevent для перемещения меня на карту;
А также напечатать Логарифм Google Maps, чтобы получить NetworkProvider:
Нормальный случай:
Сем Sinal случай:
Это потому, что поставщик сети не предоставляет вам не местоположение, а место ячейки башни/bts. Возможно, я ошибаюсь, но думаю, что если вы будете двигаться достаточно, вы, вероятно, поймаете другую ячейку tower/bts, и вы получите новое место в этом сетевом прослушивателе. –
У меня уже было это, и я попытался переместить его на 2000 метров +, но без успеха, если я перезагружу сотовый телефон, приложение обычно работает в течение 4 или 3 дней, в каком-то устройстве эта проблема так и не произошла. Я получил Galaxy S3 с этой проблемой в течение 2 дней подряд, и он не получил ни одной позиции в сети, просто GPS. –
Похоже, что устройство NetworkLocation Provider сломано. Я также сталкивался с подобной проблемой на некоторых устройствах HTC, а затем искал сеть для проблемы с HTC GPS и обнаружил, что многие пользователи жалуются на то, что GPS не работает должным образом. – Akhil