jeremie57
Membre
- Inscrit
- 17 Juillet 2012
- Messages
- 243
- Points
- 16
- #1
Depuis que Lollipop est arrivé, je suis confronté à un problème de GPS que ce soit sous ROM stock, CM12, CM12.1, CM13 ou LOS14.1...
Si je désactive les données et que j'utilise le GPS, je rencontre beaucoup de pertes de fix GPS.
Ces pertes n'existent pas si:
- Je reste en mode avion (super pour un smartphone... :roll: )
- J'active les données (super quand on est à l'étranger en roaming : j'y suis tous les jours...)
- Je commence la navigation avec les données activées et que je les désactive plus tard (ne fonctionne pas à tous les coups...)
Certains sont confrontés à d'autres problèmes que j'ai énumérés à la fin du tuto dans la partie "Information"
Nous pouvons voir qu'il s'agit d'un problème logiciel seulement en lisant ces 2 suivis de bugs de Google:
Je vous invite à y exprimer votre mécontentement.... Google a l'air très passif sur ce coup là ! :?
J'ai installé l'application RunGPS Pro Trial pour pouvoir extraire les données GPS lors d'un parcours.
Cette application permet de suivre la DOP (dilution de précision).
Pour chaque parcours que je fais, je peux voir que je perds le fix GPS exactement à 5 minutes d'intervalle (voir le graphique "DOP")
J'ai enregistré à chaque fois un rapport de bug et, chaque fois que RunGPS me montre que j'ai perdu le fix GPS, exactement à la même seconde, j'ai une requête réseau :
Plus de détails sont renseignés dans la section "SERVICE com.android.phone / .TelephonyDebugService":
Je peux voir que le type d'APN qui est demandé est "supl". Cela signifie que les données A-GPS sont demandées ! Mais pourquoi ? J'ai déjà un fix !
Le fait de passer la localisation en mode "Appareil uniquement" ne change rien.
Pour éviter de telles demandes, j'ai changé les paramètres du GPS dans le fichier gps.conf.
J'ai désactivé MSA et MSB dans la section "capabilities".
Cela signifie que j'évite les 2 modes de fonctionnement: Mobile station assisted (MSA) et Mobile station based (MSB).
Comme ça, j'évite toute demande de A-GPS ...
Je n'ai plus de perte de fix avec ou sans les données activées.
Cela signifie que lorsque le dispositif envoie une demande de données A-GPS, quel que soit le résultat, le fix est perdu!
Maintenant, pourquoi 5 minutes?
Dans GpsLocationProvider.java, j'ai trouvé ces lignes:
Je n'ai pas connaissances en java, je ne peux donc pas essayer de comprendre ce qui ce passe avec cette variable...
Je pense qu'il y a une erreur dans la programmation et que cette variable n'est pas conditionnée par le fait que le fix du GPS est fait.
Si comme moi, vous voulez changer la valeur de "capabilities" du GPS pour éviter ces problèmes, voici la marche à suivre :
- Avoir un appareil rooté !
- Avoir une application type ES Explorer
- Allez dans "/system/etc" après avoir accordé les droits root à ES Explorer
- Ouvrir le fichier nommé "gps.conf"
- Vous devriez trouver une variable appelée «CAPABILITIES»
- Editez le fichier
Si cette variable est fixée à 0x37 ou 0x35 ou 0x33, modifiez la valeur à 0x31
Si cette variable est fixée à 0x36, modifiez la valeur à 0x30
Si cette variable est fixée à 0x27 ou 0x25 ou 0x23, modifiez la valeur à 0x21
Si cette variable est fixée à 0x26, modifiez la valeur à 0x20
Si cette variable est fixée à 0x17 ou 0x15 ou 0x13, modifiez la valeur à 0x11
Si cette variable est fixée à 0x16, modifiez la valeur à 0x10
Attention, il n'y a pas d'espace entre les chiffres et les lettres !
- Enregistrez le fichier et assurez-vous que les autorisations du fichier sont rw- r-- r-- (propriétés du fichier)
- Redémarrez l'appareil pour réinitialiser cette valeur.
Le premier fix peut prendre entre 30 s et 2 min, mais après cela, il devrait être plus rapide et vous ne devriez pas avoir de pertes.
Ce n'est pas une solution mais un contournement du problème lié à Android !
J'espère que ça va permettre à certains de retrouver les joies du GPS qu'on avait jusqu'à Android Kitkat...
Pour compléter ce Tuto, j'ajoute d'autres pistes:
1 - Certains utilisateurs se plaignent d'un dysfonctionnement du GPS lors de l'utilisation d'applications comme Maps depuis la mise à jour Marshmallow. Ils ne parviennent pas à obtenir un fix.
Visiblement, certaines applications ne parviennent pas à maintenir l'activation du GPS.
On retrouve majoritairement ces témoignages auprès des utilisateurs de produits Motorola.
Dans ce cas, il est possible d'utiliser l'application "GPS Locker" qui permet de forcer l'utilisation du GPS :
Si ce n'est pas efficace, une autre solution consiste à utiliser le widget "GPS Widget" de pixelclash :
Il parvient à maintenir le GPS activé. Il suffit donc d'activer le widget au démarrage d'une sessions GPS.
2 - D'autres utilisateurs de produits HTC ont pu constater qu'il leur fallait désactiver le mode d'économie d'énergie (saver mode) pour que le GPS soit fonctionnel et qu'il ne perde plus constamment le fix...
3 - Marshmallow a permis à Google d'introduire la fonction "Doze" qui permet au système de gérer au mieux la consommation énergétique de chaque application lorsqu'elle n'est pas utilisée.
Certains utilisateurs ont constaté qu'en désactivant cette fonction pour les applications posant un soucis d'utilisation du GPS, leurs problèmes disparaissaient.
Pour y parvenir, il suffit de :
- Aller dans : Paramètres / Batterie
- Appuyer sur les 3 points verticaux en haut à droite
- Choisir "Optimisation de la batterie". Vous aurez un aperçu des applications qui ne sont pas optimisées
- Appuyer sur "Non optimisées" et choisir "Toutes les applications"
Il ne vous reste plus qu'à faire défiler la liste des applications pour choisir celles qui vous posent problème.
Si je désactive les données et que j'utilise le GPS, je rencontre beaucoup de pertes de fix GPS.
Ces pertes n'existent pas si:
- Je reste en mode avion (super pour un smartphone... :roll: )
- J'active les données (super quand on est à l'étranger en roaming : j'y suis tous les jours...)
- Je commence la navigation avec les données activées et que je les désactive plus tard (ne fonctionne pas à tous les coups...)
Certains sont confrontés à d'autres problèmes que j'ai énumérés à la fin du tuto dans la partie "Information"
Nous pouvons voir qu'il s'agit d'un problème logiciel seulement en lisant ces 2 suivis de bugs de Google:
S'il vous plaît,
Connexion
ou
S'inscrire
pour voir le contenu ou les urls !
S'il vous plaît,
Connexion
ou
S'inscrire
pour voir le contenu ou les urls !
Je vous invite à y exprimer votre mécontentement.... Google a l'air très passif sur ce coup là ! :?
J'ai installé l'application RunGPS Pro Trial pour pouvoir extraire les données GPS lors d'un parcours.
Cette application permet de suivre la DOP (dilution de précision).
Pour chaque parcours que je fais, je peux voir que je perds le fix GPS exactement à 5 minutes d'intervalle (voir le graphique "DOP")
J'ai enregistré à chaque fois un rapport de bug et, chaque fois que RunGPS me montre que j'ai perdu le fix GPS, exactement à la même seconde, j'ai une requête réseau :
DUMP OF SERVICE connectivity:
mNetworkRequestInfoLogs (most recent first):
02-17 17:32:04.007 - REGISTER Request from uid/pid:1000/951 for NetworkRequest [ id=49, legacyType=3, [ Transports: CELLULAR Capabilities: SUPL&NOT_RESTRICTED&TRUSTED&NOT_VPN] ]
02-17 17:27:03.506 - REGISTER Request from uid/pid:1000/951 for NetworkRequest [ id=48, legacyType=3, [ Transports: CELLULAR Capabilities: SUPL&NOT_RESTRICTED&TRUSTED&NOT_VPN] ]
02-17 17:22:03.666 - REGISTER Request from uid/pid:1000/951 for NetworkRequest [ id=47, legacyType=3, [ Transports: CELLULAR Capabilities: SUPL&NOT_RESTRICTED&TRUSTED&NOT_VPN] ]
02-17 17:17:03.518 - REGISTER Request from uid/pid:1000/951 for NetworkRequest [ id=46, legacyType=3, [ Transports: CELLULAR Capabilities: SUPL&NOT_RESTRICTED&TRUSTED&NOT_VPN] ]
02-17 17:12:03.226 - REGISTER Request from uid/pid:1000/951 for NetworkRequest [ id=45, legacyType=3, [ Transports: CELLULAR Capabilities: SUPL&NOT_RESTRICTED&TRUSTED&NOT_VPN] ]
02-17 17:07:02.312 - REGISTER Request from uid/pid:1000/951 for NetworkRequest [ id=44, legacyType=3, [ Transports: CELLULAR Capabilities: SUPL&NOT_RESTRICTED&TRUSTED&NOT_VPN] ]
mNetworkRequestInfoLogs (most recent first):
02-17 17:32:04.007 - REGISTER Request from uid/pid:1000/951 for NetworkRequest [ id=49, legacyType=3, [ Transports: CELLULAR Capabilities: SUPL&NOT_RESTRICTED&TRUSTED&NOT_VPN] ]
02-17 17:27:03.506 - REGISTER Request from uid/pid:1000/951 for NetworkRequest [ id=48, legacyType=3, [ Transports: CELLULAR Capabilities: SUPL&NOT_RESTRICTED&TRUSTED&NOT_VPN] ]
02-17 17:22:03.666 - REGISTER Request from uid/pid:1000/951 for NetworkRequest [ id=47, legacyType=3, [ Transports: CELLULAR Capabilities: SUPL&NOT_RESTRICTED&TRUSTED&NOT_VPN] ]
02-17 17:17:03.518 - REGISTER Request from uid/pid:1000/951 for NetworkRequest [ id=46, legacyType=3, [ Transports: CELLULAR Capabilities: SUPL&NOT_RESTRICTED&TRUSTED&NOT_VPN] ]
02-17 17:12:03.226 - REGISTER Request from uid/pid:1000/951 for NetworkRequest [ id=45, legacyType=3, [ Transports: CELLULAR Capabilities: SUPL&NOT_RESTRICTED&TRUSTED&NOT_VPN] ]
02-17 17:07:02.312 - REGISTER Request from uid/pid:1000/951 for NetworkRequest [ id=44, legacyType=3, [ Transports: CELLULAR Capabilities: SUPL&NOT_RESTRICTED&TRUSTED&NOT_VPN] ]
Plus de détails sont renseignés dans la section "SERVICE com.android.phone / .TelephonyDebugService":
02-17 17:27:03.509 - clearing log with size=1
NetworkRequest [ id=48, legacyType=3, [ Transports: CELLULAR Capabilities: SUPL&NOT_RESTRICTED&TRUSTED&NOT_VPN] ]
02-17 17:27:03.508 - Dctc.requestNetwork, priority=2
02-17 17:27:03.509 - DcSwitchStateMachine.AttachedState: REQ_CONNECT
02-17 17:27:03.509 - DctController.onExecuteRequest
02-17 17:27:03.509 - DcTracker.incApnRefCount on supl found {mApnType=supl mState=IDLE mWaitingApns={null} mWaitingApnsPermanentFailureCountDown=0 mApnSetting={null} mReason=dataDisabled mDataEnabled=false mDependencyMet=true}
02-17 17:27:03.510 - ApnContext.incRefCount - 0
02-17 17:27:03.510 - applyNewState(supl, true(false), true(true))
02-17 17:27:03.510 - ApnContext.resetErrorCodeRetries
02-17 17:27:03.510 - trySetupData due to dataEnabled
02-17 17:27:03.543 - trySetupData: X apnContext not 'ready' retValue=false
02-17 17:27:33.507 - Cellular releasing Network for
02-17 17:27:33.507 - DctController.releaseNetwork
02-17 17:27:33.507 - DctController.onReleaseRequest
02-17 17:27:33.507 - DcTracker.decApnRefCount on supl found {mApnType=supl mState=IDLE mWaitingApns={null} mWaitingApnsPermanentFailureCountDown=0 mApnSetting={null} mReason=dataEnabled mDataEnabled=true mDependencyMet=true}
02-17 17:27:33.507 - ApnContext.decRefCount - 1
02-17 17:27:33.509 - applyNewState(supl, false(true), true(true))
02-17 17:27:33.509 - cleanUpConnection: tearDown=true reason=dataDisabled
02-17 17:27:33.509 - cleanUpConnection: X tearDown=true reason=dataDisabled
NetworkRequest [ id=48, legacyType=3, [ Transports: CELLULAR Capabilities: SUPL&NOT_RESTRICTED&TRUSTED&NOT_VPN] ]
02-17 17:27:03.508 - Dctc.requestNetwork, priority=2
02-17 17:27:03.509 - DcSwitchStateMachine.AttachedState: REQ_CONNECT
02-17 17:27:03.509 - DctController.onExecuteRequest
02-17 17:27:03.509 - DcTracker.incApnRefCount on supl found {mApnType=supl mState=IDLE mWaitingApns={null} mWaitingApnsPermanentFailureCountDown=0 mApnSetting={null} mReason=dataDisabled mDataEnabled=false mDependencyMet=true}
02-17 17:27:03.510 - ApnContext.incRefCount - 0
02-17 17:27:03.510 - applyNewState(supl, true(false), true(true))
02-17 17:27:03.510 - ApnContext.resetErrorCodeRetries
02-17 17:27:03.510 - trySetupData due to dataEnabled
02-17 17:27:03.543 - trySetupData: X apnContext not 'ready' retValue=false
02-17 17:27:33.507 - Cellular releasing Network for
02-17 17:27:33.507 - DctController.releaseNetwork
02-17 17:27:33.507 - DctController.onReleaseRequest
02-17 17:27:33.507 - DcTracker.decApnRefCount on supl found {mApnType=supl mState=IDLE mWaitingApns={null} mWaitingApnsPermanentFailureCountDown=0 mApnSetting={null} mReason=dataEnabled mDataEnabled=true mDependencyMet=true}
02-17 17:27:33.507 - ApnContext.decRefCount - 1
02-17 17:27:33.509 - applyNewState(supl, false(true), true(true))
02-17 17:27:33.509 - cleanUpConnection: tearDown=true reason=dataDisabled
02-17 17:27:33.509 - cleanUpConnection: X tearDown=true reason=dataDisabled
Je peux voir que le type d'APN qui est demandé est "supl". Cela signifie que les données A-GPS sont demandées ! Mais pourquoi ? J'ai déjà un fix !
Le fait de passer la localisation en mode "Appareil uniquement" ne change rien.
Pour éviter de telles demandes, j'ai changé les paramètres du GPS dans le fichier gps.conf.
J'ai désactivé MSA et MSB dans la section "capabilities".
Cela signifie que j'évite les 2 modes de fonctionnement: Mobile station assisted (MSA) et Mobile station based (MSB).
Comme ça, j'évite toute demande de A-GPS ...
Je n'ai plus de perte de fix avec ou sans les données activées.
Cela signifie que lorsque le dispositif envoie une demande de données A-GPS, quel que soit le résultat, le fix est perdu!
Maintenant, pourquoi 5 minutes?
Dans GpsLocationProvider.java, j'ai trouvé ces lignes:
Code:
S'il vous plaît,
Connexion
ou
S'inscrire
to view codes content!
Je n'ai pas connaissances en java, je ne peux donc pas essayer de comprendre ce qui ce passe avec cette variable...
Je pense qu'il y a une erreur dans la programmation et que cette variable n'est pas conditionnée par le fait que le fix du GPS est fait.
Si comme moi, vous voulez changer la valeur de "capabilities" du GPS pour éviter ces problèmes, voici la marche à suivre :
- Avoir un appareil rooté !
- Avoir une application type ES Explorer
- Allez dans "/system/etc" après avoir accordé les droits root à ES Explorer
- Ouvrir le fichier nommé "gps.conf"
- Vous devriez trouver une variable appelée «CAPABILITIES»
- Editez le fichier
Si cette variable est fixée à 0x37 ou 0x35 ou 0x33, modifiez la valeur à 0x31
Si cette variable est fixée à 0x36, modifiez la valeur à 0x30
Si cette variable est fixée à 0x27 ou 0x25 ou 0x23, modifiez la valeur à 0x21
Si cette variable est fixée à 0x26, modifiez la valeur à 0x20
Si cette variable est fixée à 0x17 ou 0x15 ou 0x13, modifiez la valeur à 0x11
Si cette variable est fixée à 0x16, modifiez la valeur à 0x10
Attention, il n'y a pas d'espace entre les chiffres et les lettres !
- Enregistrez le fichier et assurez-vous que les autorisations du fichier sont rw- r-- r-- (propriétés du fichier)
- Redémarrez l'appareil pour réinitialiser cette valeur.
Le premier fix peut prendre entre 30 s et 2 min, mais après cela, il devrait être plus rapide et vous ne devriez pas avoir de pertes.
Ce n'est pas une solution mais un contournement du problème lié à Android !
J'espère que ça va permettre à certains de retrouver les joies du GPS qu'on avait jusqu'à Android Kitkat...
Pour compléter ce Tuto, j'ajoute d'autres pistes:
1 - Certains utilisateurs se plaignent d'un dysfonctionnement du GPS lors de l'utilisation d'applications comme Maps depuis la mise à jour Marshmallow. Ils ne parviennent pas à obtenir un fix.
Visiblement, certaines applications ne parviennent pas à maintenir l'activation du GPS.
On retrouve majoritairement ces témoignages auprès des utilisateurs de produits Motorola.
Dans ce cas, il est possible d'utiliser l'application "GPS Locker" qui permet de forcer l'utilisation du GPS :
S'il vous plaît,
Connexion
ou
S'inscrire
pour voir le contenu ou les urls !
Si ce n'est pas efficace, une autre solution consiste à utiliser le widget "GPS Widget" de pixelclash :
S'il vous plaît,
Connexion
ou
S'inscrire
pour voir le contenu ou les urls !
Il parvient à maintenir le GPS activé. Il suffit donc d'activer le widget au démarrage d'une sessions GPS.
2 - D'autres utilisateurs de produits HTC ont pu constater qu'il leur fallait désactiver le mode d'économie d'énergie (saver mode) pour que le GPS soit fonctionnel et qu'il ne perde plus constamment le fix...
3 - Marshmallow a permis à Google d'introduire la fonction "Doze" qui permet au système de gérer au mieux la consommation énergétique de chaque application lorsqu'elle n'est pas utilisée.
Certains utilisateurs ont constaté qu'en désactivant cette fonction pour les applications posant un soucis d'utilisation du GPS, leurs problèmes disparaissaient.
Pour y parvenir, il suffit de :
- Aller dans : Paramètres / Batterie
- Appuyer sur les 3 points verticaux en haut à droite
- Choisir "Optimisation de la batterie". Vous aurez un aperçu des applications qui ne sont pas optimisées
- Appuyer sur "Non optimisées" et choisir "Toutes les applications"
Il ne vous reste plus qu'à faire défiler la liste des applications pour choisir celles qui vous posent problème.