Je développe une application qui obtient la position du téléphone portable toute la journée en 6 et 6 minutes dans un service, cela fonctionne bien mais parfois la méthode OnLocationChanged
de l'auditeur du fournisseur de réseau arrête d'être appelé, et je ne sais pas pourquoi.
Pour une raison quelconque, il n'est plus appelé, mais le fournisseur est activé et la liste fonctionne, lorsque j'active ou désactive le fournisseur manuellement, onProviderEnabled
et onProviderDisabled
s'appelle.
Cela arrive juste avec NETWORK_PROVIDER
le GPS_PROVIDER
fonctionne bien.
Auditeur :
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;
}
};
Code :
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");
}
}
Rapport dans un Samsung Galaxy S3 :
Je reçois toujours "Sem sinal" pendant 4 jours d'affilée.
Ce problème s'est déjà produit avec le Galaxy Y et le LG Optimus l5.
J'ai fait un autre test pour voir si d'autres applications ont obtenu les positions NET, et j'ai découvert qu'ils passent pour le même problème, ils ne peuvent pas obtenir la position NET juste le GetLastknowLocation ; pour tester que j'ai utilisé un Galaxy S3 avec ce problème, et j'ai désactivé le fournisseur GPS. (Testé dans Cerberus).
Je n'ai pas trouvé d'explication à la raison pour laquelle l'auditeur de NETWORKSLOCATIONS cesse de donner des positions, mais c'est peut-être parce qu'il ne devrait pas fonctionner pendant 2 ou 3 jours sans arrêt.
J'ai fait quelques tests avec d'autres applications pour voir si ce problème ne concerne que mon application, et j'ai découvert qu'ils ont le même problème, comme dans Cerberus par exemple :
J'ai désactivé le fournisseur GPS dans un téléphone portable (Galaxy S3) avec le problème "Sem sinal", jetez un oeil :
Mon rapport :
Et le rapport de Cerberus (empreinte prise le 14/05/2013) :
Mais lorsque j'ai ouvert Google Maps, il semble fonctionner correctement. J'ai essayé de me déplacer à une certaine distance pour voir s'il allait afficher l'image. GetLastknowLocation
Mais non, Google Maps m'a placé au bon endroit à ce moment-là. J'ai donc réalisé que Google Maps utilisait motionevent pour me déplacer sur la carte ;
Et aussi imprimer le journal de Google Maps pour obtenir NetWorkProvider :
Cas normal :
Cas semi-final :
0 votes
C'est parce que le fournisseur de réseau ne fournit pas votre position mais la position de la tour/cellule BT à la place. Je peux me tromper mais je pense que si vous vous déplacez suffisamment, vous allez probablement attraper une autre tour/cellule BT et vous obtiendrez une nouvelle localisation dans cet auditeur de réseau.
0 votes
J'ai déjà pensé à cela, et j'ai essayé de le déplacer de 2000 mètres + mais sans succès, si je redémarre le téléphone cellulaire l'application fonctionne normalement pendant 4 ou 3 jours, dans certains appareils ce problème n'est jamais arrivé. J'ai eu un Galaxy S3 avec ce problème pendant 2 jours d'affilée, et il n'a pas obtenu une seule position nette, juste le GPS.
0 votes
Il semble que le fournisseur NetworkLocation de l'appareil soit cassé J'ai également rencontré le même genre de problème sur certains appareils HTC, puis j'ai cherché sur le net le problème du GPS HTC et j'ai trouvé beaucoup d'utilisateurs se plaignant que le GPS ne fonctionne pas correctement .
0 votes
@Akhil Je pense que ce n'est pas un problème d'appareil, car cela s'est produit avec d'autres téléphones auparavant.